<?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>86037</bug_id>
          
          <creation_ts>2012-05-09 16:43:43 -0700</creation_ts>
          <short_desc>[GTK] Add an accelerated compositing implementation for WebKit2</short_desc>
          <delta_ts>2019-07-18 16:38:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>80509</dependson>
          <blocked>74087</blocked>
    
    <blocked>87053</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>arvind.tech225</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>joone</cc>
    
    <cc>naginenis</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xpert2013</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>620024</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-09 16:43:43 -0700</bug_when>
    <thetext>We should add an accelerated compositing implementation for WebKit that uses the OpenGL TextureMapper by default and later add a fallback to the ImageBuffer TextureMapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620046</commentid>
    <comment_count>1</comment_count>
      <attachid>141054</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-09 17:04:15 -0700</bug_when>
    <thetext>Created attachment 141054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620253</commentid>
    <comment_count>2</comment_count>
      <attachid>141086</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-09 22:28:44 -0700</bug_when>
    <thetext>Created attachment 141086
Enable the layer flush scheduling by default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620264</commentid>
    <comment_count>3</comment_count>
    <who name="xpert">xpert2013</who>
    <bug_when>2012-05-09 23:03:41 -0700</bug_when>
    <thetext>

1. As per guidelines of using refptr , passrefptr is as for this case

If lifetime of any object fixed and scope is also known then use refptr instead passrefptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620285</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-09 23:37:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; 
&gt; 1. As per guidelines of using refptr , passrefptr is as for this case
&gt; 
&gt; If lifetime of any object fixed and scope is also known then use refptr instead passrefptr.

This patch uses PassRefPtr for a factory method, which is precisely a time when it should be used. Unless I&apos;m misunderstanding your comment...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620334</commentid>
    <comment_count>5</comment_count>
      <attachid>141086</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-10 00:40:44 -0700</bug_when>
    <thetext>Comment on attachment 141086
Enable the layer flush scheduling by default

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:322
&gt; +#if USE(TEXTURE_MAPPER_GL) &amp;&amp; defined(GDK_WINDOWING_X11)
&gt; +    GdkWindow* gdkWindow = gtk_widget_get_window(widget);
&gt; +    if (gdkWindow &amp;&amp; gdk_window_has_native(gdkWindow))
&gt; +        WEBKIT_WEB_VIEW_BASE(widget)-&gt;priv-&gt;pageProxy-&gt;widgetMapped(GDK_WINDOW_XID(gdkWindow));
&gt; +#endif

Widgets are realized before map is emitted, so gtk_widget_get_window() will never return NULL here. 
Do we need to send the window id every time the widget is mapped? The window is created in realize() and it never changes. Instead of sending it when mapped, we could send it when the page is created as part for the page creation parameters. We could add a nativeWindowHandle() method to our PageClient that realizes the widget if it&apos;s not yet realized and returns the window id. This way we also save a new IPC message.

&gt; Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp:43
&gt; +#if PLATFORM(GTK) &amp;&amp; USE(TEXTURE_MAPPER_GL)
&gt; +#include &quot;gtk/LayerTreeHostGtk.h&quot;
&gt; +#endif

WebPage/gtk is already in the includes path, so you can just #include &quot;LayerTreeHostGtk.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620606</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-10 08:35:17 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 141086 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141086&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:322
&gt; &gt; +#if USE(TEXTURE_MAPPER_GL) &amp;&amp; defined(GDK_WINDOWING_X11)
&gt; &gt; +    GdkWindow* gdkWindow = gtk_widget_get_window(widget);
&gt; &gt; +    if (gdkWindow &amp;&amp; gdk_window_has_native(gdkWindow))
&gt; &gt; +        WEBKIT_WEB_VIEW_BASE(widget)-&gt;priv-&gt;pageProxy-&gt;widgetMapped(GDK_WINDOW_XID(gdkWindow));
&gt; &gt; +#endif
&gt; 
&gt; Widgets are realized before map is emitted, so gtk_widget_get_window() will never return NULL here. 
&gt; Do we need to send the window id every time the widget is mapped? The window is created in realize() and it never changes. Instead of sending it when mapped, we could send it when the page is created as part for the page creation parameters. We could add a nativeWindowHandle() method to our PageClient that realizes the widget if it&apos;s not yet realized and returns the window id. This way we also save a new IPC message.

The reason for doing it in map, is that later I may send another message in unmap. This could allow us to stop rendering or slow down the animation speed when then widget isn&apos;t on the screen.

I also cannot find whether it is valid to render to a GLX window while the wrapped X window is invalid. The introductory example wait until the window is map to make the context active: http://www.opengl.org/sdk/docs/man/xhtml/glXIntro.xml

&gt; &gt; Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp:43
&gt; &gt; +#if PLATFORM(GTK) &amp;&amp; USE(TEXTURE_MAPPER_GL)
&gt; &gt; +#include &quot;gtk/LayerTreeHostGtk.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; WebPage/gtk is already in the includes path, so you can just #include &quot;LayerTreeHostGtk.h&quot;

Okay. Will fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620610</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-10 08:46:42 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 141086 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141086&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:322
&gt; &gt; &gt; +#if USE(TEXTURE_MAPPER_GL) &amp;&amp; defined(GDK_WINDOWING_X11)
&gt; &gt; &gt; +    GdkWindow* gdkWindow = gtk_widget_get_window(widget);
&gt; &gt; &gt; +    if (gdkWindow &amp;&amp; gdk_window_has_native(gdkWindow))
&gt; &gt; &gt; +        WEBKIT_WEB_VIEW_BASE(widget)-&gt;priv-&gt;pageProxy-&gt;widgetMapped(GDK_WINDOW_XID(gdkWindow));
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; Widgets are realized before map is emitted, so gtk_widget_get_window() will never return NULL here. 
&gt; &gt; Do we need to send the window id every time the widget is mapped? The window is created in realize() and it never changes. Instead of sending it when mapped, we could send it when the page is created as part for the page creation parameters. We could add a nativeWindowHandle() method to our PageClient that realizes the widget if it&apos;s not yet realized and returns the window id. This way we also save a new IPC message.
&gt; 
&gt; The reason for doing it in map, is that later I may send another message in unmap. This could allow us to stop rendering or slow down the animation speed when then widget isn&apos;t on the screen.

But the window id will still be the same, so we could send the window id once when creating the page and then simply send notification messages Mapped/Unmapped to the web process when the widget is mapped/unmapped

&gt; I also cannot find whether it is valid to render to a GLX window while the wrapped X window is invalid. The introductory example wait until the window is map to make the context active: http://www.opengl.org/sdk/docs/man/xhtml/glXIntro.xml

I have no idea about OpenGL, so I can&apos;t help here :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620613</commentid>
    <comment_count>8</comment_count>
      <attachid>141086</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-10 08:54:58 -0700</bug_when>
    <thetext>Comment on attachment 141086
Enable the layer flush scheduling by default

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

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:322
&gt;&gt;&gt;&gt; +#endif
&gt;&gt;&gt; 
&gt;&gt;&gt; Widgets are realized before map is emitted, so gtk_widget_get_window() will never return NULL here. 
&gt;&gt;&gt; Do we need to send the window id every time the widget is mapped? The window is created in realize() and it never changes. Instead of sending it when mapped, we could send it when the page is created as part for the page creation parameters. We could add a nativeWindowHandle() method to our PageClient that realizes the widget if it&apos;s not yet realized and returns the window id. This way we also save a new IPC message.
&gt;&gt; 
&gt;&gt; The reason for doing it in map, is that later I may send another message in unmap. This could allow us to stop rendering or slow down the animation speed when then widget isn&apos;t on the screen.
&gt;&gt; 
&gt;&gt; I also cannot find whether it is valid to render to a GLX window while the wrapped X window is invalid. The introductory example wait until the window is map to make the context active: http://www.opengl.org/sdk/docs/man/xhtml/glXIntro.xml
&gt; 
&gt; But the window id will still be the same, so we could send the window id once when creating the page and then simply send notification messages Mapped/Unmapped to the web process when the widget is mapped/unmapped

The idea was to clear the native window handle on unmapping and reinitialize it on mapping, using only two IPC messages instead of one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631993</commentid>
    <comment_count>9</comment_count>
      <attachid>143639</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-23 13:41:26 -0700</bug_when>
    <thetext>Created attachment 143639
Patch rebased and now using GLib timer to avoid starvation due to event handling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632004</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-23 13:46:53 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633016</commentid>
    <comment_count>11</comment_count>
      <attachid>143864</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-24 11:48:59 -0700</bug_when>
    <thetext>Created attachment 143864
The same patch minus a GSource bomb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633470</commentid>
    <comment_count>12</comment_count>
      <attachid>143864</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-24 19:00:49 -0700</bug_when>
    <thetext>Comment on attachment 143864
The same patch minus a GSource bomb

Clearing review flag, because this one still needs a bit of work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636598</commentid>
    <comment_count>13</comment_count>
      <attachid>144650</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-29 17:14:07 -0700</bug_when>
    <thetext>Created attachment 144650
Remove one more GSource leak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636940</commentid>
    <comment_count>14</comment_count>
      <attachid>144650</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-30 00:01:33 -0700</bug_when>
    <thetext>Comment on attachment 144650
Remove one more GSource leak

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:351
&gt; +    GdkWindow* gdkWindow = gtk_widget_get_window(widget);
&gt; +    if (gdkWindow &amp;&amp; gdk_window_has_native(gdkWindow))

Widgets are realized before map is emitted, so gtk_widget_get_window() will never return NULL here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:352
&gt; +        WEBKIT_WEB_VIEW_BASE(widget)-&gt;priv-&gt;pageProxy-&gt;widgetMapped(GDK_WINDOW_XID(gdkWindow));

No need to cast again, just webViewBase-&gt;priv

&gt; Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp:43
&gt; +#if PLATFORM(GTK) &amp;&amp; USE(TEXTURE_MAPPER_GL)
&gt; +#include &quot;gtk/LayerTreeHostGtk.h&quot;
&gt; +#endif

WebPage/gtk is already in the includes path, so you can just #include &quot;LayerTreeHostGtk.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637239</commentid>
    <comment_count>15</comment_count>
      <attachid>144650</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-30 08:07:29 -0700</bug_when>
    <thetext>Comment on attachment 144650
Remove one more GSource leak

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:351
&gt;&gt; +    if (gdkWindow &amp;&amp; gdk_window_has_native(gdkWindow))
&gt; 
&gt; Widgets are realized before map is emitted, so gtk_widget_get_window() will never return NULL here.

Great. I can just change this to an ASSERT.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:352
&gt;&gt; +        WEBKIT_WEB_VIEW_BASE(widget)-&gt;priv-&gt;pageProxy-&gt;widgetMapped(GDK_WINDOW_XID(gdkWindow));
&gt; 
&gt; No need to cast again, just webViewBase-&gt;priv

Okay.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp:43
&gt;&gt; +#endif
&gt; 
&gt; WebPage/gtk is already in the includes path, so you can just #include &quot;LayerTreeHostGtk.h&quot;

Okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638486</commentid>
    <comment_count>16</comment_count>
      <attachid>145101</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-05-31 09:14:07 -0700</bug_when>
    <thetext>Created attachment 145101
Stacktrace using 20120529 patch

This trace shows a crash due to an assert in FrameView. From gdb session needsLayout() is true because m_layoutTimer is active.

The use case:
* Wk2 with debug
* Run minibrowser with webgl and opengl AC enabled, plugins disabled.
* Go to http://www.chromeexperiments.com/detail/bvh-player/?f=webgl and launch the demo
* The new window appears, and crash happens after this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645133</commentid>
    <comment_count>17</comment_count>
      <attachid>146664</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-08 16:53:51 -0700</bug_when>
    <thetext>Created attachment 146664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645135</commentid>
    <comment_count>18</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-08 16:59:20 -0700</bug_when>
    <thetext>The latest patch fixes both issues mentioned above, I believe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645145</commentid>
    <comment_count>19</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-08 17:17:49 -0700</bug_when>
    <thetext>Is a clean build required? http://queues.webkit.org/patch/146664</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645147</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-08 17:25:46 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Is a clean build required? http://queues.webkit.org/patch/146664

It looks like the bots need a clean build because of another patch committed to master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647026</commentid>
    <comment_count>21</comment_count>
      <attachid>146664</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-06-12 10:02:02 -0700</bug_when>
    <thetext>Comment on attachment 146664
Patch

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

Looks good to me, I&apos;ve tested and it works great :), let&apos;s try it! I&apos;ve added some nits.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:547
&gt; +#if PLATFORM(GTK)
&gt; +    uint64_t nativeWindowHandle() { return m_nativeWindowHandle; }
&gt; +#endif

Why aren&apos;t we protecting here with the USE(TEXTURE_MAPPER_GL) define?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:765
&gt; +    // Our view&apos;s window in the UI process.
&gt; +    uint64_t m_nativeWindowHandle;

Same here.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.h:74
&gt; +    // GraphicsLayerClient

Dot at the end.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.h:105
&gt; +    // The root layer.
&gt; +    OwnPtr&lt;WebCore::GraphicsLayer&gt; m_rootLayer;

Probably we can remove this comment, I think the variable name is correctly saying what it is. I think there was some discussion at some point in the list about these comments, do not recall the conclusion though :). In case you decide to remove it there are others like this in the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648451</commentid>
    <comment_count>22</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-13 14:10:01 -0700</bug_when>
    <thetext>(In reply to comment #21)

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:547
&gt; &gt; +#if PLATFORM(GTK)
&gt; &gt; +    uint64_t nativeWindowHandle() { return m_nativeWindowHandle; }
&gt; &gt; +#endif
&gt; 
&gt; Why aren&apos;t we protecting here with the USE(TEXTURE_MAPPER_GL) define?
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:765
&gt; &gt; +    // Our view&apos;s window in the UI process.
&gt; &gt; +    uint64_t m_nativeWindowHandle;
&gt; 
&gt; Same here.

I&apos;ll add the TEXTURE_MAPPER_GL define to these locations.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.h:74
&gt; &gt; +    // GraphicsLayerClient
&gt; 
&gt; Dot at the end.

Skipping this since the comment isn&apos;t a sentence. :)
 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.h:105
&gt; &gt; +    // The root layer.
&gt; &gt; +    OwnPtr&lt;WebCore::GraphicsLayer&gt; m_rootLayer;
&gt; 
&gt; Probably we can remove this comment, I think the variable name is correctly saying what it is. I think there was some discussion at some point in the list about these comments, do not recall the conclusion though :). In case you decide to remove it there are others like this in the file.

Okay. I copied this kind of commenting from the CA version of the file, but I agree they don&apos;t add much  beyond the naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648606</commentid>
    <comment_count>23</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-13 17:13:56 -0700</bug_when>
    <thetext>Committed r120262: &lt;http://trac.webkit.org/changeset/120262&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141054</attachid>
            <date>2012-05-09 17:04:15 -0700</date>
            <delta_ts>2012-05-09 22:28:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86037-20120509170414.patch</filename>
            <type>text/plain</type>
            <size>33453</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTBkMWIyY2Q3ODMyNDg5
NjUzODFlZmM5YTBjY2Y3NThkZWVlMDBiZi4uNzkyYzEzMWI1ZDI0YjQzMDhhMzYzY2RlMzA0N2I4
N2FjNGNhOGYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA1LTA5ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
YW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBjb21wb3NpdGluZyB0ZXN0cywgd2hp
Y2gKKyAgICAgICAgd2Ugd2lsbCBncmFkdWFsbHkgdHJ5IHRvIHR1cm4gb24gZm9yIHRoZSBib3Rz
LgorCisgICAgICAgIEFkZCBhIG5ldyBHTENvbnRleHQgbWV0aG9kIGZvciBnZXR0aW5nIHRvIGN1
cnJlbnQgZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaXplLCB3aGljaAorICAgICAgICBpcyBxdWl0ZSB1
c2VmdWwgZm9yIHByZXZlbnRpbmcgY29tcG9zaXRlZCBjb250ZW50IHF1aXZlcmluZyB3aGlsZSBy
ZXNpemluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKTogQWRk
ZWQgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgWDExCisgICAgICAgIHdoaWNoIGFza3MgdGhlIFgg
c2VydmVyIGZvciB0aGUgd2luZG93IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5oOgorCiAyMDEyLTA1LTA2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9i
aW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIEltcGxlbWVudCBJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlIGZvciBCYWNraW5nU3RvcmVDb3B5ID09IERvbnRDb3B5QmFja2luZ1N0b3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggZDFiMmQwYTc2YWRiZDAxODQxMDY4MDQ0OWQxYzllZjc1ZWU1NjAzNi4u
Njk0YWRiNWExODM2YzRmM2E0N2E5MzRkM2VhY2U0N2Y1Y2ZlZjZjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI2IEBACisyMDEyLTA1LTA5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgYW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcg
aW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGFuIGltcGxlbWVudGF0aW9uIG9mIExheWVyVHJlZUhvc3Qg
Zm9yIEdUSysgdGhhdCB1c2VzIFRleHR1cmVNYXBwZXJHTC4KKyAgICAgICAgTGF0ZXIgdGhpcyBp
bXBsZW1lbnRhdGlvbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgSW1hZ2VCdWZmZXIgVGV4
dHVyZU1hcHBlci4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRv
IHRoZSBjb21waWxhdGlvbi4KKyAgICAgICAgKiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oOgor
ICAgICAgICAoTGF5ZXJUcmVlQ29udGV4dCk6IFRoZSBHVEsrIHZlcnNpb24gb2YgdGhlIExheWVy
VHJlZUNvbnRleHQganVzdCBob2xkcyB3aW5kb3cgaGFuZGxlLgorICAgICAgICAqIFNoYXJlZC9n
dGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcDogQWRkZWQuCisgICAgICAgIEFk
ZCB0aGlzIExheWVyVHJlZUhvc3QgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IGNyZWF0ZXMgYSBH
TCBjb250ZXh0IGZyb20gdGhlIHdpZGdldCBYMTEgd2luZG93IElELgorICAgICAgICBMYXRlciBp
bXBsZW1lbnRhdGlvbnMgbWlnaHQgZmluZCBhIG1vcmUgY3Jvc3MtcGxhdGZvcm0gc29sdXRpb24u
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKTogSW5pdGlhbGl6ZSB0aGUg
bmF0aXZlIHdpbmRvdyBoYW5kbGUgdG8gYmUgemVyby4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6d2lkZ2V0TWFwcGVkKTogV2hlbiBtYXBwaW5nIHRoZSB3aWRnZXQsIHRyeSB0byBnZXQgdGhl
IG5hdGl2ZSB3aW5kb3cKKyAgICAgICAgaGFuZGxlIGFuZCBzZW5kIGl0IHRvIHRoZSBXZWJQcm9j
ZXNzLgorCiAyMDEyLTA1LTA3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgRU5BQkxFX0lGUkFNRV9TRUFNTEVTUyBzbyBBcHBsZSBjYW4gdHVybiBvZmYgU0VB
TUxFU1MgaWYgbmVlZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dMQ29udGV4dC5oCmluZGV4IGRlMmUwYTY0YmNhYzgxZWU1NDRkNDBiZGFiMDMyYWE0
ZWQyOGQ3NGMuLmFiODJjOWE0NTgyNThiZTg3MmFiN2JiZDIxM2NlNWQ2ZWRiOGQxZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
CkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCkgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBjYW5SZW5kZXJUb0RlZmF1bHRGcmFtZWJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFs
IEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpID0gMDsKIAogI2lmIEVOQUJMRShXRUJH
TCkKICAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0
KCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgv
R0xDb250ZXh0R0xYLmNwcAppbmRleCBjNzlmMGVjMzdmMzQ3M2EyYmM4MmQ1YTIzYmEyMzJjODVj
YzI2YWYwLi43ZmYyYWMxMzg3MWQzNWFhYzlhOTQ0ODEwMDM2NTI3ODFkNDYyMjU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcApAQCAtMjYzLDYgKzI2MywyMCBAQCBib29sIEdMQ29udGV4dEdMWDo6Y2FuUmVuZGVyVG9E
ZWZhdWx0RnJhbWVidWZmZXIoKQogICAgIHJldHVybiBtX3dpbmRvdzsKIH0KIAorSW50U2l6ZSBH
TENvbnRleHRHTFg6OmRlZmF1bHRGcmFtZUJ1ZmZlclNpemUoKQoreworICAgIGlmICghY2FuUmVu
ZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKSB8fCAhbV93aW5kb3cpCisgICAgICAgIHJldHVybiBJ
bnRTaXplKCk7CisKKyAgICBpbnQgeCwgeTsKKyAgICBXaW5kb3cgcm9vdFdpbmRvdzsKKyAgICB1
bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgYm9yZGVyV2lkdGgsIGRlcHRoOworICAgIGlmICgh
WEdldEdlb21ldHJ5KHNoYXJlZERpc3BsYXkoKSwgbV93aW5kb3csICZyb290V2luZG93LCAmeCwg
JnksICZ3aWR0aCwgJmhlaWdodCwgJmJvcmRlcldpZHRoLCAmZGVwdGgpKQorICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisK
IGJvb2wgR0xDb250ZXh0R0xYOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogICAgIEFTU0VSVCht
X2NvbnRleHQgJiYgKG1fd2luZG93IHx8IG1fcGJ1ZmZlciB8fCBtX2dseFBpeG1hcCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdM
WC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5o
CmluZGV4IDQ4YjY1ODk2Y2YzYzQzNTkxNGJjOGE0ZmQzZjJiMDE5M2YzNDcxZGQuLjkzYTFlODcz
NDRjZjVmZTgxMDMwMjY2NGM3YWVhZGQxMmY0NDBlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAgLTQ2LDYgKzQ2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9E
ZWZhdWx0RnJhbWVidWZmZXIoKTsKKyAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVm
ZmVyU2l6ZSgpOwogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXgg
YTZiNDJhNmQ2NzlhYTk0MjU2NzRkODFlNjgzOTFmZWM5M2Y4NzM5YS4uZGFlM2Q1ODMxMWU4MWZl
NDBlYTYyZDE1OTg1MjZkMTk1M2M0Yjc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTM0NCwx
MCArMzQ0LDEwIEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVk
L0VkaXRvclN0YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Gb250U21vb3RoaW5nTGV2
ZWwuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aC5oIFwK
LQlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vTGF5ZXJUcmVlQ29udGV4dENhaXJvLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcCBcCisJU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9MYXllclRyZWVDb250ZXh0R3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBcCkBAIC0xMDI4LDYg
KzEwMjgsMTIgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAogCitpZiBVU0VfVEVYVFVSRV9NQVBQRVJfR0wKK3dlYmtpdDJfc291cmNlcyArPSBcCisJ
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNw
cCBcCisJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0
R3RrLmgKK2VuZGlmICMgRU5EIFVTRV9URVhUVVJFX01BUFBFUl9HTAorCiBsaWJ3ZWJraXQyZ3Rr
X0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJ
T05AX2xhX1NPVVJDRVMgPSBcCiAJJCh3ZWJraXQyX3NvdXJjZXMpCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCmluZGV4IGYzM2ZhOTc3MmMwM2M3MTBiZTNiZmM0MWU0
NDE1YjlkYzVkM2MwNzQuLjcxMGQ5ZGE4MTQ0MzA2YTRlNzAyMDRmZmUwNzk2NzNkYzk1MWJhZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaApAQCAtNTYsNiArNTYs
OCBAQCBwdWJsaWM6CiAgICAgSFdORCB3aW5kb3c7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICB1
aW50MzJfdCB3ZWJMYXllcklEOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHVpbnQ2NF90IHdp
bmRvd0hhbmRsZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9MYXllclRyZWVDb250ZXh0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdkOTE4YTcwZjlkYmIxZTZj
MGI3NDRiYmIyZmQ2MWRkZmI0NjhjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0
LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVu
Y29kZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0xheWVyVHJlZUNvbnRleHQ6OkxheWVy
VHJlZUNvbnRleHQoKQorICAgIDogd2luZG93SGFuZGxlKDApCit7Cit9CisKK0xheWVyVHJlZUNv
bnRleHQ6On5MYXllclRyZWVDb250ZXh0KCkKK3sKK30KKwordm9pZCBMYXllclRyZWVDb250ZXh0
OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXItPmVuY29kZSh3aW5kb3dIYW5kbGUpOworfQorCitib29sIExheWVyVHJlZUNvbnRl
eHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNv
bnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShjb250ZXh0Lndp
bmRvd0hhbmRsZSk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICF3aW5kb3dIYW5kbGU7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25z
dCBMYXllclRyZWVDb250ZXh0JiBhLCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBiKQoreworICAg
IHJldHVybiBhLndpbmRvd0hhbmRsZSA9PSBiLndpbmRvd0hhbmRsZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBiMmNkZGU1NjQ2ZWRjNGRmMDYxZmY2MzNh
NDIxNmIwY2I1YTlhMjlhLi40ZjViYTA3ZDY3MmY5MTQ0MTM3MDNiOTVmYWEwZGIzYmNkYzBhOTM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2UuY3BwCkBAIC02NCw2ICs2NCwxMCBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAm
JiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5k
aWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC0xNDgsNiArMTUyLDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXpl
KEd0a1dpZGdldCogd2lkZ2V0KQogICAgIGdpbnQgYXR0cmlidXRlc01hc2sgPSBHREtfV0FfWCB8
IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTDsKIAogICAgIEdka1dpbmRvdyogd2luZG93ID0gZ2Rr
X3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmli
dXRlcywgYXR0cmlidXRlc01hc2spOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBn
ZGtfd2luZG93X2Vuc3VyZV9uYXRpdmUod2luZG93KTsKKyNlbmRpZgogICAgIGd0a193aWRnZXRf
c2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRvdyk7CiAgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRh
KHdpbmRvdywgd2lkZ2V0KTsKIApAQCAtMzA4LDYgKzMxNSwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZU1hcChHdGtXaWRnZXQqIHdpZGdldCkKICAgICBHVEtfV0lER0VUX0NMQVNT
KHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPm1hcCh3aWRnZXQpOwogCiAgICAg
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19YMTEpCisgICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
d2lkZ2V0KTsKKyAgICBpZiAoZ2RrV2luZG93ICYmIGdka193aW5kb3dfaGFzX25hdGl2ZShnZGtX
aW5kb3cpKQorICAgICAgICBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2LT5wYWdl
UHJveHktPndpZGdldE1hcHBlZChHREtfV0lORE9XX1hJRChnZGtXaW5kb3cpKTsKKyNlbmRpZgor
CiAgICAgaWYgKCF3ZWJWaWV3QmFzZS0+cHJpdi0+bmVlZHNSZXNpemVPbk1hcCkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYTNl
OWJiOGY3OWJjMDQ3YTdhODE4YjFlMmFiMzQyNTBmOWExYzYzNy4uZDRkYmZiNjAxMTY1N2M2N2Zm
NjY4ZDA2ZmJlMWFiNzk5NmEzMDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaApAQCAtNjUxLDYgKzY1MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gV2ViUG9wdXBNZW51
UHJveHk6OkNsaWVudAogICAgIHZpcnR1YWwgTmF0aXZlV2ViTW91c2VFdmVudCogY3VycmVudGx5
UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKTsKIAorI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgd2lkZ2V0TWFwcGVkKHVpbnQ2NF90IG5hdGl2ZVdp
bmRvd0lkKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50
KiwgUGFzc1JlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBXZWJQYWdlR3JvdXAqLCB1aW50NjRfdCBw
YWdlSUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBh
Z2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94
eUd0ay5jcHAKaW5kZXggZGM4MjM1MjEwZTdkYzA5OWM2Mzk0ODUxYjhhNTE0ZGNhZTljZDllMi4u
YWMyNmMwY2I4ZmRiYjhjOWU3MjVmOTMzYjg0NzhhMmE0ZGNjMGY3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtMzEsNiArMzEs
OCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudElt
cGwuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRl
IDxndGsvZ3RreC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwNyw0ICsxMDksMTEgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd2VkUGx1Z2luR2VvbWV0cnlEaWRDaGFuZ2UoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZnJhbWUKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNoaWxkTW92ZVJl
c2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh2aWV3V2lkZ2V0KCkpLCBwbHVnaW4sIGZyYW1lUmVj
dCk7CiB9CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIFdlYlBhZ2VQcm94eTo6
d2lkZ2V0TWFwcGVkKHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0lkKQoreworICAgIHByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2lkZ2V0TWFwcGVkKG5hdGl2ZVdpbmRvd0lkKSwgbV9w
YWdlSUQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDky
ZWI0MDg1NTk5NTYzMGE3YjU0YzM5YmJjMjM0NGZiYzFkZjBmNzkuLjRiNjk1YWY2NTA3OWQ2ZDNj
OTk0MjU4YWU0YTRmNDBjNTk1ZjM2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5j
bHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2luY2x1ZGUgImd0ay9MYXllclRyZWVIb3N0R3Rr
LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtNTAsNiArNTQsOCBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJl
ZUhvc3Q6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0
Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIHJldHVybiBM
YXllclRyZWVIb3N0UXQ6OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHJldHVybiBMYXllclRyZWVIb3N0R3RrOjpjcmVh
dGUod2ViUGFnZSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBkOWQyZGY3MmNkOTJjMTZhOGQ4
ZDJmMjAzNGRhM2M3ZjgwYTYyYmZjLi40NmIzODUwNGMyMWMyM2ZkNDUyNWFhN2IzMGNhNzZmMTNi
ZTA0NzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTQyOCw2ICs0MjgsOSBAQCBwdWJsaWM6CiAKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICB2
b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorICAgIHZvaWQgd2lkZ2V0TWFwcGVkKGludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKTsKKyNl
bmRpZgogI2VuZGlmCiAKICAgICB2b2lkIHNldENvbXBvc2l0aW9uRm9yVGVzdGluZyhjb25zdCBT
dHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCB1aW50NjRfdCBmcm9tLCB1aW50NjRfdCBsZW5ndGgp
OwpAQCAtNTMxLDYgKzUzNCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaXNpYmlsaXR5U3Rh
dGUoaW50IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSk7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUoKSB7IHJl
dHVybiBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2Vi
UGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsK
IApAQCAtNzQzLDYgKzc1MCw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+
IG1fZ2VzdHVyZVRhcmdldE5vZGU7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3QqIG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKKworICAgIC8vIE91ciB2
aWV3J3Mgd2luZG93IGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHVpbnQ2NF90IG1fbmF0aXZlV2lu
ZG93SGFuZGxlOwogI2VuZGlmCiAgICAgCiAgICAgV2ViQ29yZTo6UnVuTG9vcDo6VGltZXI8V2Vi
UGFnZT4gbV9zZXRDYW5TdGFydE1lZGlhVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDgzODFmMjYwM2Iy
YTUxMzExNmY0NjRhMjNjYWJkN2UzMWZiMGRkZjMuLjFhNTgyOTAzY2FiOWU5MDc5NWJhYTQ0N2U1
MDRmMjY1NzdlOGJlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0yNjksNCArMjY5LDggQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZSB7CiAjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCiAgICAgU2V0Vmlz
aWJpbGl0eVN0YXRlKGludCB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOwog
I2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAg
ICBXaWRnZXRNYXBwZWQoaW50NjRfdCBpZCkKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTQ4Mjk2YTZkZWFiZTEyMTI2YThkMWYxZDk1N2YyOGRlMTBkYzhiMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5
ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJMYXllclRyZWVIb3N0R3RrLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPEdML2dsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HTENvbnRleHRHTFguaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaWYgZGVmaW5lZChH
REtfV0lORE9XSU5HX1gxMSkKKyNkZWZpbmUgUmVnaW9uIFhSZWdpb24KKyNkZWZpbmUgRm9udCBY
Rm9udAorI2RlZmluZSBDdXJzb3IgWEN1cnNvcgorI2RlZmluZSBTY3JlZW4gWFNjcmVlbgorI2lu
Y2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IExheWVy
VHJlZUhvc3RHdGs6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQoreworICAgIFJlZlB0cjxMYXll
clRyZWVIb3N0R3RrPiBob3N0ID0gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RHdGsod2ViUGFn
ZSkpOworICAgIGhvc3QtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gaG9zdC5yZWxlYXNlKCk7
Cit9CisKK0xheWVyVHJlZUhvc3RHdGs6OkxheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSogd2ViUGFn
ZSkKKyAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQor
ICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2xh
eWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChmYWxzZSkKK3sKK30KKwor
R0xDb250ZXh0KiBMYXllclRyZWVIb3N0R3RrOjpnbENvbnRleHQoKQoreworICAgIGlmIChtX2Nv
bnRleHQpCisgICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CisKKyAgICB1aW50NjRfdCB3
aW5kb3dIYW5kbGUgPSBtX3dlYlBhZ2UtPm5hdGl2ZVdpbmRvd0hhbmRsZSgpOworICAgIGlmICgh
d2luZG93SGFuZGxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fY29udGV4dCA9IEdMQ29u
dGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyh3aW5kb3dIYW5kbGUsIEdMQ29udGV4dDo6c2hh
cmluZ0NvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0R3RrOjppbml0aWFsaXplKCkKK3sKKyAgICBtX3Jvb3RMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50
KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisK
KyAgICAvLyBUaGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudHMgYXJlIGEgY2hpbGQgb2YgdGhlIHJv
b3QgbGF5ZXIuCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKHRoaXMpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29u
dGVudHNPcGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5k
cmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworICAgIGlmIChtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcodHJ1
ZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJl
ZUhvc3Qgcm9vdCBsYXllciIpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmFtZSgiTGF5ZXJUcmVlSG9zdCBub24tY29tcG9zaXRlZCBjb250ZW50Iik7CisjZW5kaWYKKwor
ICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0
KCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7
CisKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2luZG93SGFuZGxlID0gbV93ZWJQYWdlLT5uYXRp
dmVXaW5kb3dIYW5kbGUoKTsKKworICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgp
OworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1h
cHBlciBuZWVkcyBhbiBhY3RpdmUgT3BlbkdMIGNvbnRleHQuCisgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpj
cmVhdGUoKTsKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNl
dFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKworICAgIGlmIChtX3dlYlBh
Z2UtPmhhc1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsK
KworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpOworfQorCitMYXllclRyZWVIb3N0R3RrOjp+TGF5ZXJUcmVlSG9zdEd0aygpCit7CisgICAg
QVNTRVJUKCFtX2lzVmFsaWQpOworICAgIEFTU0VSVCghbV9yb290TGF5ZXIpOworfQorCitjb25z
dCBMYXllclRyZWVDb250ZXh0JiBMYXllclRyZWVIb3N0R3RrOjpsYXllclRyZWVDb250ZXh0KCkK
K3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OworfQorCit2b2lkIExheWVyVHJlZUhv
c3RHdGs6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBu
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCit7CisgICAgbV9ub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJl
bW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRy
ZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworCisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6aW52YWxpZGF0ZSgp
Cit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOwor
ICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVj
dCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zm
c2V0KQoreworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJl
Y3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50
U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXpl
KQorICAgICAgICByZXR1cm47CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisK
KyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBv
c2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhv
c2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRT
aXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRS
ZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgp
LCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUu
aGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRo
KCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIGlmIChtX3BhZ2VP
dmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXpl
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5n
ZSgpCit7CisgICAgLy8gT3RoZXIgbGF5ZXJzIGxlYXJuIG9mIHRoZSBzY2FsZSBmYWN0b3IgY2hh
bmdlIHZpYSBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3Rvci4KKyAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RHdGs6OmZvcmNlUmVwYWludCgpCit7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGlkSW5zdGFsbFBhZ2VPdmVy
bGF5KCkKK3sKKyAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGlkVW5pbnN0YWxsUGFnZU92
ZXJsYXkoKQoreworICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0R3RrOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpub3RpZnlT
eW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdEd0azo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmIChncmFw
aGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAgICBtX3dl
YlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVy
KSB7CisgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwg
Y2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIExheWVyVHJlZUhv
c3RHdGs6OnNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9y
ZGVycygpOworfQorCitib29sIExheWVyVHJlZUhvc3RHdGs6OnNob3dSZXBhaW50Q291bnRlcihj
b25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLT5zaG93UmVwYWludENvdW50ZXIoKTsKK30KKworZmxvYXQgTGF5
ZXJUcmVlSG9zdEd0azo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdEd0
az4qKQoreworICAgIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CisgICAgaWYgKHRvVGV4dHVyZU1h
cHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmlu
Z0FuaW1hdGlvbnMoKSkKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDEg
LyA2MC4wKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0R3RrOjpmbHVzaFBlbmRpbmdMYXllckNo
YW5nZXMoKQoreworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIp
CisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpCit7
CisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0
IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhlIHdpbmRvdyBzaXplIG1heSBiZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBwYWdlIHNp
emUgYXQgdGhpcyBwb2ludCwgYW5kIGdldHRpbmcKKyAgICAvLyB0aGUgdmlld3BvcnQgcGFyYW1l
dGVycyBpbmNvcnJlY3QsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2lsbCBiZSBtaXNwbGFjZWQu
IFRodXMKKyAgICAvLyB3ZSBzZXQgdGhlIHZpZXdwb3J0IHBhcmFtZXRlcnMgZGlyZWN0bHkgZnJv
bSB0aGUgd2luZG93IHNpemUuCisgICAgSW50U2l6ZSBjb250ZXh0U2l6ZSA9IG1fY29udGV4dC0+
ZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOworICAgIGdsVmlld3BvcnQoMCwgMCwgY29udGV4dFNp
emUud2lkdGgoKSwgY29udGV4dFNpemUuaGVpZ2h0KCkpOworCisgICAgbV90ZXh0dXJlTWFwcGVy
LT5iZWdpblBhaW50aW5nKCk7CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKwor
ICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6
Zmx1c2hBbmRSZW5kZXJMYXllcnMoKQoreworICAgIHsKKyAgICAgICAgUmVmUHRyPExheWVyVHJl
ZUhvc3RHdGs+IHByb3RlY3QodGhpcyk7CisgICAgICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVk
ZWQoKTsKKworICAgICAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsKKyAgICBpZiAoIWNv
bnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIWZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBPdXIgbW9kZWwgaXMgdmVyeSBzaW1wbGUuIFdlIGFsd2F5cyBjb21wb3NpdGUg
YW5kIHJlbmRlciB0aGUgdHJlZSBpbW1lZGlhdGVseSBhZnRlciB1cGRhdGluZyBpdC4KKyAgICBj
b21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsKKworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCkgeworICAgICAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRo
YXQgd2UndmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgICAgICBzdGF0
aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXll
ckhvc3REaWRGbHVzaExheWVycygpOworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpjcmVh
dGVQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7
CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7
CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJU
cmVlSG9zdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxk
KG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6
ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5
ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1f
cGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6
c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
Ym9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7
CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjNlNTc2
NjJkZjZkMTM3ZDNhZTQ4NDY3OTViNGVmYjY3ZGI4Y2MzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmgKQEAg
LTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdEd0a19oCisjZGVmaW5lIExheWVyVHJlZUhvc3RH
dGtfaAorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJl
ZUhvc3QuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0dMQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllclRyZWVIb3N0R3RrIDogcHVibGljIExh
eWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IGNyZWF0ZShXZWJQYWdlKik7Cisg
ICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdEd0aygpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGlj
aXQgTGF5ZXJUcmVlSG9zdEd0ayhXZWJQYWdlKik7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisg
ICAgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICAvLyBMYXllclRyZWVIb3N0LgorICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIGRldmljZVNj
YWxlRmFjdG9yRGlkQ2hhbmdlKCk7CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNo
aW5nRW5hYmxlZCk7CisKK3ByaXZhdGU6CisgICAgLy8gTGF5ZXJUcmVlSG9zdC4KKyAgICB2aXJ0
dWFsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29s
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNv
bXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworCisgICAgdmlydHVhbCB2b2lkIGRp
ZEluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdl
T3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNo
b3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7Cisg
ICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21taXRDaGFuZ2VzRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopIGNvbnN0IHsgfQorCisgICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAg
dm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVy
RmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9zdEd0az4qKTsKKyAgICB2b2lkIGNvbXBv
c2l0ZUxheWVyc1RvQ29udGV4dCgpOworICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsK
KyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBXZWJDb3JlOjpHTENv
bnRleHQqIGdsQ29udGV4dCgpOworCisgICAgLy8gVGhlIGNvbnRleHQgZm9yIHRoaXMgbGF5ZXIg
dHJlZS4KKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKworICAgIC8v
IFdoZXRoZXIgdGhlIGxheWVyIHRyZWUgaG9zdCBpcyB2YWxpZCBvciBub3QuCisgICAgYm9vbCBt
X2lzVmFsaWQ7CisKKyAgICAvLyBXaGV0aGVyIHdlIHNob3VsZCBsZXQgdGhlIGRyYXdpbmcgYXJl
YSBrbm93IHRoZSBuZXh0IHRpbWUgd2UndmUgZmx1c2hlZAorICAgIC8vIGxheWVyIHRyZWUgY2hh
bmdlcy4KKyAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworCisgICAg
Ly8gVGhlIHJvb3QgbGF5ZXIuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1f
cm9vdExheWVyOworCisgICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29t
cG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVy
LiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCisgICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKKworICAgIFdlYkNvcmU6
OlRpbWVyPExheWVyVHJlZUhvc3RHdGs+IG1fbGF5ZXJGbHVzaFRpbWVyOworCisgICAgLy8gVGhl
IFRleHR1cmVNYXBwZXIgZm9yIG91ciBsYXllciB0cmVlLgorICAgIE93blB0cjxXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisKKyAgICAvLyBUaGUgR0xDb250ZXh0IG9m
IG91ciBvdXRwdXQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0Owor
CisgICAgLy8gV2hldGhlciB0aGUgaG9zdCB3aWxsIHNjaGVkdWxlIGxheWVyIGZsdXNoZXMuCisg
ICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdEd0a19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCAy
YjJhOTQ2NGVjY2MzYjljM2YyMDAyMTljMThjOTgwZGU5MDM3ZGNmLi4yODk3ZGQ5ZmE5NWVjYzA3
YWM5MGE3NDc0ZDNhMzFhODQ3YmNiMjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKQEAgLTU0LDYgKzU0LDggQEAgdm9p
ZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIG1fYWNjZXNzaWJpbGl0eU9iamVj
dCA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0TmV3KHRoaXMpOwogICAgIEdPd25QdHI8Z2No
YXI+IHBsdWdJRChhdGtfcGx1Z19nZXRfaWQoQVRLX1BMVUcobV9hY2Nlc3NpYmlsaXR5T2JqZWN0
KSkpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmluZEFjY2Vzc2liaWxpdHlU
cmVlKFN0cmluZyhwbHVnSUQuZ2V0KCkpKSk7CisKKyAgICBtX25hdGl2ZVdpbmRvd0hhbmRsZSA9
IDA7CiB9CiAKIHZvaWQgV2ViUGFnZTo6dXBkYXRlQWNjZXNzaWJpbGl0eVRyZWUoKQpAQCAtMTUw
LDQgKzE1MiwxMiBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gV2ViUGFnZTo6Y2FjaGVkUmVz
cG9uc2VEYXRhRm9yVVJMKGNvbnN0IEtVUkwmKQogICAgIHJldHVybiAwOwogfQogCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBXZWJQYWdlOjp3aWRnZXRNYXBwZWQoaW50NjRfdCBu
YXRpdmVXaW5kb3dIYW5kbGUpCit7CisgICAgbV9uYXRpdmVXaW5kb3dIYW5kbGUgPSBuYXRpdmVX
aW5kb3dIYW5kbGU7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141086</attachid>
            <date>2012-05-09 22:28:44 -0700</date>
            <delta_ts>2012-05-23 13:41:23 -0700</delta_ts>
            <desc>Enable the layer flush scheduling by default</desc>
            <filename>bug-86037-20120509222843.patch</filename>
            <type>text/plain</type>
            <size>33452</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTBkMWIyY2Q3ODMyNDg5
NjUzODFlZmM5YTBjY2Y3NThkZWVlMDBiZi4uNzkyYzEzMWI1ZDI0YjQzMDhhMzYzY2RlMzA0N2I4
N2FjNGNhOGYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA1LTA5ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
YW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBjb21wb3NpdGluZyB0ZXN0cywgd2hp
Y2gKKyAgICAgICAgd2Ugd2lsbCBncmFkdWFsbHkgdHJ5IHRvIHR1cm4gb24gZm9yIHRoZSBib3Rz
LgorCisgICAgICAgIEFkZCBhIG5ldyBHTENvbnRleHQgbWV0aG9kIGZvciBnZXR0aW5nIHRvIGN1
cnJlbnQgZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaXplLCB3aGljaAorICAgICAgICBpcyBxdWl0ZSB1
c2VmdWwgZm9yIHByZXZlbnRpbmcgY29tcG9zaXRlZCBjb250ZW50IHF1aXZlcmluZyB3aGlsZSBy
ZXNpemluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKTogQWRk
ZWQgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgWDExCisgICAgICAgIHdoaWNoIGFza3MgdGhlIFgg
c2VydmVyIGZvciB0aGUgd2luZG93IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5oOgorCiAyMDEyLTA1LTA2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9i
aW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIEltcGxlbWVudCBJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlIGZvciBCYWNraW5nU3RvcmVDb3B5ID09IERvbnRDb3B5QmFja2luZ1N0b3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggZDFiMmQwYTc2YWRiZDAxODQxMDY4MDQ0OWQxYzllZjc1ZWU1NjAzNi4u
Njk0YWRiNWExODM2YzRmM2E0N2E5MzRkM2VhY2U0N2Y1Y2ZlZjZjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI2IEBACisyMDEyLTA1LTA5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgYW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcg
aW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGFuIGltcGxlbWVudGF0aW9uIG9mIExheWVyVHJlZUhvc3Qg
Zm9yIEdUSysgdGhhdCB1c2VzIFRleHR1cmVNYXBwZXJHTC4KKyAgICAgICAgTGF0ZXIgdGhpcyBp
bXBsZW1lbnRhdGlvbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgSW1hZ2VCdWZmZXIgVGV4
dHVyZU1hcHBlci4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRv
IHRoZSBjb21waWxhdGlvbi4KKyAgICAgICAgKiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oOgor
ICAgICAgICAoTGF5ZXJUcmVlQ29udGV4dCk6IFRoZSBHVEsrIHZlcnNpb24gb2YgdGhlIExheWVy
VHJlZUNvbnRleHQganVzdCBob2xkcyB3aW5kb3cgaGFuZGxlLgorICAgICAgICAqIFNoYXJlZC9n
dGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcDogQWRkZWQuCisgICAgICAgIEFk
ZCB0aGlzIExheWVyVHJlZUhvc3QgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IGNyZWF0ZXMgYSBH
TCBjb250ZXh0IGZyb20gdGhlIHdpZGdldCBYMTEgd2luZG93IElELgorICAgICAgICBMYXRlciBp
bXBsZW1lbnRhdGlvbnMgbWlnaHQgZmluZCBhIG1vcmUgY3Jvc3MtcGxhdGZvcm0gc29sdXRpb24u
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKTogSW5pdGlhbGl6ZSB0aGUg
bmF0aXZlIHdpbmRvdyBoYW5kbGUgdG8gYmUgemVyby4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6d2lkZ2V0TWFwcGVkKTogV2hlbiBtYXBwaW5nIHRoZSB3aWRnZXQsIHRyeSB0byBnZXQgdGhl
IG5hdGl2ZSB3aW5kb3cKKyAgICAgICAgaGFuZGxlIGFuZCBzZW5kIGl0IHRvIHRoZSBXZWJQcm9j
ZXNzLgorCiAyMDEyLTA1LTA3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgRU5BQkxFX0lGUkFNRV9TRUFNTEVTUyBzbyBBcHBsZSBjYW4gdHVybiBvZmYgU0VB
TUxFU1MgaWYgbmVlZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dMQ29udGV4dC5oCmluZGV4IGRlMmUwYTY0YmNhYzgxZWU1NDRkNDBiZGFiMDMyYWE0
ZWQyOGQ3NGMuLmFiODJjOWE0NTgyNThiZTg3MmFiN2JiZDIxM2NlNWQ2ZWRiOGQxZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
CkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCkgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBjYW5SZW5kZXJUb0RlZmF1bHRGcmFtZWJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFs
IEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpID0gMDsKIAogI2lmIEVOQUJMRShXRUJH
TCkKICAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0
KCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgv
R0xDb250ZXh0R0xYLmNwcAppbmRleCBjNzlmMGVjMzdmMzQ3M2EyYmM4MmQ1YTIzYmEyMzJjODVj
YzI2YWYwLi43ZmYyYWMxMzg3MWQzNWFhYzlhOTQ0ODEwMDM2NTI3ODFkNDYyMjU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcApAQCAtMjYzLDYgKzI2MywyMCBAQCBib29sIEdMQ29udGV4dEdMWDo6Y2FuUmVuZGVyVG9E
ZWZhdWx0RnJhbWVidWZmZXIoKQogICAgIHJldHVybiBtX3dpbmRvdzsKIH0KIAorSW50U2l6ZSBH
TENvbnRleHRHTFg6OmRlZmF1bHRGcmFtZUJ1ZmZlclNpemUoKQoreworICAgIGlmICghY2FuUmVu
ZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKSB8fCAhbV93aW5kb3cpCisgICAgICAgIHJldHVybiBJ
bnRTaXplKCk7CisKKyAgICBpbnQgeCwgeTsKKyAgICBXaW5kb3cgcm9vdFdpbmRvdzsKKyAgICB1
bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgYm9yZGVyV2lkdGgsIGRlcHRoOworICAgIGlmICgh
WEdldEdlb21ldHJ5KHNoYXJlZERpc3BsYXkoKSwgbV93aW5kb3csICZyb290V2luZG93LCAmeCwg
JnksICZ3aWR0aCwgJmhlaWdodCwgJmJvcmRlcldpZHRoLCAmZGVwdGgpKQorICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisK
IGJvb2wgR0xDb250ZXh0R0xYOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogICAgIEFTU0VSVCht
X2NvbnRleHQgJiYgKG1fd2luZG93IHx8IG1fcGJ1ZmZlciB8fCBtX2dseFBpeG1hcCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdM
WC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5o
CmluZGV4IDQ4YjY1ODk2Y2YzYzQzNTkxNGJjOGE0ZmQzZjJiMDE5M2YzNDcxZGQuLjkzYTFlODcz
NDRjZjVmZTgxMDMwMjY2NGM3YWVhZGQxMmY0NDBlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAgLTQ2LDYgKzQ2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9E
ZWZhdWx0RnJhbWVidWZmZXIoKTsKKyAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVm
ZmVyU2l6ZSgpOwogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXgg
YTZiNDJhNmQ2NzlhYTk0MjU2NzRkODFlNjgzOTFmZWM5M2Y4NzM5YS4uZGFlM2Q1ODMxMWU4MWZl
NDBlYTYyZDE1OTg1MjZkMTk1M2M0Yjc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05V
bWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTM0NCwx
MCArMzQ0LDEwIEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVk
L0VkaXRvclN0YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Gb250U21vb3RoaW5nTGV2
ZWwuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aC5oIFwK
LQlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vTGF5ZXJUcmVlQ29udGV4dENhaXJvLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcCBcCisJU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9MYXllclRyZWVDb250ZXh0R3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBcCkBAIC0xMDI4LDYg
KzEwMjgsMTIgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAogCitpZiBVU0VfVEVYVFVSRV9NQVBQRVJfR0wKK3dlYmtpdDJfc291cmNlcyArPSBcCisJ
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNw
cCBcCisJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0
R3RrLmgKK2VuZGlmICMgRU5EIFVTRV9URVhUVVJFX01BUFBFUl9HTAorCiBsaWJ3ZWJraXQyZ3Rr
X0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJ
T05AX2xhX1NPVVJDRVMgPSBcCiAJJCh3ZWJraXQyX3NvdXJjZXMpCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCmluZGV4IGYzM2ZhOTc3MmMwM2M3MTBiZTNiZmM0MWU0
NDE1YjlkYzVkM2MwNzQuLjcxMGQ5ZGE4MTQ0MzA2YTRlNzAyMDRmZmUwNzk2NzNkYzk1MWJhZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaApAQCAtNTYsNiArNTYs
OCBAQCBwdWJsaWM6CiAgICAgSFdORCB3aW5kb3c7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICB1
aW50MzJfdCB3ZWJMYXllcklEOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHVpbnQ2NF90IHdp
bmRvd0hhbmRsZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9MYXllclRyZWVDb250ZXh0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdkOTE4YTcwZjlkYmIxZTZj
MGI3NDRiYmIyZmQ2MWRkZmI0NjhjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0
LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVu
Y29kZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0xheWVyVHJlZUNvbnRleHQ6OkxheWVy
VHJlZUNvbnRleHQoKQorICAgIDogd2luZG93SGFuZGxlKDApCit7Cit9CisKK0xheWVyVHJlZUNv
bnRleHQ6On5MYXllclRyZWVDb250ZXh0KCkKK3sKK30KKwordm9pZCBMYXllclRyZWVDb250ZXh0
OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXItPmVuY29kZSh3aW5kb3dIYW5kbGUpOworfQorCitib29sIExheWVyVHJlZUNvbnRl
eHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNv
bnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShjb250ZXh0Lndp
bmRvd0hhbmRsZSk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICF3aW5kb3dIYW5kbGU7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25z
dCBMYXllclRyZWVDb250ZXh0JiBhLCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBiKQoreworICAg
IHJldHVybiBhLndpbmRvd0hhbmRsZSA9PSBiLndpbmRvd0hhbmRsZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBiMmNkZGU1NjQ2ZWRjNGRmMDYxZmY2MzNh
NDIxNmIwY2I1YTlhMjlhLi40ZjViYTA3ZDY3MmY5MTQ0MTM3MDNiOTVmYWEwZGIzYmNkYzBhOTM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2UuY3BwCkBAIC02NCw2ICs2NCwxMCBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAm
JiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5k
aWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC0xNDgsNiArMTUyLDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXpl
KEd0a1dpZGdldCogd2lkZ2V0KQogICAgIGdpbnQgYXR0cmlidXRlc01hc2sgPSBHREtfV0FfWCB8
IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTDsKIAogICAgIEdka1dpbmRvdyogd2luZG93ID0gZ2Rr
X3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmli
dXRlcywgYXR0cmlidXRlc01hc2spOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBn
ZGtfd2luZG93X2Vuc3VyZV9uYXRpdmUod2luZG93KTsKKyNlbmRpZgogICAgIGd0a193aWRnZXRf
c2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRvdyk7CiAgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRh
KHdpbmRvdywgd2lkZ2V0KTsKIApAQCAtMzA4LDYgKzMxNSwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZU1hcChHdGtXaWRnZXQqIHdpZGdldCkKICAgICBHVEtfV0lER0VUX0NMQVNT
KHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPm1hcCh3aWRnZXQpOwogCiAgICAg
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19YMTEpCisgICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
d2lkZ2V0KTsKKyAgICBpZiAoZ2RrV2luZG93ICYmIGdka193aW5kb3dfaGFzX25hdGl2ZShnZGtX
aW5kb3cpKQorICAgICAgICBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2LT5wYWdl
UHJveHktPndpZGdldE1hcHBlZChHREtfV0lORE9XX1hJRChnZGtXaW5kb3cpKTsKKyNlbmRpZgor
CiAgICAgaWYgKCF3ZWJWaWV3QmFzZS0+cHJpdi0+bmVlZHNSZXNpemVPbk1hcCkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYTNl
OWJiOGY3OWJjMDQ3YTdhODE4YjFlMmFiMzQyNTBmOWExYzYzNy4uZDRkYmZiNjAxMTY1N2M2N2Zm
NjY4ZDA2ZmJlMWFiNzk5NmEzMDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaApAQCAtNjUxLDYgKzY1MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gV2ViUG9wdXBNZW51
UHJveHk6OkNsaWVudAogICAgIHZpcnR1YWwgTmF0aXZlV2ViTW91c2VFdmVudCogY3VycmVudGx5
UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKTsKIAorI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgd2lkZ2V0TWFwcGVkKHVpbnQ2NF90IG5hdGl2ZVdp
bmRvd0lkKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50
KiwgUGFzc1JlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBXZWJQYWdlR3JvdXAqLCB1aW50NjRfdCBw
YWdlSUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBh
Z2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94
eUd0ay5jcHAKaW5kZXggZGM4MjM1MjEwZTdkYzA5OWM2Mzk0ODUxYjhhNTE0ZGNhZTljZDllMi4u
YWMyNmMwY2I4ZmRiYjhjOWU3MjVmOTMzYjg0NzhhMmE0ZGNjMGY3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtMzEsNiArMzEs
OCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudElt
cGwuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRl
IDxndGsvZ3RreC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwNyw0ICsxMDksMTEgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd2VkUGx1Z2luR2VvbWV0cnlEaWRDaGFuZ2UoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZnJhbWUKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNoaWxkTW92ZVJl
c2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh2aWV3V2lkZ2V0KCkpLCBwbHVnaW4sIGZyYW1lUmVj
dCk7CiB9CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIFdlYlBhZ2VQcm94eTo6
d2lkZ2V0TWFwcGVkKHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0lkKQoreworICAgIHByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2lkZ2V0TWFwcGVkKG5hdGl2ZVdpbmRvd0lkKSwgbV9w
YWdlSUQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDky
ZWI0MDg1NTk5NTYzMGE3YjU0YzM5YmJjMjM0NGZiYzFkZjBmNzkuLjRiNjk1YWY2NTA3OWQ2ZDNj
OTk0MjU4YWU0YTRmNDBjNTk1ZjM2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5j
bHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2luY2x1ZGUgImd0ay9MYXllclRyZWVIb3N0R3Rr
LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtNTAsNiArNTQsOCBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJl
ZUhvc3Q6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0
Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIHJldHVybiBM
YXllclRyZWVIb3N0UXQ6OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHJldHVybiBMYXllclRyZWVIb3N0R3RrOjpjcmVh
dGUod2ViUGFnZSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBkOWQyZGY3MmNkOTJjMTZhOGQ4
ZDJmMjAzNGRhM2M3ZjgwYTYyYmZjLi40NmIzODUwNGMyMWMyM2ZkNDUyNWFhN2IzMGNhNzZmMTNi
ZTA0NzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTQyOCw2ICs0MjgsOSBAQCBwdWJsaWM6CiAKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICB2
b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorICAgIHZvaWQgd2lkZ2V0TWFwcGVkKGludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKTsKKyNl
bmRpZgogI2VuZGlmCiAKICAgICB2b2lkIHNldENvbXBvc2l0aW9uRm9yVGVzdGluZyhjb25zdCBT
dHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCB1aW50NjRfdCBmcm9tLCB1aW50NjRfdCBsZW5ndGgp
OwpAQCAtNTMxLDYgKzUzNCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaXNpYmlsaXR5U3Rh
dGUoaW50IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSk7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUoKSB7IHJl
dHVybiBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2Vi
UGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsK
IApAQCAtNzQzLDYgKzc1MCw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+
IG1fZ2VzdHVyZVRhcmdldE5vZGU7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgV2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3QqIG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKKworICAgIC8vIE91ciB2
aWV3J3Mgd2luZG93IGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHVpbnQ2NF90IG1fbmF0aXZlV2lu
ZG93SGFuZGxlOwogI2VuZGlmCiAgICAgCiAgICAgV2ViQ29yZTo6UnVuTG9vcDo6VGltZXI8V2Vi
UGFnZT4gbV9zZXRDYW5TdGFydE1lZGlhVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDgzODFmMjYwM2Iy
YTUxMzExNmY0NjRhMjNjYWJkN2UzMWZiMGRkZjMuLjFhNTgyOTAzY2FiOWU5MDc5NWJhYTQ0N2U1
MDRmMjY1NzdlOGJlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0yNjksNCArMjY5LDggQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZSB7CiAjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCiAgICAgU2V0Vmlz
aWJpbGl0eVN0YXRlKGludCB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOwog
I2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAg
ICBXaWRnZXRNYXBwZWQoaW50NjRfdCBpZCkKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzBlOWY5ZmMzMWFmNWFjOWJiMDczMWM1ZTkyYWUyNmY1ODU0NzQ5MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5
ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJMYXllclRyZWVIb3N0R3RrLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPEdML2dsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HTENvbnRleHRHTFguaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaWYgZGVmaW5lZChH
REtfV0lORE9XSU5HX1gxMSkKKyNkZWZpbmUgUmVnaW9uIFhSZWdpb24KKyNkZWZpbmUgRm9udCBY
Rm9udAorI2RlZmluZSBDdXJzb3IgWEN1cnNvcgorI2RlZmluZSBTY3JlZW4gWFNjcmVlbgorI2lu
Y2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IExheWVy
VHJlZUhvc3RHdGs6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQoreworICAgIFJlZlB0cjxMYXll
clRyZWVIb3N0R3RrPiBob3N0ID0gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RHdGsod2ViUGFn
ZSkpOworICAgIGhvc3QtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gaG9zdC5yZWxlYXNlKCk7
Cit9CisKK0xheWVyVHJlZUhvc3RHdGs6OkxheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSogd2ViUGFn
ZSkKKyAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQor
ICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2xh
eWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQoreworfQorCitH
TENvbnRleHQqIExheWVyVHJlZUhvc3RHdGs6OmdsQ29udGV4dCgpCit7CisgICAgaWYgKG1fY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKKworICAgIHVpbnQ2NF90IHdp
bmRvd0hhbmRsZSA9IG1fd2ViUGFnZS0+bmF0aXZlV2luZG93SGFuZGxlKCk7CisgICAgaWYgKCF3
aW5kb3dIYW5kbGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9jb250ZXh0ID0gR0xDb250
ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHdpbmRvd0hhbmRsZSwgR0xDb250ZXh0OjpzaGFy
aW5nQ29udGV4dCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RHdGs6OmluaXRpYWxpemUoKQoreworICAgIG1fcm9vdExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQo
ZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKwor
ICAgIC8vIFRoZSBub24tY29tcG9zaXRlZCBjb250ZW50cyBhcmUgYSBjaGlsZCBvZiB0aGUgcm9v
dCBsYXllci4KKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUodGhpcyk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250
ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRy
YXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgaWYgKG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKQorICAgICAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyh0cnVl
KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVl
SG9zdCByb290IGxheWVyIik7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRO
YW1lKCJMYXllclRyZWVIb3N0IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKKyNlbmRpZgorCisg
ICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQo
KSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
KworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53aW5kb3dIYW5kbGUgPSBtX3dlYlBhZ2UtPm5hdGl2
ZVdpbmRvd0hhbmRsZSgpOworCisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7
CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBUZXh0dXJlTWFw
cGVyIG5lZWRzIGFuIGFjdGl2ZSBPcGVuR0wgY29udGV4dC4KKyAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNy
ZWF0ZSgpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0
VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAgaWYgKG1fd2ViUGFn
ZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwor
CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KCk7Cit9CisKK0xheWVyVHJlZUhvc3RHdGs6On5MYXllclRyZWVIb3N0R3RrKCkKK3sKKyAgICBB
U1NFUlQoIW1faXNWYWxpZCk7CisgICAgQVNTRVJUKCFtX3Jvb3RMYXllcik7Cit9CisKK2NvbnN0
IExheWVyVHJlZUNvbnRleHQmIExheWVyVHJlZUhvc3RHdGs6OmxheWVyVHJlZUNvbnRleHQoKQor
eworICAgIHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dEd0azo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKK3sKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0R3RrOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJl
ZSBoaWVyYXJjaHkuCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CisKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjppbnZhbGlkYXRlKCkK
K3sKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Cisg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyhjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZz
ZXQpCit7CisgICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVj
dCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRT
aXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1NpemUp
CisgICAgICAgIHJldHVybjsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKwor
ICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9z
aXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9z
ZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNp
emUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2Fz
dDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJl
Y3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCks
IGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgo
KSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAgaWYgKG1fcGFnZU92
ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdl
KCkKK3sKKyAgICAvLyBPdGhlciBsYXllcnMgbGVhcm4gb2YgdGhlIHNjYWxlIGZhY3RvciBjaGFu
Z2UgdmlhIFdlYlBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yLgorICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdEd0azo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpkaWRJbnN0YWxsUGFnZU92ZXJs
YXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpkaWRVbmluc3RhbGxQYWdlT3Zl
cmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVy
bGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RHdGs6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIGRvdWJsZSB0aW1lKQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6Om5vdGlmeVN5
bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9pZCBM
YXllclRyZWVIb3N0R3RrOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc0xheWVy
UGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdyYXBo
aWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAgIG1fd2Vi
UGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIp
IHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBj
bGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9z
dEd0azo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3Jk
ZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdEd0azo6c2hvd1JlcGFpbnRDb3VudGVyKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291bnRlcigpOworfQorCitmbG9hdCBMYXll
clRyZWVIb3N0R3RrOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0R3RrOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVIb3N0R3Rr
PiopCit7CisgICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKyAgICBpZiAodG9UZXh0dXJlTWFw
cGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5n
QW5pbWF0aW9ucygpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMSAv
IDYwLjApOworfQorCitib29sIExheWVyVHJlZUhvc3RHdGs6OmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpCit7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
KyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKKworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCkKK3sK
KyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQg
fHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBUaGUgd2luZG93IHNpemUgbWF5IGJlIG91dCBvZiBzeW5jIHdpdGggdGhlIHBhZ2Ugc2l6
ZSBhdCB0aGlzIHBvaW50LCBhbmQgZ2V0dGluZworICAgIC8vIHRoZSB2aWV3cG9ydCBwYXJhbWV0
ZXJzIGluY29ycmVjdCwgbWVhbnMgdGhhdCB0aGUgY29udGVudCB3aWxsIGJlIG1pc3BsYWNlZC4g
VGh1cworICAgIC8vIHdlIHNldCB0aGUgdmlld3BvcnQgcGFyYW1ldGVycyBkaXJlY3RseSBmcm9t
IHRoZSB3aW5kb3cgc2l6ZS4KKyAgICBJbnRTaXplIGNvbnRleHRTaXplID0gbV9jb250ZXh0LT5k
ZWZhdWx0RnJhbWVCdWZmZXJTaXplKCk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCBjb250ZXh0U2l6
ZS53aWR0aCgpLCBjb250ZXh0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX3RleHR1cmVNYXBwZXIt
PmJlZ2luUGFpbnRpbmcoKTsKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5n
ZXQoKSktPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisg
ICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpm
bHVzaEFuZFJlbmRlckxheWVycygpCit7CisgICAgeworICAgICAgICBSZWZQdHI8TGF5ZXJUcmVl
SG9zdEd0az4gcHJvdGVjdCh0aGlzKTsKKyAgICAgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRl
ZCgpOworCisgICAgICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOworICAgIGlmICghY29u
dGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIE91ciBtb2RlbCBpcyB2ZXJ5IHNpbXBsZS4gV2UgYWx3YXlzIGNvbXBvc2l0ZSBh
bmQgcmVuZGVyIHRoZSB0cmVlIGltbWVkaWF0ZWx5IGFmdGVyIHVwZGF0aW5nIGl0LgorICAgIGNv
bXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworCisgICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoKSB7CisgICAgICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhh
dCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCisgICAgICAgIHN0YXRp
Y19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVy
SG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmNyZWF0
ZVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsK
KworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsK
KyNpZm5kZWYgTkRFQlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRy
ZWVIb3N0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQo
bV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXll
cik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9w
YWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpz
Y2hlZHVsZUxheWVyRmx1c2goKQoreworICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9sYXllckZsdXNoVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChi
b29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQoreworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsK
KworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgeworICAgICAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Y2FuY2VsUGVu
ZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmM2U1NzY2
MmRmNmQxMzdkM2FlNDg0Njc5NWI0ZWZiNjdkYjhjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaApAQCAt
MCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0R3RrX2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdEd0
a19oCisKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvR0xDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVyVHJlZUhvc3RHdGsgOiBwdWJsaWMgTGF5
ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdEd0az4gY3JlYXRlKFdlYlBhZ2UqKTsKKyAg
ICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0R3RrKCk7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNp
dCBMYXllclRyZWVIb3N0R3RrKFdlYlBhZ2UqKTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisKKyAg
ICB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIC8vIExheWVyVHJlZUhvc3QuCisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2Nh
bGVGYWN0b3JEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdmly
dHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hp
bmdFbmFibGVkKTsKKworcHJpdmF0ZToKKyAgICAvLyBMYXllclRyZWVIb3N0LgorICAgIHZpcnR1
YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wp
OworCisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29t
cG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
SW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
d1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KikgY29uc3QgeyB9CisKKyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICB2
b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgdm9pZCBsYXllckZsdXNoVGltZXJG
aXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0R3RrPiopOworICAgIHZvaWQgY29tcG9z
aXRlTGF5ZXJzVG9Db250ZXh0KCk7CisgICAgdm9pZCBmbHVzaEFuZFJlbmRlckxheWVycygpOwor
ICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIFdlYkNvcmU6OkdMQ29u
dGV4dCogZ2xDb250ZXh0KCk7CisKKyAgICAvLyBUaGUgY29udGV4dCBmb3IgdGhpcyBsYXllciB0
cmVlLgorICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworCisgICAgLy8g
V2hldGhlciB0aGUgbGF5ZXIgdHJlZSBob3N0IGlzIHZhbGlkIG9yIG5vdC4KKyAgICBib29sIG1f
aXNWYWxpZDsKKworICAgIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIGxldCB0aGUgZHJhd2luZyBhcmVh
IGtub3cgdGhlIG5leHQgdGltZSB3ZSd2ZSBmbHVzaGVkCisgICAgLy8gbGF5ZXIgdHJlZSBjaGFu
Z2VzLgorICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CisKKyAgICAv
LyBUaGUgcm9vdCBsYXllci4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9y
b290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21w
b3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIu
IFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgV2ViQ29yZTo6
VGltZXI8TGF5ZXJUcmVlSG9zdEd0az4gbV9sYXllckZsdXNoVGltZXI7CisKKyAgICAvLyBUaGUg
VGV4dHVyZU1hcHBlciBmb3Igb3VyIGxheWVyIHRyZWUuCisgICAgT3duUHRyPFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKworICAgIC8vIFRoZSBHTENvbnRleHQgb2Yg
b3VyIG91dHB1dC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7CisK
KyAgICAvLyBXaGV0aGVyIHRoZSBob3N0IHdpbGwgc2NoZWR1bGUgbGF5ZXIgZmx1c2hlcy4KKyAg
ICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBMYXllclRyZWVIb3N0R3RrX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCmluZGV4IDJi
MmE5NDY0ZWNjYzNiOWMzZjIwMDIxOWMxOGM5ODBkZTkwMzdkY2YuLjI4OTdkZDlmYTk1ZWNjMDdh
YzkwYTc0NzRkM2EzMWE4NDdiY2IyMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcApAQCAtNTQsNiArNTQsOCBAQCB2b2lk
IFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0
ID0gd2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3ROZXcodGhpcyk7CiAgICAgR093blB0cjxnY2hh
cj4gcGx1Z0lEKGF0a19wbHVnX2dldF9pZChBVEtfUExVRyhtX2FjY2Vzc2liaWxpdHlPYmplY3Qp
KSk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCaW5kQWNjZXNzaWJpbGl0eVRy
ZWUoU3RyaW5nKHBsdWdJRC5nZXQoKSkpKTsKKworICAgIG1fbmF0aXZlV2luZG93SGFuZGxlID0g
MDsKIH0KIAogdm9pZCBXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSgpCkBAIC0xNTAs
NCArMTUyLDEyIEBAIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBXZWJQYWdlOjpjYWNoZWRSZXNw
b25zZURhdGFGb3JVUkwoY29uc3QgS1VSTCYpCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIFdlYlBhZ2U6OndpZGdldE1hcHBlZChpbnQ2NF90IG5h
dGl2ZVdpbmRvd0hhbmRsZSkKK3sKKyAgICBtX25hdGl2ZVdpbmRvd0hhbmRsZSA9IG5hdGl2ZVdp
bmRvd0hhbmRsZTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143639</attachid>
            <date>2012-05-23 13:41:26 -0700</date>
            <delta_ts>2012-05-24 11:48:54 -0700</delta_ts>
            <desc>Patch rebased and now using GLib timer to avoid starvation due to event handling</desc>
            <filename>bug-86037-20120523134126.patch</filename>
            <type>text/plain</type>
            <size>34150</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdiYjMyOGZjMGI5NDg0
YmFhMTkzMzJkMjI0OWZlNmI4ZGY1Y2EwNS4uZmQ3YzI3NGZlMjA5MWMyZGFjOWUzMDEzMGJhODJl
NTU1YjMzZWMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA1LTIzICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
YW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBjb21wb3NpdGluZyB0ZXN0cywgd2hp
Y2gKKyAgICAgICAgd2Ugd2lsbCBncmFkdWFsbHkgdHJ5IHRvIHR1cm4gb24gZm9yIHRoZSBib3Rz
LgorCisgICAgICAgIEFkZCBhIG5ldyBHTENvbnRleHQgbWV0aG9kIGZvciBnZXR0aW5nIHRvIGN1
cnJlbnQgZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaXplLCB3aGljaAorICAgICAgICBpcyBxdWl0ZSB1
c2VmdWwgZm9yIHByZXZlbnRpbmcgY29tcG9zaXRlZCBjb250ZW50IHF1aXZlcmluZyB3aGlsZSBy
ZXNpemluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKTogQWRk
ZWQgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgWDExCisgICAgICAgIHdoaWNoIGFza3MgdGhlIFgg
c2VydmVyIGZvciB0aGUgd2luZG93IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5oOgorCiAyMDEyLTA1LTIzICBKb2NoZW4gRWlzaW5nZXIgIDxqb2No
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBpbmNvbXBsZXRlIHN3aXRjaCBzdGF0ZW1l
bnQgaW4gQ1NTUGFyc2VyIGFmdGVyIHIxMTgwODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4OWU5NzdmNGVkYTUz
N2ZkOTFlMjk4YjU3M2YwOTE4NTZlODQ3NTYzLi42NGNjMTE3MWJhY2EzOWQ3Mzc1NDRkNWU1NTY4
YWYyODk5YjgwOTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTItMDUtMjMgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFk
ZCBhbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViS2l0Mgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYwMzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYW4gaW1w
bGVtZW50YXRpb24gb2YgTGF5ZXJUcmVlSG9zdCBmb3IgR1RLKyB0aGF0IHVzZXMgVGV4dHVyZU1h
cHBlckdMLgorICAgICAgICBMYXRlciB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgZmFsbCBiYWNr
IHRvIHVzaW5nIHRoZSBJbWFnZUJ1ZmZlciBUZXh0dXJlTWFwcGVyLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gdGhlIGNvbXBpbGF0aW9uLgorICAgICAgICAq
IFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgIChMYXllclRyZWVDb250ZXh0KTog
VGhlIEdUSysgdmVyc2lvbiBvZiB0aGUgTGF5ZXJUcmVlQ29udGV4dCBqdXN0IGhvbGRzIHdpbmRv
dyBoYW5kbGUuCisgICAgICAgICogU2hhcmVkL2d0ay9MYXllclRyZWVDb250ZXh0R3RrLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0
ay5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhv
c3RHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgQWRkIHRoaXMgTGF5ZXJUcmVlSG9zdCBpbXBsZW1l
bnRhdGlvbiB0aGF0IGp1c3QgY3JlYXRlcyBhIEdMIGNvbnRleHQgZnJvbSB0aGUgd2lkZ2V0IFgx
MSB3aW5kb3cgSUQuCisgICAgICAgIExhdGVyIGltcGxlbWVudGF0aW9ucyBtaWdodCBmaW5kIGEg
bW9yZSBjcm9zcy1wbGF0Zm9ybSBzb2x1dGlvbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9y
bUluaXRpYWxpemUpOiBJbml0aWFsaXplIHRoZSBuYXRpdmUgd2luZG93IGhhbmRsZSB0byBiZSB6
ZXJvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp3aWRnZXRNYXBwZWQpOiBXaGVuIG1hcHBp
bmcgdGhlIHdpZGdldCwgdHJ5IHRvIGdldCB0aGUgbmF0aXZlIHdpbmRvdworICAgICAgICBoYW5k
bGUgYW5kIHNlbmQgaXQgdG8gdGhlIFdlYlByb2Nlc3MuCisKIDIwMTItMDUtMjMgIE1pY2hhZWwg
QnLDvG5pbmcgIDxtaWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0sy
XSBTbWFsbCByZWZhY3RvcmluZyBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCmluZGV4
IGRlMmUwYTY0YmNhYzgxZWU1NDRkNDBiZGFiMDMyYWE0ZWQyOGQ3NGMuLmFiODJjOWE0NTgyNThi
ZTg3MmFiN2JiZDIxM2NlNWQ2ZWRiOGQxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCkBAIC00MCw2ICs0MCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgdmlydHVhbCB2
b2lkIHN3YXBCdWZmZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXJUb0RlZmF1
bHRGcmFtZWJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVm
ZmVyU2l6ZSgpID0gMDsKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAppbmRleCBl
NjBhMmJlNDQzODBmODAzOGJkMjAxYWZjZGM5YThjMWUwMmNjNGFkLi45NDUyYzQ0ODcyZWZkYTY1
MmYzNzUzNmE1OTBiOGMwNDg1MzE4NjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtMjYyLDYgKzI2MiwyMCBA
QCBib29sIEdMQ29udGV4dEdMWDo6Y2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKQogICAg
IHJldHVybiBtX3dpbmRvdzsKIH0KIAorSW50U2l6ZSBHTENvbnRleHRHTFg6OmRlZmF1bHRGcmFt
ZUJ1ZmZlclNpemUoKQoreworICAgIGlmICghY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIo
KSB8fCAhbV93aW5kb3cpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBpbnQgeCwg
eTsKKyAgICBXaW5kb3cgcm9vdFdpbmRvdzsKKyAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyV2lkdGgsIGRlcHRoOworICAgIGlmICghWEdldEdlb21ldHJ5KHNoYXJlZERpc3Bs
YXkoKSwgbV93aW5kb3csICZyb290V2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgJmJv
cmRlcldpZHRoLCAmZGVwdGgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0
dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKIGJvb2wgR0xDb250ZXh0R0xYOjptYWtl
Q29udGV4dEN1cnJlbnQoKQogewogICAgIEFTU0VSVChtX2NvbnRleHQgJiYgKG1fd2luZG93IHx8
IG1fcGJ1ZmZlciB8fCBtX2dseFBpeG1hcCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCmluZGV4IDM4M2MwZDU1ZjM0OGQ5Njdj
M2QxZTcyNDg3MGEwZmRjZjI2ZjZiMGMuLjExOGVkZDQxZDQyMmFlY2NiOTkwZDFiN2FmYzY0ZjBk
NjdhYjE2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ds
eC9HTENvbnRleHRHTFguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
bHgvR0xDb250ZXh0R0xYLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZlcnMo
KTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKTsKKyAg
ICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOwogCiAjaWYgRU5BQkxF
KFdFQkdMKQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNv
bnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGExOWQ0YTAyZWM5ZjNl
NTI0ZGI1NDgwYTU3YzQwMThhMzViYTUwY2QuLjljYWE4OGFiYTRhMjdhOGVkMjY4Y2QyZWQ2MjQx
NWVlZThiOWY3MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzM5LDEwICsz
MzksMTAgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRp
dG9yU3RhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ZvbnRTbW9vdGhpbmdMZXZlbC5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmggXAotCVNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9MYXllclRyZWVDb250ZXh0Q2Fpcm8uY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0xheWVyVHJlZUNvbnRleHRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKQEAgLTEwMzgsNiArMTAz
OCwxMiBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
CiAKK2lmIFVTRV9URVhUVVJFX01BUFBFUl9HTAord2Via2l0Ml9zb3VyY2VzICs9IFwKKyAgIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAg
XAorICAgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0
R3RrLmgKK2VuZGlmICMgRU5EIFVTRV9URVhUVVJFX01BUFBFUl9HTAorCiBpZiBFTkFCTEVfUExV
R0lOX1BST0NFU1MKIAogd2Via2l0Ml9wbHVnaW5fcHJvY2Vzc19idWlsdF9zb3VyY2VzICs9IFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCmluZGV4IGYzM2ZhOTc3MmMw
M2M3MTBiZTNiZmM0MWU0NDE1YjlkYzVkM2MwNzQuLjcxMGQ5ZGE4MTQ0MzA2YTRlNzAyMDRmZmUw
Nzk2NzNkYzk1MWJhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRy
ZWVDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQu
aApAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgSFdORCB3aW5kb3c7CiAjZWxpZiBQTEFU
Rk9STShRVCkKICAgICB1aW50MzJfdCB3ZWJMYXllcklEOworI2VsaWYgUExBVEZPUk0oR1RLKQor
ICAgIHVpbnQ2NF90IHdpbmRvd0hhbmRsZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9MYXllclRyZWVDb250ZXh0R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdk
OTE4YTcwZjlkYmIxZTZjMGI3NDRiYmIyZmQ2MWRkZmI0NjhjNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5jcHAKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJM
YXllclRyZWVDb250ZXh0LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNs
dWRlICJBcmd1bWVudEVuY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0xheWVyVHJl
ZUNvbnRleHQ6OkxheWVyVHJlZUNvbnRleHQoKQorICAgIDogd2luZG93SGFuZGxlKDApCit7Cit9
CisKK0xheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KCkKK3sKK30KKwordm9pZCBM
YXllclRyZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dIYW5kbGUpOworfQorCitib29s
IExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGRlY29kZXItPmRl
Y29kZShjb250ZXh0LndpbmRvd0hhbmRsZSk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29udGV4dDo6
aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICF3aW5kb3dIYW5kbGU7Cit9CisKK2Jvb2wg
b3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiBhLCBjb25zdCBMYXllclRyZWVDb250
ZXh0JiBiKQoreworICAgIHJldHVybiBhLndpbmRvd0hhbmRsZSA9PSBiLndpbmRvd0hhbmRsZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCA0ZmFhNzVmYjBm
OTkyODIwMjA0Y2U3MWE4NGVmZjdjYTcyYThiY2UzLi4wY2FmM2U4M2NkM2NjZjc4ODBmMjkyYTM2
Y2Q2NmI0NjIzMjA4OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC02NSw2ICs2NSwxMCBAQAogI2luY2x1
ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorI2luY2x1ZGUgPGdk
ay9nZGt4Lmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCkBAIC0xNTQsNiArMTU4LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogICAgIGdpbnQgYXR0cmlidXRlc01h
c2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTDsKIAogICAgIEdka1dpbmRv
dyogd2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3
aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc01hc2spOworI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKKyAgICBnZGtfd2luZG93X2Vuc3VyZV9uYXRpdmUod2luZG93KTsKKyNlbmRpZgog
ICAgIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRvdyk7CiAgICAgZ2RrX3dpbmRv
d19zZXRfdXNlcl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsKIApAQCAtMzM5LDYgKzM0NiwxMiBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZU1hcChHdGtXaWRnZXQqIHdpZGdldCkKICAgICBH
VEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPm1hcCh3
aWRnZXQpOwogCiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dF
Ql9WSUVXX0JBU0Uod2lkZ2V0KTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIGRlZmlu
ZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lk
Z2V0X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBpZiAoZ2RrV2luZG93ICYmIGdka193aW5kb3df
aGFzX25hdGl2ZShnZGtXaW5kb3cpKQorICAgICAgICBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRn
ZXQpLT5wcml2LT5wYWdlUHJveHktPndpZGdldE1hcHBlZChHREtfV0lORE9XX1hJRChnZGtXaW5k
b3cpKTsKKyNlbmRpZgorCiAgICAgaWYgKCF3ZWJWaWV3QmFzZS0+cHJpdi0+bmVlZHNSZXNpemVP
bk1hcCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKaW5kZXggNzJkNDY5NTkwYzhmYWJlYjAyMzM4NWQ3ZWEyZTA2ZDlkYzUwYWExMC4uYjJm
MDYxZmE0YWNiOTBiZTc1MzRhMjgwZDk3MGJlNDYyNGU4M2ZiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNjYwLDYgKzY2MCwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudAogICAgIHZpcnR1YWwgTmF0aXZlV2ViTW91c2VF
dmVudCogY3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKTsKIAorI2lmIFBMQVRGT1JN
KEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgd2lkZ2V0TWFwcGVkKHVp
bnQ2NF90IG5hdGl2ZVdpbmRvd0lkKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQ
cm94eShQYWdlQ2xpZW50KiwgUGFzc1JlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBXZWJQYWdlR3Jv
dXAqLCB1aW50NjRfdCBwYWdlSUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggZGM4MjM1MjEwZTdkYzA5OWM2Mzk0ODUxYjhh
NTE0ZGNhZTljZDllMi4uYWMyNmMwY2I4ZmRiYjhjOWU3MjVmOTMzYjg0NzhhMmE0ZGNjMGY3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNw
cApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGFnZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlIDxndGsvZ3RreC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEw
Nyw0ICsxMDksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd2VkUGx1Z2luR2VvbWV0cnlE
aWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZnJhbWUKICAgICB3ZWJraXRXZWJWaWV3
QmFzZUNoaWxkTW92ZVJlc2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh2aWV3V2lkZ2V0KCkpLCBw
bHVnaW4sIGZyYW1lUmVjdCk7CiB9CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lk
IFdlYlBhZ2VQcm94eTo6d2lkZ2V0TWFwcGVkKHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0lkKQorewor
ICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2lkZ2V0TWFwcGVkKG5hdGl2
ZVdpbmRvd0lkKSwgbV9wYWdlSUQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuY3BwCmluZGV4IDkyZWI0MDg1NTk5NTYzMGE3YjU0YzM5YmJjMjM0NGZiYzFkZjBmNzkuLjRi
Njk1YWY2NTA3OWQ2ZDNjOTk0MjU4YWU0YTRmNDBjNTk1ZjM2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM4LDYg
KzM4LDEwIEBACiAjaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2luY2x1ZGUgImd0ay9M
YXllclRyZWVIb3N0R3RrLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTAsNiArNTQsOCBAQCBQYXNzUmVmUHRyPExheWVyVHJl
ZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogICAgIHJldHVy
biBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFFU
KQogICAgIHJldHVybiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBM
QVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHJldHVybiBMYXllclRy
ZWVIb3N0R3RrOjpjcmVhdGUod2ViUGFnZSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA0YjJi
NzZjOGMzNjg4NjRlYTBkMTlhOTAyYjIxZmMxYWFjODQ5NDRkLi40N2FjMDAyOWJmNzFhOGFhYWEw
ZTY1MDcxNDllMmZkYTliYTVlMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKQEAgLTQzMiw2ICs0MzIsOSBAQCBwdWJsaWM6CiAKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCk7CisjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgd2lkZ2V0TWFwcGVkKGludDY0X3QgbmF0aXZlV2lu
ZG93SGFuZGxlKTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICB2b2lkIHNldENvbXBvc2l0aW9uRm9y
VGVzdGluZyhjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCB1aW50NjRfdCBmcm9tLCB1
aW50NjRfdCBsZW5ndGgpOwpAQCAtNTM4LDYgKzU0MSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRWaXNpYmlsaXR5U3RhdGUoaW50IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0
ZSk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICB1aW50NjRfdCBuYXRpdmVXaW5k
b3dIYW5kbGUoKSB7IHJldHVybiBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQorI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMmKTsKIApAQCAtNzUwLDYgKzc1Nyw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdlYkNvcmU6Ok5vZGU+IG1fZ2VzdHVyZVRhcmdldE5vZGU7CiAjZWxpZiBQTEFURk9STShHVEsp
CiAgICAgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIG1fYWNjZXNzaWJpbGl0eU9iamVjdDsK
KworICAgIC8vIE91ciB2aWV3J3Mgd2luZG93IGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHVpbnQ2
NF90IG1fbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAgCiAgICAgV2ViQ29yZTo6UnVu
TG9vcDo6VGltZXI8V2ViUGFnZT4gbV9zZXRDYW5TdGFydE1lZGlhVGltZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmlu
ZGV4IDRiYWI4YWM0MmQxNTVjNzkxMjU0MjQ1YjEyNzE1YTQwNTQ2ZmNjOTcuLjMyOTQ4OWZmZDc3
MGI5MGQzNmZhNDIzYzg3Y2ZiYjRjMjIxYjI5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0yNzEsNCArMjcx
LDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9B
UEkpCiAgICAgU2V0VmlzaWJpbGl0eVN0YXRlKGludCB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJ
bml0aWFsU3RhdGUpOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKKyAgICBXaWRnZXRNYXBwZWQoaW50NjRfdCBpZCkKKyNlbmRpZgogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVI
b3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJU
cmVlSG9zdEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM5MDdhYzIyZTIxYmY2YzhjYTJmZTI1MGIyN2Yy
MmE4MzZjN2M5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTAsMCArMSwzOTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0R3RrLmgiCisKKyNpbmNsdWRlICJEcmF3aW5n
QXJlYUltcGwuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPEdML2dsLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHRHTFguaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2Uu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyNkZWZpbmUgUmVnaW9uIFhSZWdpb24K
KyNkZWZpbmUgRm9udCBYRm9udAorI2RlZmluZSBDdXJzb3IgWEN1cnNvcgorI2RlZmluZSBTY3Jl
ZW4gWFNjcmVlbgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPExheWVyVHJl
ZUhvc3RHdGs+IExheWVyVHJlZUhvc3RHdGs6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQorewor
ICAgIFJlZlB0cjxMYXllclRyZWVIb3N0R3RrPiBob3N0ID0gYWRvcHRSZWYobmV3IExheWVyVHJl
ZUhvc3RHdGsod2ViUGFnZSkpOworICAgIGhvc3QtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4g
aG9zdC5yZWxlYXNlKCk7Cit9CisKK0xheWVyVHJlZUhvc3RHdGs6OkxheWVyVHJlZUhvc3RHdGso
V2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1f
aXNWYWxpZCh0cnVlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFs
c2UpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQorICAgICwgbV9s
YXllckZsdXNoVGltZXJDYWxsYmFja0lkKDApCit7Cit9CisKK0dMQ29udGV4dCogTGF5ZXJUcmVl
SG9zdEd0azo6Z2xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOworCisgICAgdWludDY0X3Qgd2luZG93SGFuZGxlID0gbV93ZWJQ
YWdlLT5uYXRpdmVXaW5kb3dIYW5kbGUoKTsKKyAgICBpZiAoIXdpbmRvd0hhbmRsZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRG
b3JXaW5kb3cod2luZG93SGFuZGxlLCBHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpOworICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6aW5p
dGlhbGl6ZSgpCit7CisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhp
cyk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgLy8gVGhlIG5vbi1jb21w
b3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRoZSByb290IGxheWVyLgorICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFn
ZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2Vi
UGFnZS0+c2l6ZSgpKTsKKyAgICBpZiAobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHRydWUpOworCisjaWZuZGVmIE5ERUJV
RworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0IHJvb3QgbGF5ZXIiKTsK
KyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3Qg
bm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3Jvb3RMYXllci0+YWRk
Q2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKyAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAgbV9sYXllclRyZWVD
b250ZXh0LndpbmRvd0hhbmRsZSA9IG1fd2ViUGFnZS0+bmF0aXZlV2luZG93SGFuZGxlKCk7CisK
KyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQp
IHsKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZl
IE9wZW5HTCBjb250ZXh0LgorICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CisgICAgdG9UZXh0
dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4
dHVyZU1hcHBlci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgp
KQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKKyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKK30KKworTGF5ZXJUcmVl
SG9zdEd0azo6fkxheWVyVHJlZUhvc3RHdGsoKQoreworICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsK
KyAgICBBU1NFUlQoIW1fcm9vdExheWVyKTsKKyAgICBpZiAobV9sYXllckZsdXNoVGltZXJDYWxs
YmFja0lkKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9sYXllckZsdXNoVGltZXJDYWxsYmFj
a0lkKTsKK30KKworY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgTGF5ZXJUcmVlSG9zdEd0azo6bGF5
ZXJUcmVlQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRM
YXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgLy8gQWRkIHRoZSBhY2Nl
bGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAg
ICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVy
KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RH
dGs6OmludmFsaWRhdGUoKQoreworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExh
eWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0R3RrOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IElu
dFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzaXplRGlk
Q2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fcm9vdExheWVyLT5z
aXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMg
b2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVk
CisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9s
ZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6
ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0
ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAt
IG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVp
Z2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQo
KSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisK
KyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldFNpemUobmV3U2l6ZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGV2aWNlU2Nh
bGVGYWN0b3JEaWRDaGFuZ2UoKQoreworICAgIC8vIE90aGVyIGxheWVycyBsZWFybiBvZiB0aGUg
c2NhbGUgZmFjdG9yIGNoYW5nZSB2aWEgV2ViUGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IuCisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpmb3JjZVJlcGFpbnQoKQorewor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmRp
ZEluc3RhbGxQYWdlT3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmRp
ZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigp
OworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6
OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
QVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdEd0azo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnBhaW50Q29udGVudHMoY29uc3QgR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
K3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIp
IHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChncmFwaGljc0xheWVyID09IG1f
cGFnZU92ZXJsYXlMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShn
cmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
Ym9vbCBMYXllclRyZWVIb3N0R3RrOjpzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdz
KCktPnNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0R3RrOjpzaG93
UmVwYWludENvdW50ZXIoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7
Cit9CisKK2Zsb2F0IExheWVyVHJlZUhvc3RHdGs6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3Rvcigp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJh
Y2soTGF5ZXJUcmVlSG9zdEd0ayogbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICBsYXllclRyZWVIb3N0
LT5sYXllckZsdXNoVGltZXJGaXJlZCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6Omxh
eWVyRmx1c2hUaW1lckZpcmVkKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQg
PSAwOworCisgICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKworICAgIGlmICh0b1RleHR1cmVN
YXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5p
bmdBbmltYXRpb25zKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdf
dGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAgLyA2MC4wLCByZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwg
dGhpcywgMCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdEd0azo6Zmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVy
KQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworCisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKQor
eworICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOworICAgIGlmICghY29udGV4
dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFRoZSB3aW5kb3cgc2l6ZSBtYXkgYmUgb3V0IG9mIHN5bmMgd2l0aCB0aGUgcGFnZSBz
aXplIGF0IHRoaXMgcG9pbnQsIGFuZCBnZXR0aW5nCisgICAgLy8gdGhlIHZpZXdwb3J0IHBhcmFt
ZXRlcnMgaW5jb3JyZWN0LCBtZWFucyB0aGF0IHRoZSBjb250ZW50IHdpbGwgYmUgbWlzcGxhY2Vk
LiBUaHVzCisgICAgLy8gd2Ugc2V0IHRoZSB2aWV3cG9ydCBwYXJhbWV0ZXJzIGRpcmVjdGx5IGZy
b20gdGhlIHdpbmRvdyBzaXplLgorICAgIEludFNpemUgY29udGV4dFNpemUgPSBtX2NvbnRleHQt
PmRlZmF1bHRGcmFtZUJ1ZmZlclNpemUoKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIGNvbnRleHRT
aXplLndpZHRoKCksIGNvbnRleHRTaXplLmhlaWdodCgpKTsKKworICAgIG1fdGV4dHVyZU1hcHBl
ci0+YmVnaW5QYWludGluZygpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVy
LmdldCgpKS0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisK
KyAgICBjb250ZXh0LT5zd2FwQnVmZmVycygpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6
OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKK3sKKyAgICB7CisgICAgICAgIFJlZlB0cjxMYXllclRy
ZWVIb3N0R3RrPiBwcm90ZWN0KHRoaXMpOworICAgICAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVl
ZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7CisgICAgaWYgKCFj
b250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gT3VyIG1vZGVsIGlzIHZlcnkgc2ltcGxlLiBXZSBhbHdheXMgY29tcG9zaXRl
IGFuZCByZW5kZXIgdGhlIHRyZWUgaW1tZWRpYXRlbHkgYWZ0ZXIgdXBkYXRpbmcgaXQuCisgICAg
Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisKKyAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2gpIHsKKyAgICAgICAgLy8gTGV0IHRoZSBkcmF3aW5nIGFyZWEga25vdyB0
aGF0IHdlJ3ZlIGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIgY2hhbmdlcy4KKyAgICAgICAgc3Rh
dGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5
ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExh
eWVyRmx1c2ggPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Y3Jl
YXRlUGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIp
OworCisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMp
OworI2lmbmRlZiBOREVCVUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkxheWVy
VHJlZUhvc3QgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVy
LT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGls
ZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6
OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxh
eWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBt
X3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6
OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBi
ZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50IGhhbmRsaW5nIGR1cmluZyBkcmFnZ2luZyBjYW4g
c3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCisgICAg
aWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRp
bWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAw
LCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxi
YWNrKSwgdGhpcywgMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYg
KG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxh
eWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0R3RrOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVy
Rmx1c2hUaW1lckNhbGxiYWNrSWQpCisgICAgICAgIHJldHVybjsKKworICAgICBnX3NvdXJjZV9y
ZW1vdmUobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKTsKKyAgICAgbV9sYXllckZsdXNoVGlt
ZXJDYWxsYmFja0lkID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0
ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmIyZjQxZjQyMzNiMGE4NDA3NmM3OTgzZTM4ZGMxMDU0MDM5NTRiNWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L0xheWVyVHJlZUhvc3RHdGsuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0R3RrX2gK
KyNkZWZpbmUgTGF5ZXJUcmVlSG9zdEd0a19oCisKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0
LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJM
YXllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR0xDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5ZXJUcmVlSG9zdEd0ayA6IHB1YmxpYyBMYXllclRy
ZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0R3RrPiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZp
cnR1YWwgfkxheWVyVHJlZUhvc3RHdGsoKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IExh
eWVyVHJlZUhvc3RHdGsoV2ViUGFnZSopOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
cm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIHZv
aWQgaW5pdGlhbGl6ZSgpOworCisgICAgLy8gTGF5ZXJUcmVlSG9zdC4KKyAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIG5ld1NpemUpOworICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZh
Y3RvckRpZENoYW5nZSgpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0Vu
YWJsZWQpOworCitwcml2YXRlOgorICAgIC8vIExheWVyVHJlZUhvc3QuCisgICAgdmlydHVhbCBj
b25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3Np
dGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0
YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJs
YXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIGZsdXNoUGVuZGluZ0xheWVy
Q2hhbmdlcygpOworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCk7CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG93UmVw
YWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OworICAgIHZp
cnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBj
b25zdCB7IH0KKworICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQg
ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICB2b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29u
dGV4dCgpOworICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKyAgICB2b2lkIGNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKCk7
CisgICAgc3RhdGljIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhMYXllclRyZWVI
b3N0R3RrKik7CisKKyAgICBXZWJDb3JlOjpHTENvbnRleHQqIGdsQ29udGV4dCgpOworCisgICAg
Ly8gVGhlIGNvbnRleHQgZm9yIHRoaXMgbGF5ZXIgdHJlZS4KKyAgICBMYXllclRyZWVDb250ZXh0
IG1fbGF5ZXJUcmVlQ29udGV4dDsKKworICAgIC8vIFdoZXRoZXIgdGhlIGxheWVyIHRyZWUgaG9z
dCBpcyB2YWxpZCBvciBub3QuCisgICAgYm9vbCBtX2lzVmFsaWQ7CisKKyAgICAvLyBXaGV0aGVy
IHdlIHNob3VsZCBsZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoZSBuZXh0IHRpbWUgd2UndmUg
Zmx1c2hlZAorICAgIC8vIGxheWVyIHRyZWUgY2hhbmdlcy4KKyAgICBib29sIG1fbm90aWZ5QWZ0
ZXJTY2hlZHVsZWRMYXllckZsdXNoOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIuCisgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhlIGxh
eWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisK
KyAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBu
byBwYWdlIG92ZXJsYXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFn
ZU92ZXJsYXlMYXllcjsKKworICAgIC8vIFRoZSBUZXh0dXJlTWFwcGVyIGZvciBvdXIgbGF5ZXIg
dHJlZS4KKyAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVy
OworCisgICAgLy8gVGhlIEdMQ29udGV4dCBvZiBvdXIgb3V0cHV0LgorICAgIE93blB0cjxXZWJD
b3JlOjpHTENvbnRleHQ+IG1fY29udGV4dDsKKworICAgIC8vIFdoZXRoZXIgdGhlIGhvc3Qgd2ls
bCBzY2hlZHVsZSBsYXllciBmbHVzaGVzLgorICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQ7CisKKyAgICAvLyBBIEdTb3VyY2UgdGFnIHRyYWNraW5nIHRoZSBsYXllciBmbHVz
aCB0aW1lci4KKyAgICB1bnNpZ25lZCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIExheWVyVHJlZUhvc3RHdGtfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdl
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0
ay5jcHAKaW5kZXggMmIyYTk0NjRlY2NjM2I5YzNmMjAwMjE5YzE4Yzk4MGRlOTAzN2RjZi4uMjg5
N2RkOWZhOTVlY2MwN2FjOTBhNzQ3NGQzYTMxYTg0N2JjYjIyMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC01NCw2
ICs1NCw4IEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBtX2FjY2Vz
c2liaWxpdHlPYmplY3QgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5ldyh0aGlzKTsKICAg
ICBHT3duUHRyPGdjaGFyPiBwbHVnSUQoYXRrX3BsdWdfZ2V0X2lkKEFUS19QTFVHKG1fYWNjZXNz
aWJpbGl0eU9iamVjdCkpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJpbmRB
Y2Nlc3NpYmlsaXR5VHJlZShTdHJpbmcocGx1Z0lELmdldCgpKSkpOworCisgICAgbV9uYXRpdmVX
aW5kb3dIYW5kbGUgPSAwOwogfQogCiB2b2lkIFdlYlBhZ2U6OnVwZGF0ZUFjY2Vzc2liaWxpdHlU
cmVlKCkKQEAgLTE1MCw0ICsxNTIsMTIgQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYlBh
Z2U6OmNhY2hlZFJlc3BvbnNlRGF0YUZvclVSTChjb25zdCBLVVJMJikKICAgICByZXR1cm4gMDsK
IH0KIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgV2ViUGFnZTo6d2lkZ2V0TWFw
cGVkKGludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKQoreworICAgIG1fbmF0aXZlV2luZG93SGFu
ZGxlID0gbmF0aXZlV2luZG93SGFuZGxlOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143864</attachid>
            <date>2012-05-24 11:48:59 -0700</date>
            <delta_ts>2012-05-29 17:14:03 -0700</delta_ts>
            <desc>The same patch minus a GSource bomb</desc>
            <filename>bug-86037-20120524114858.patch</filename>
            <type>text/plain</type>
            <size>32884</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjk4ZWMyOTU0YTI5M2U4
ZDhjZDNjMmU4YzJiZWM4YzRhNTJmYWE4ZS4uZDBiZTI2OTlkYjk4YTNlZTkzZDc4YmM0ZGZhMTcx
MGIwZmU4YWZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA1LTIzICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
YW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBjb21wb3NpdGluZyB0ZXN0cywgd2hp
Y2gKKyAgICAgICAgd2Ugd2lsbCBncmFkdWFsbHkgdHJ5IHRvIHR1cm4gb24gZm9yIHRoZSBib3Rz
LgorCisgICAgICAgIEFkZCBhIG5ldyBHTENvbnRleHQgbWV0aG9kIGZvciBnZXR0aW5nIHRvIGN1
cnJlbnQgZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaXplLCB3aGljaAorICAgICAgICBpcyBxdWl0ZSB1
c2VmdWwgZm9yIHByZXZlbnRpbmcgY29tcG9zaXRlZCBjb250ZW50IHF1aXZlcmluZyB3aGlsZSBy
ZXNpemluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKTogQWRk
ZWQgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgWDExCisgICAgICAgIHdoaWNoIGFza3MgdGhlIFgg
c2VydmVyIGZvciB0aGUgd2luZG93IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5oOgorCiAyMDEyLTA1LTI0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRt
YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtyZWdyZXNzaW9uXSBz
ZWFyY2ggaW4gZm9ybWF0dGVkIHNjcmlwdHMgaXMgYnJva2VuLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGJkMjJk
NjI4ZjMzNGY0MDJlNzYzM2FiNzU5MWNhOTAxNDg3OGM1ZDYuLmYxMDg2OWQ3ZDdkNDRiOWNkOTQ1
MDliYjcyOTY0YWIwNTlkNjEyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0w
NS0yMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dUS10gQWRkIGFuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGltcGxlbWVudGF0aW9uIGZvciBX
ZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
NjAzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBMYXllclRyZWVIb3N0IGZvciBHVEsrIHRoYXQgdXNlcyBU
ZXh0dXJlTWFwcGVyR0wuCisgICAgICAgIExhdGVyIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBm
YWxsIGJhY2sgdG8gdXNpbmcgdGhlIEltYWdlQnVmZmVyIFRleHR1cmVNYXBwZXIuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byB0aGUgY29tcGlsYXRpb24uCisg
ICAgICAgICogU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaDoKKyAgICAgICAgKExheWVyVHJlZUNv
bnRleHQpOiBUaGUgR1RLKyB2ZXJzaW9uIG9mIHRoZSBMYXllclRyZWVDb250ZXh0IGp1c3QgaG9s
ZHMgd2luZG93IGhhbmRsZS4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL0xheWVyVHJlZUNvbnRleHRH
dGsuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRy
ZWVIb3N0R3RrLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5
ZXJUcmVlSG9zdEd0ay5jcHA6IEFkZGVkLgorICAgICAgICBBZGQgdGhpcyBMYXllclRyZWVIb3N0
IGltcGxlbWVudGF0aW9uIHRoYXQganVzdCBjcmVhdGVzIGEgR0wgY29udGV4dCBmcm9tIHRoZSB3
aWRnZXQgWDExIHdpbmRvdyBJRC4KKyAgICAgICAgTGF0ZXIgaW1wbGVtZW50YXRpb25zIG1pZ2h0
IGZpbmQgYSBtb3JlIGNyb3NzLXBsYXRmb3JtIHNvbHV0aW9uLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEluaXRpYWxpemUgdGhlIG5hdGl2ZSB3aW5kb3cgaGFuZGxl
IHRvIGJlIHplcm8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OndpZGdldE1hcHBlZCk6IFdo
ZW4gbWFwcGluZyB0aGUgd2lkZ2V0LCB0cnkgdG8gZ2V0IHRoZSBuYXRpdmUgd2luZG93CisgICAg
ICAgIGhhbmRsZSBhbmQgc2VuZCBpdCB0byB0aGUgV2ViUHJvY2Vzcy4KKwogMjAxMi0wNS0yNCAg
QWxleGFuZGVyIEbDpnLDuHkgIDxhbGV4YW5kZXIuZmFlcm95QG5va2lhLmNvbT4KIAogICAgICAg
ICBSZW9yZGVyIGFyZ3VtZW50cyB0byBjb21wYXJlKCkgaW4gdGhlIFFNTCBXZWJWaWV3IHRlc3Rz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4
dC5oCmluZGV4IGRlMmUwYTY0YmNhYzgxZWU1NDRkNDBiZGFiMDMyYWE0ZWQyOGQ3NGMuLmFiODJj
OWE0NTgyNThiZTg3MmFiN2JiZDIxM2NlNWQ2ZWRiOGQxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCkBAIC00MCw2ICs0MCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
dmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5k
ZXJUb0RlZmF1bHRGcmFtZWJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVs
dEZyYW1lQnVmZmVyU2l6ZSgpID0gMDsKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2aXJ0dWFs
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCkgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNw
cAppbmRleCBlNjBhMmJlNDQzODBmODAzOGJkMjAxYWZjZGM5YThjMWUwMmNjNGFkLi45NDUyYzQ0
ODcyZWZkYTY1MmYzNzUzNmE1OTBiOGMwNDg1MzE4NjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtMjYyLDYg
KzI2MiwyMCBAQCBib29sIEdMQ29udGV4dEdMWDo6Y2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZm
ZXIoKQogICAgIHJldHVybiBtX3dpbmRvdzsKIH0KIAorSW50U2l6ZSBHTENvbnRleHRHTFg6OmRl
ZmF1bHRGcmFtZUJ1ZmZlclNpemUoKQoreworICAgIGlmICghY2FuUmVuZGVyVG9EZWZhdWx0RnJh
bWVidWZmZXIoKSB8fCAhbV93aW5kb3cpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAg
ICBpbnQgeCwgeTsKKyAgICBXaW5kb3cgcm9vdFdpbmRvdzsKKyAgICB1bnNpZ25lZCBpbnQgd2lk
dGgsIGhlaWdodCwgYm9yZGVyV2lkdGgsIGRlcHRoOworICAgIGlmICghWEdldEdlb21ldHJ5KHNo
YXJlZERpc3BsYXkoKSwgbV93aW5kb3csICZyb290V2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhl
aWdodCwgJmJvcmRlcldpZHRoLCAmZGVwdGgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwor
CisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKIGJvb2wgR0xDb250ZXh0
R0xYOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogICAgIEFTU0VSVChtX2NvbnRleHQgJiYgKG1f
d2luZG93IHx8IG1fcGJ1ZmZlciB8fCBtX2dseFBpeG1hcCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCmluZGV4IDM4M2MwZDU1
ZjM0OGQ5NjdjM2QxZTcyNDg3MGEwZmRjZjI2ZjZiMGMuLjExOGVkZDQxZDQyMmFlY2NiOTkwZDFi
N2FmYzY0ZjBkNjdhYjE2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3dh
cEJ1ZmZlcnMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZm
ZXIoKTsKKyAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOwogCiAj
aWYgRU5BQkxFKFdFQkdMKQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBw
bGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXll
clRyZWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5o
CmluZGV4IGYzM2ZhOTc3MmMwM2M3MTBiZTNiZmM0MWU0NDE1YjlkYzVkM2MwNzQuLjcxMGQ5ZGE4
MTQ0MzA2YTRlNzAyMDRmZmUwNzk2NzNkYzk1MWJhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L0xheWVyVHJlZUNvbnRleHQuaApAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgSFdORCB3
aW5kb3c7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICB1aW50MzJfdCB3ZWJMYXllcklEOworI2Vs
aWYgUExBVEZPUk0oR1RLKQorICAgIHVpbnQ2NF90IHdpbmRvd0hhbmRsZTsKICNlbmRpZgogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9MYXllclRyZWVDb250ZXh0
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTGF5ZXJUcmVlQ29udGV4dEd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTdkOTE4YTcwZjlkYmIxZTZjMGI3NDRiYmIyZmQ2MWRkZmI0NjhjNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTGF5ZXJUcmVlQ29u
dGV4dEd0ay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisKKyNpbmNsdWRlICJBcmd1bWVu
dERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK0xheWVyVHJlZUNvbnRleHQ6OkxheWVyVHJlZUNvbnRleHQoKQorICAgIDogd2lu
ZG93SGFuZGxlKDApCit7Cit9CisKK0xheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0
KCkKK3sKK30KKwordm9pZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dI
YW5kbGUpOworfQorCitib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCit7CisgICAg
cmV0dXJuIGRlY29kZXItPmRlY29kZShjb250ZXh0LndpbmRvd0hhbmRsZSk7Cit9CisKK2Jvb2wg
TGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICF3aW5kb3dI
YW5kbGU7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiBhLCBj
b25zdCBMYXllclRyZWVDb250ZXh0JiBiKQoreworICAgIHJldHVybiBhLndpbmRvd0hhbmRsZSA9
PSBiLndpbmRvd0hhbmRsZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cAppbmRleCA0ZmFhNzVmYjBmOTkyODIwMjA0Y2U3MWE4NGVmZjdjYTcyYThiY2UzLi4wY2FmM2U4
M2NkM2NjZjc4ODBmMjkyYTM2Y2Q2NmI0NjIzMjA4OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC02NSw2
ICs2NSwxMCBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNlbmRp
ZgogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdf
WDExKQorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xNTQsNiArMTU4LDkgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogICAg
IGdpbnQgYXR0cmlidXRlc01hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VB
TDsKIAogICAgIEdka1dpbmRvdyogd2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9n
ZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc01hc2spOwor
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBnZGtfd2luZG93X2Vuc3VyZV9uYXRpdmUo
d2luZG93KTsKKyNlbmRpZgogICAgIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRv
dyk7CiAgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsKIApAQCAt
MzM5LDYgKzM0NiwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZU1hcChHdGtXaWRn
ZXQqIHdpZGdldCkKICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3Bh
cmVudF9jbGFzcyktPm1hcCh3aWRnZXQpOwogCiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgR2RrV2luZG93KiBn
ZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBpZiAoZ2RrV2lu
ZG93ICYmIGdka193aW5kb3dfaGFzX25hdGl2ZShnZGtXaW5kb3cpKQorICAgICAgICBXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2LT5wYWdlUHJveHktPndpZGdldE1hcHBlZChHREtf
V0lORE9XX1hJRChnZGtXaW5kb3cpKTsKKyNlbmRpZgorCiAgICAgaWYgKCF3ZWJWaWV3QmFzZS0+
cHJpdi0+bmVlZHNSZXNpemVPbk1hcCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNzJkNDY5NTkwYzhmYWJlYjAyMzM4NWQ3ZWEy
ZTA2ZDlkYzUwYWExMC4uYjJmMDYxZmE0YWNiOTBiZTc1MzRhMjgwZDk3MGJlNDYyNGU4M2ZiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNjYwLDYgKzY2MCwx
MCBAQCBwdWJsaWM6CiAgICAgLy8gV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudAogICAgIHZpcnR1
YWwgTmF0aXZlV2ViTW91c2VFdmVudCogY3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQo
KTsKIAorI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZv
aWQgd2lkZ2V0TWFwcGVkKHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0lkKTsKKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50KiwgUGFzc1JlZlB0cjxXZWJQcm9jZXNz
UHJveHk+LCBXZWJQYWdlR3JvdXAqLCB1aW50NjRfdCBwYWdlSUQpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggZGM4MjM1MjEw
ZTdkYzA5OWM2Mzk0ODUxYjhhNTE0ZGNhZTljZDllMi4uYWMyNmMwY2I4ZmRiYjhjOWU3MjVmOTMz
Yjg0NzhhMmE0ZGNjMGY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUGFnZVByb3h5R3RrLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxndGsvZ3RreC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTEwNyw0ICsxMDksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRv
d2VkUGx1Z2luR2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZnJhbWUK
ICAgICB3ZWJraXRXZWJWaWV3QmFzZUNoaWxkTW92ZVJlc2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFT
RSh2aWV3V2lkZ2V0KCkpLCBwbHVnaW4sIGZyYW1lUmVjdCk7CiB9CiAKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCit2b2lkIFdlYlBhZ2VQcm94eTo6d2lkZ2V0TWFwcGVkKHVpbnQ2NF90IG5h
dGl2ZVdpbmRvd0lkKQoreworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
V2lkZ2V0TWFwcGVkKG5hdGl2ZVdpbmRvd0lkKSwgbV9wYWdlSUQpOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDkyZWI0MDg1NTk5NTYzMGE3YjU0YzM5YmJj
MjM0NGZiYzFkZjBmNzkuLjRiNjk1YWY2NTA3OWQ2ZDNjOTk0MjU4YWU0YTRmNDBjNTk1ZjM2MTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0
LmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorI2luY2x1ZGUgImd0ay9MYXllclRyZWVIb3N0R3RrLmgiCisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTAsNiArNTQsOCBAQCBQ
YXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlKiB3
ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsK
ICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSh3
ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQor
ICAgIHJldHVybiBMYXllclRyZWVIb3N0R3RrOjpjcmVhdGUod2ViUGFnZSk7CiAjZWxzZQogICAg
IHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAppbmRleCA0YjJiNzZjOGMzNjg4NjRlYTBkMTlhOTAyYjIxZmMxYWFjODQ5NDRkLi40
N2FjMDAyOWJmNzFhOGFhYWEwZTY1MDcxNDllMmZkYTliYTVlMzIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQzMiw2ICs0MzIsOSBAQCBwdWJs
aWM6CiAKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlU
cmVlKCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgd2lkZ2V0TWFwcGVk
KGludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICB2b2lk
IHNldENvbXBvc2l0aW9uRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5n
LCB1aW50NjRfdCBmcm9tLCB1aW50NjRfdCBsZW5ndGgpOwpAQCAtNTM4LDYgKzU0MSwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoaW50IHZpc2liaWxpdHlTdGF0ZSwg
Ym9vbCBpc0luaXRpYWxTdGF0ZSk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICB1
aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUoKSB7IHJldHVybiBtX25hdGl2ZVdpbmRvd0hhbmRs
ZTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApAQCAtNzUwLDYgKzc1Nyw5IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fZ2VzdHVyZVRhcmdldE5vZGU7CiAj
ZWxpZiBQTEFURk9STShHVEspCiAgICAgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QqIG1fYWNj
ZXNzaWJpbGl0eU9iamVjdDsKKworICAgIC8vIE91ciB2aWV3J3Mgd2luZG93IGluIHRoZSBVSSBw
cm9jZXNzLgorICAgIHVpbnQ2NF90IG1fbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAg
CiAgICAgV2ViQ29yZTo6UnVuTG9vcDo6VGltZXI8V2ViUGFnZT4gbV9zZXRDYW5TdGFydE1lZGlh
VGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCmluZGV4IDRiYWI4YWM0MmQxNTVjNzkxMjU0MjQ1YjEyNzE1YTQwNTQ2
ZmNjOTcuLjMyOTQ4OWZmZDc3MGI5MGQzNmZhNDIzYzg3Y2ZiYjRjMjIxYjI5YjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCkBAIC0yNzEsNCArMjcxLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAjaWYgRU5BQkxF
KFBBR0VfVklTSUJJTElUWV9BUEkpCiAgICAgU2V0VmlzaWJpbGl0eVN0YXRlKGludCB2aXNpYmls
aXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShH
VEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBXaWRnZXRNYXBwZWQoaW50NjRfdCBp
ZCkKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBlM2Y5NjU5OTE2
NWIyODQ3MjlkMTRkMDI1MDYwMDU5NTQ1ZjliMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTAs
MCArMSwzOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0R3RrLmgiCisK
KyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1
ZGUgPEdML2dsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHRHTFguaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKKyNp
bmNsdWRlIDxnZGsvZ2RrLmg+CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyNkZWZp
bmUgUmVnaW9uIFhSZWdpb24KKyNkZWZpbmUgRm9udCBYRm9udAorI2RlZmluZSBDdXJzb3IgWEN1
cnNvcgorI2RlZmluZSBTY3JlZW4gWFNjcmVlbgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5k
aWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQ
YXNzUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IExheWVyVHJlZUhvc3RHdGs6OmNyZWF0ZShXZWJQ
YWdlKiB3ZWJQYWdlKQoreworICAgIFJlZlB0cjxMYXllclRyZWVIb3N0R3RrPiBob3N0ID0gYWRv
cHRSZWYobmV3IExheWVyVHJlZUhvc3RHdGsod2ViUGFnZSkpOworICAgIGhvc3QtPmluaXRpYWxp
emUoKTsKKyAgICByZXR1cm4gaG9zdC5yZWxlYXNlKCk7Cit9CisKK0xheWVyVHJlZUhvc3RHdGs6
OkxheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhvc3Qo
d2ViUGFnZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZCh0cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKDApCit7Cit9CisKK0dM
Q29udGV4dCogTGF5ZXJUcmVlSG9zdEd0azo6Z2xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250
ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAgdWludDY0X3Qgd2lu
ZG93SGFuZGxlID0gbV93ZWJQYWdlLT5uYXRpdmVXaW5kb3dIYW5kbGUoKTsKKyAgICBpZiAoIXdp
bmRvd0hhbmRsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2NvbnRleHQgPSBHTENvbnRl
eHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cod2luZG93SGFuZGxlLCBHTENvbnRleHQ6OnNoYXJp
bmdDb250ZXh0KCkpOworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdEd0azo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChm
YWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisg
ICAgLy8gVGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRoZSByb290
IGxheWVyLgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZSh0aGlzKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRl
bnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJh
d3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBpZiAobV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisgICAgICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHRydWUp
OworCisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXllclRyZWVI
b3N0IHJvb3QgbGF5ZXIiKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5h
bWUoIkxheWVyVHJlZUhvc3Qgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisKKyAg
ICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgp
KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwor
CisgICAgbV9sYXllclRyZWVDb250ZXh0LndpbmRvd0hhbmRsZSA9IG1fd2ViUGFnZS0+bmF0aXZl
V2luZG93SGFuZGxlKCk7CisKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsK
KyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1cmVNYXBw
ZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3Jl
YXRlKCk7CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRU
ZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdl
LT5oYXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMo
KTsKK30KKworTGF5ZXJUcmVlSG9zdEd0azo6fkxheWVyVHJlZUhvc3RHdGsoKQoreworICAgIEFT
U0VSVCghbV9pc1ZhbGlkKTsKKyAgICBBU1NFUlQoIW1fcm9vdExheWVyKTsKKyAgICBpZiAobV9s
YXllckZsdXNoVGltZXJDYWxsYmFja0lkKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9sYXll
ckZsdXNoVGltZXJDYWxsYmFja0lkKTsKK30KKworY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgTGF5
ZXJUcmVlSG9zdEd0azo6bGF5ZXJUcmVlQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlQ29udGV4dDsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXRTaG91bGROb3RpZnlB
ZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7Cisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisg
ICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAo
Z3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRD
aGlsZChncmFwaGljc0xheWVyKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RHdGs6OmludmFsaWRhdGUoKQoreworICAgIEFTU0VSVChtX2lzVmFs
aWQpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVy
bGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdEd0azo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXROb25Db21w
b3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0R3RrOjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAg
aWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUg
ZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVk
c0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMu
CisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNp
emUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7
CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAg
IGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdo
dCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAs
IG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisg
ICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qo
MCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0g
b2xkU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdEd0azo6ZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKQoreworICAgIC8vIE90aGVyIGxh
eWVycyBsZWFybiBvZiB0aGUgc2NhbGUgZmFjdG9yIGNoYW5nZSB2aWEgV2ViUGFnZTo6c2V0RGV2
aWNlU2NhbGVGYWN0b3IuCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5kZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpm
b3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RHdGs6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFn
ZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RHdGs6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95
UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RHdGs6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6bm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGlj
c0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChn
cmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgeworICAgICAgICBtX3dlYlBhZ2Ut
PmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBMYXllclRyZWVIb3N0R3RrOjpzaG93RGVidWdCb3JkZXJz
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKworYm9vbCBMYXll
clRyZWVIb3N0R3RrOjpzaG93UmVwYWludENvdW50ZXIoY29uc3QgR3JhcGhpY3NMYXllciopIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hv
d1JlcGFpbnRDb3VudGVyKCk7Cit9CisKK2Zsb2F0IExheWVyVHJlZUhvc3RHdGs6OmRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5k
ZXZpY2VTY2FsZUZhY3RvcigpOworfQorCitnYm9vbGVhbiBMYXllclRyZWVIb3N0R3RrOjpsYXll
ckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKExheWVyVHJlZUhvc3RHdGsqIGxheWVyVHJlZUhvc3Qp
Cit7CisgICAgbGF5ZXJUcmVlSG9zdC0+bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQoKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IDA7CisKKyAgICBmbHVz
aEFuZFJlbmRlckxheWVycygpOworCisgICAgaWYgKHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkK
KyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxs
KEdES19QUklPUklUWV9FVkVOVFMsIDEwMDAuMCAvIDYwLjAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKK30KKwor
Ym9vbCBMYXllclRyZWVIb3N0R3RrOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RHdGs6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpCit7CisgICAgR0xDb250ZXh0
KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHdpbmRv
dyBzaXplIG1heSBiZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBwYWdlIHNpemUgYXQgdGhpcyBwb2lu
dCwgYW5kIGdldHRpbmcKKyAgICAvLyB0aGUgdmlld3BvcnQgcGFyYW1ldGVycyBpbmNvcnJlY3Qs
IG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2lsbCBiZSBtaXNwbGFjZWQuIFRodXMKKyAgICAvLyB3
ZSBzZXQgdGhlIHZpZXdwb3J0IHBhcmFtZXRlcnMgZGlyZWN0bHkgZnJvbSB0aGUgd2luZG93IHNp
emUuCisgICAgSW50U2l6ZSBjb250ZXh0U2l6ZSA9IG1fY29udGV4dC0+ZGVmYXVsdEZyYW1lQnVm
ZmVyU2l6ZSgpOworICAgIGdsVmlld3BvcnQoMCwgMCwgY29udGV4dFNpemUud2lkdGgoKSwgY29u
dGV4dFNpemUuaGVpZ2h0KCkpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5n
KCk7CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5wYWludCgp
OworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIGNvbnRleHQtPnN3
YXBCdWZmZXJzKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Zmx1c2hBbmRSZW5kZXJM
YXllcnMoKQoreworICAgIHsKKyAgICAgICAgUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IHByb3Rl
Y3QodGhpcyk7CisgICAgICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAg
ICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHTENv
bnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZs
dXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdXIg
bW9kZWwgaXMgdmVyeSBzaW1wbGUuIFdlIGFsd2F5cyBjb21wb3NpdGUgYW5kIHJlbmRlciB0aGUg
dHJlZSBpbW1lZGlhdGVseSBhZnRlciB1cGRhdGluZyBpdC4KKyAgICBjb21wb3NpdGVMYXllcnNU
b0NvbnRleHQoKTsKKworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkg
eworICAgICAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQgd2UndmUgZG9uZSBh
IGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5n
QXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExh
eWVycygpOworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNl
OworICAgIH0KK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpjcmVhdGVQYWdlT3ZlcmxheUxh
eWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdCBwYWdlIG92
ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlM
YXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGVzdHJveVBhZ2VPdmVy
bGF5TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlMYXll
ciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2NoZWR1bGVMYXllckZs
dXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBXZSB1c2UgYSBHTGliIHRpbWVyIGJlY2F1c2Ugb3RoZXJ3aXNl
IEdUSysgZXZlbnQgaGFuZGxpbmcgZHVyaW5nIGRyYWdnaW5nIGNhbiBzdGFydmUgV2ViQ29yZSB0
aW1lcnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0eS4KKyAgICBpZiAoIW1fbGF5ZXJGbHVz
aFRpbWVyQ2FsbGJhY2tJZCkKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0g
Z190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJs
ZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5j
ZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJh
Y2tJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgIGdfc291cmNlX3JlbW92ZShtX2xheWVyRmx1
c2hUaW1lckNhbGxiYWNrSWQpOworICAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSAw
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGQ3MjkzNWUzY2RhZjgyNjEyNmFjNmI1NzE4NWIyNWM0NTE3YzA2OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0
ay5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIExheWVyVHJlZUhvc3RHdGtfaAorI2RlZmluZSBMYXllclRy
ZWVIb3N0R3RrX2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJM
YXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9HTENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJD
bGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBMYXllclRyZWVIb3N0R3RrIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eWVyVHJlZUhvc3RHdGs+IGNyZWF0ZShXZWJQYWdlKik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVl
SG9zdEd0aygpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdEd0ayhX
ZWJQYWdlKik7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBpbml0aWFsaXplKCk7
CisKKyAgICAvLyBMYXllclRyZWVIb3N0LgorICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7
CisgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
bmV3U2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCk7
CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCk7CisKK3ByaXZh
dGU6CisgICAgLy8gTGF5ZXJUcmVlSG9zdC4KKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGxheWVyVHJlZUNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
Y3JvbGxPZmZzZXQpOworCisgICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgp
OworICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisKKyAg
ICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRDaGFuZ2Vz
Rm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgfQorCisgICAg
dm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95UGFnZU92ZXJs
YXlMYXllcigpOworICAgIHZvaWQgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisgICAgdm9p
ZCBmbHVzaEFuZFJlbmRlckxheWVycygpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1
c2goKTsKKworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gbGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhMYXllclRyZWVIb3N0R3RrKik7CisK
KyAgICBXZWJDb3JlOjpHTENvbnRleHQqIGdsQ29udGV4dCgpOworCisgICAgLy8gVGhlIGNvbnRl
eHQgZm9yIHRoaXMgbGF5ZXIgdHJlZS4KKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVl
Q29udGV4dDsKKworICAgIC8vIFdoZXRoZXIgdGhlIGxheWVyIHRyZWUgaG9zdCBpcyB2YWxpZCBv
ciBub3QuCisgICAgYm9vbCBtX2lzVmFsaWQ7CisKKyAgICAvLyBXaGV0aGVyIHdlIHNob3VsZCBs
ZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoZSBuZXh0IHRpbWUgd2UndmUgZmx1c2hlZAorICAg
IC8vIGxheWVyIHRyZWUgY2hhbmdlcy4KKyAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRM
YXllckZsdXNoOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIuCisgICAgT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhlIGxheWVyIHdoaWNoIGNv
bnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAgICAvLyBUaGUg
cGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJs
YXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXll
cjsKKworICAgIC8vIFRoZSBUZXh0dXJlTWFwcGVyIGZvciBvdXIgbGF5ZXIgdHJlZS4KKyAgICBP
d25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworCisgICAgLy8g
VGhlIEdMQ29udGV4dCBvZiBvdXIgb3V0cHV0LgorICAgIE93blB0cjxXZWJDb3JlOjpHTENvbnRl
eHQ+IG1fY29udGV4dDsKKworICAgIC8vIFdoZXRoZXIgdGhlIGhvc3Qgd2lsbCBzY2hlZHVsZSBs
YXllciBmbHVzaGVzLgorICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CisK
KyAgICAvLyBBIEdTb3VyY2UgdGFnIHRyYWNraW5nIHRoZSBsYXllciBmbHVzaCB0aW1lci4KKyAg
ICB1bnNpZ25lZCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIExheWVyVHJlZUhvc3RHdGtfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKaW5kZXgg
MmIyYTk0NjRlY2NjM2I5YzNmMjAwMjE5YzE4Yzk4MGRlOTAzN2RjZi4uMjg5N2RkOWZhOTVlY2Mw
N2FjOTBhNzQ3NGQzYTMxYTg0N2JjYjIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC01NCw2ICs1NCw4IEBAIHZv
aWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBtX2FjY2Vzc2liaWxpdHlPYmpl
Y3QgPSB3ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdE5ldyh0aGlzKTsKICAgICBHT3duUHRyPGdj
aGFyPiBwbHVnSUQoYXRrX3BsdWdfZ2V0X2lkKEFUS19QTFVHKG1fYWNjZXNzaWJpbGl0eU9iamVj
dCkpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJpbmRBY2Nlc3NpYmlsaXR5
VHJlZShTdHJpbmcocGx1Z0lELmdldCgpKSkpOworCisgICAgbV9uYXRpdmVXaW5kb3dIYW5kbGUg
PSAwOwogfQogCiB2b2lkIFdlYlBhZ2U6OnVwZGF0ZUFjY2Vzc2liaWxpdHlUcmVlKCkKQEAgLTE1
MCw0ICsxNTIsMTIgQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYlBhZ2U6OmNhY2hlZFJl
c3BvbnNlRGF0YUZvclVSTChjb25zdCBLVVJMJikKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgV2ViUGFnZTo6d2lkZ2V0TWFwcGVkKGludDY0X3Qg
bmF0aXZlV2luZG93SGFuZGxlKQoreworICAgIG1fbmF0aXZlV2luZG93SGFuZGxlID0gbmF0aXZl
V2luZG93SGFuZGxlOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144650</attachid>
            <date>2012-05-29 17:14:07 -0700</date>
            <delta_ts>2012-06-08 16:53:45 -0700</delta_ts>
            <desc>Remove one more GSource leak</desc>
            <filename>bug-86037-20120529171406.patch</filename>
            <type>text/plain</type>
            <size>34392</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmJjNzIyNzgwNzFhMjIw
ODM5NTZjM2Y3YzUxYjgwNTcwNzA2OTllNi4uZDU4NmMzZDZmYzE2NzUwYWNjZjE4MDMxNGYyMjA0
OWRjMjE3YWZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA1LTI0ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
YW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBjb21wb3NpdGluZyB0ZXN0cywgd2hp
Y2gKKyAgICAgICAgd2Ugd2lsbCBncmFkdWFsbHkgdHJ5IHRvIHR1cm4gb24gZm9yIHRoZSBib3Rz
LgorCisgICAgICAgIEFkZCBhIG5ldyBHTENvbnRleHQgbWV0aG9kIGZvciBnZXR0aW5nIHRvIGN1
cnJlbnQgZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaXplLCB3aGljaAorICAgICAgICBpcyBxdWl0ZSB1
c2VmdWwgZm9yIHByZXZlbnRpbmcgY29tcG9zaXRlZCBjb250ZW50IHF1aXZlcmluZyB3aGlsZSBy
ZXNpemluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKTogQWRk
ZWQgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgWDExCisgICAgICAgIHdoaWNoIGFza3MgdGhlIFgg
c2VydmVyIGZvciB0aGUgd2luZG93IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5oOgorCiAyMDEyLTA1LTI0ICBDcnlzdGFsIFpoYW5nICA8aGFpemhh
bmdAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IHNlbGVjdCBwb3B1
cCBhbmQgcmVtb3ZlIG9sZCBob29rIHRvIGFpciBwb3B1cApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDU4MTIyZWEz
M2M0OGM0OWFlMTBkNzVjOTUwYWViMWY5OTU3M2RjNjguLmJhNThkYmRmY2FhOTA1MjRlNGQyOWZj
MmE4MzIxN2QyMTZjZWFmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0wNS0y
NCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gQWRkIGFuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJL
aXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjAz
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
biBpbXBsZW1lbnRhdGlvbiBvZiBMYXllclRyZWVIb3N0IGZvciBHVEsrIHRoYXQgdXNlcyBUZXh0
dXJlTWFwcGVyR0wuCisgICAgICAgIExhdGVyIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBmYWxs
IGJhY2sgdG8gdXNpbmcgdGhlIEltYWdlQnVmZmVyIFRleHR1cmVNYXBwZXIuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byB0aGUgY29tcGlsYXRpb24uCisgICAg
ICAgICogU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaDoKKyAgICAgICAgKExheWVyVHJlZUNvbnRl
eHQpOiBUaGUgR1RLKyB2ZXJzaW9uIG9mIHRoZSBMYXllclRyZWVDb250ZXh0IGp1c3QgaG9sZHMg
d2luZG93IGhhbmRsZS4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL0xheWVyVHJlZUNvbnRleHRHdGsu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlSG9zdC5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVI
b3N0R3RrLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJU
cmVlSG9zdEd0ay5jcHA6IEFkZGVkLgorICAgICAgICBBZGQgdGhpcyBMYXllclRyZWVIb3N0IGlt
cGxlbWVudGF0aW9uIHRoYXQganVzdCBjcmVhdGVzIGEgR0wgY29udGV4dCBmcm9tIHRoZSB3aWRn
ZXQgWDExIHdpbmRvdyBJRC4KKyAgICAgICAgTGF0ZXIgaW1wbGVtZW50YXRpb25zIG1pZ2h0IGZp
bmQgYSBtb3JlIGNyb3NzLXBsYXRmb3JtIHNvbHV0aW9uLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBs
YXRmb3JtSW5pdGlhbGl6ZSk6IEluaXRpYWxpemUgdGhlIG5hdGl2ZSB3aW5kb3cgaGFuZGxlIHRv
IGJlIHplcm8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OndpZGdldE1hcHBlZCk6IFdoZW4g
bWFwcGluZyB0aGUgd2lkZ2V0LCB0cnkgdG8gZ2V0IHRoZSBuYXRpdmUgd2luZG93CisgICAgICAg
IGhhbmRsZSBhbmQgc2VuZCBpdCB0byB0aGUgV2ViUHJvY2Vzcy4KKwogMjAxMi0wNS0yNCAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ugc3VyZSB0
aGF0IHRoZSBsYXllciBob3N0aW5nIG1vZGUgaXMgdXAtdG8tZGF0ZSB3aGVuIHJlY29ubmVjdGlu
ZyB0byBhIG5ldyB3ZWIgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HTENvbnRleHQuaAppbmRleCBkZTJlMGE2NGJjYWM4MWVlNTQ0ZDQwYmRh
YjAzMmFhNGVkMjhkNzRjLi5hYjgyYzlhNDU4MjU4YmU4NzJhYjdiYmQyMTNjZTVkNmVkYjhkMWVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENv
bnRleHQuaApAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKSA9IDA7CisgICAg
dmlydHVhbCBJbnRTaXplIGRlZmF1bHRGcmFtZUJ1ZmZlclNpemUoKSA9IDA7CiAKICNpZiBFTkFC
TEUoV0VCR0wpCiAgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3Jt
Q29udGV4dCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dseC9HTENvbnRleHRHTFguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKaW5kZXggZTYwYTJiZTQ0MzgwZjgwMzhiZDIwMWFmY2Rj
OWE4YzFlMDJjYzRhZC4uOTQ1MmM0NDg3MmVmZGE2NTJmMzc1MzZhNTkwYjhjMDQ4NTMxODY5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4
dEdMWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29u
dGV4dEdMWC5jcHAKQEAgLTI2Miw2ICsyNjIsMjAgQEAgYm9vbCBHTENvbnRleHRHTFg6OmNhblJl
bmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gbV93aW5kb3c7CiB9CiAKK0lu
dFNpemUgR0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKCkKK3sKKyAgICBpZiAo
IWNhblJlbmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCkgfHwgIW1fd2luZG93KQorICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOworCisgICAgaW50IHgsIHk7CisgICAgV2luZG93IHJvb3RXaW5kb3c7
CisgICAgdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIGJvcmRlcldpZHRoLCBkZXB0aDsKKyAg
ICBpZiAoIVhHZXRHZW9tZXRyeShzaGFyZWREaXNwbGF5KCksIG1fd2luZG93LCAmcm9vdFdpbmRv
dywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsICZib3JkZXJXaWR0aCwgJmRlcHRoKSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
OworfQorCiBib29sIEdMQ29udGV4dEdMWDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICAgICBB
U1NFUlQobV9jb250ZXh0ICYmIChtX3dpbmRvdyB8fCBtX3BidWZmZXIgfHwgbV9nbHhQaXhtYXAp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENv
bnRleHRHTFguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRl
eHRHTFguaAppbmRleCAzODNjMGQ1NWYzNDhkOTY3YzNkMWU3MjQ4NzBhMGZkY2YyNmY2YjBjLi4x
MThlZGQ0MWQ0MjJhZWNjYjk5MGQxYjdhZmM2NGYwZDY3YWIxNjYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCkBAIC00Niw2
ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCk7CiAgICAgdmlydHVhbCBib29sIGNhblJl
bmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCk7CisgICAgdmlydHVhbCBJbnRTaXplIGRlZmF1bHRG
cmFtZUJ1ZmZlclNpemUoKTsKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2aXJ0dWFsIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBhMTlkNGEwMmVjOWYzZTUyNGRiNTQ4MGE1N2M0MDE4YTM1YmE1MGNk
Li45Y2FhODhhYmE0YTI3YThlZDI2OGNkMmVkNjI0MTVlZWU4YjlmNzM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTMzOSwxMCArMzM5LDEwIEBAIHdlYmtpdDJfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggXAogCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Gb250U21vb3RoaW5nTGV2ZWwuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVk
L1Byb2Nlc3NFeGVjdXRhYmxlUGF0aC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8v
TGF5ZXJUcmVlQ29udGV4dENhaXJvLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJv
L1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9B
cmd1bWVudENvZGVyc0d0ay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50
Q29kZXJzR3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9MYXllclRyZWVDb250
ZXh0R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3Vz
ZUV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVl
bEV2ZW50R3RrLmNwcCBcCkBAIC0xMDM4LDYgKzEwMzgsMTIgQEAgd2Via2l0Ml9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAogCitpZiBVU0VfVEVYVFVSRV9NQVBQRVJf
R0wKK3dlYmtpdDJfc291cmNlcyArPSBcCisgICBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwIFwKKyAgIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCitlbmRpZiAjIEVORCBVU0VfVEVY
VFVSRV9NQVBQRVJfR0wKKwogaWYgRU5BQkxFX1BMVUdJTl9QUk9DRVNTCiAKIHdlYmtpdDJfcGx1
Z2luX3Byb2Nlc3NfYnVpbHRfc291cmNlcyArPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVy
VHJlZUNvbnRleHQuaAppbmRleCBmMzNmYTk3NzJjMDNjNzEwYmUzYmZjNDFlNDQxNWI5ZGM1ZDNj
MDc0Li43MTBkOWRhODE0NDMwNmE0ZTcwMjA0ZmZlMDc5NjczZGM5NTFiYWRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTU2LDYgKzU2LDggQEAgcHVibGlj
OgogICAgIEhXTkQgd2luZG93OwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgdWludDMyX3Qgd2Vi
TGF5ZXJJRDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB1aW50NjRfdCB3aW5kb3dIYW5kbGU7
CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTGF5
ZXJUcmVlQ29udGV4dEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0xheWVyVHJl
ZUNvbnRleHRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3ZDkxOGE3MGY5ZGJiMWU2YzBiNzQ0YmJiMmZk
NjFkZGZiNDY4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L0xheWVyVHJlZUNvbnRleHRHdGsuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0
KCkKKyAgICA6IHdpbmRvd0hhbmRsZSgwKQoreworfQorCitMYXllclRyZWVDb250ZXh0Ojp+TGF5
ZXJUcmVlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLT5l
bmNvZGUod2luZG93SGFuZGxlKTsKK30KKworYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBMYXllclRyZWVDb250ZXh0JiBjb250
ZXh0KQoreworICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUoY29udGV4dC53aW5kb3dIYW5kbGUp
OworfQorCitib29sIExheWVyVHJlZUNvbnRleHQ6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJl
dHVybiAhd2luZG93SGFuZGxlOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYikKK3sKKyAgICByZXR1cm4gYS53
aW5kb3dIYW5kbGUgPT0gYi53aW5kb3dIYW5kbGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKaW5kZXggNGZhYTc1ZmIwZjk5MjgyMDIwNGNlNzFhODRlZmY3Y2E3MmE4
YmNlMy4uMGNhZjNlODNjZDNjY2Y3ODgwZjI5MmEzNmNkNjZiNDYyMzIwODhkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcApAQCAtNjUsNiArNjUsMTAgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5LmgiCiAjZW5kaWYKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgZGVmaW5lZChH
REtfV0lORE9XSU5HX1gxMSkKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2VuZGlmCisKIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTU0LDYg
KzE1OCw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZShHdGtXaWRnZXQq
IHdpZGdldCkKICAgICBnaW50IGF0dHJpYnV0ZXNNYXNrID0gR0RLX1dBX1ggfCBHREtfV0FfWSB8
IEdES19XQV9WSVNVQUw7CiAKICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGdka193aW5kb3dfbmV3
KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lkZ2V0KSwgJmF0dHJpYnV0ZXMsIGF0dHJp
YnV0ZXNNYXNrKTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgZ2RrX3dpbmRvd19l
bnN1cmVfbmF0aXZlKHdpbmRvdyk7CisjZW5kaWYKICAgICBndGtfd2lkZ2V0X3NldF93aW5kb3co
d2lkZ2V0LCB3aW5kb3cpOwogICAgIGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aW5kb3csIHdp
ZGdldCk7CiAKQEAgLTMzOSw2ICszNDYsMTIgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VNYXAoR3RrV2lkZ2V0KiB3aWRnZXQpCiAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2Vi
X3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5tYXAod2lkZ2V0KTsKIAogICAgIFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAg
IEdka1dpbmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7Cisg
ICAgaWYgKGdka1dpbmRvdyAmJiBnZGtfd2luZG93X2hhc19uYXRpdmUoZ2RrV2luZG93KSkKKyAg
ICAgICAgV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdi0+cGFnZVByb3h5LT53aWRn
ZXRNYXBwZWQoR0RLX1dJTkRPV19YSUQoZ2RrV2luZG93KSk7CisjZW5kaWYKKwogICAgIGlmICgh
d2ViVmlld0Jhc2UtPnByaXYtPm5lZWRzUmVzaXplT25NYXApCiAgICAgICAgIHJldHVybjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDcyZDQ2OTU5MGM4ZmFi
ZWIwMjMzODVkN2VhMmUwNmQ5ZGM1MGFhMTAuLmIyZjA2MWZhNGFjYjkwYmU3NTM0YTI4MGQ5NzBi
ZTQ2MjRlODNmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAg
LTY2MCw2ICs2NjAsMTAgQEAgcHVibGljOgogICAgIC8vIFdlYlBvcHVwTWVudVByb3h5OjpDbGll
bnQKICAgICB2aXJ0dWFsIE5hdGl2ZVdlYk1vdXNlRXZlbnQqIGN1cnJlbnRseVByb2Nlc3NlZE1v
dXNlRG93bkV2ZW50KCk7CiAKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKKyAgICB2b2lkIHdpZGdldE1hcHBlZCh1aW50NjRfdCBuYXRpdmVXaW5kb3dJZCk7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCosIFBhc3NSZWZQ
dHI8V2ViUHJvY2Vzc1Byb3h5PiwgV2ViUGFnZUdyb3VwKiwgdWludDY0X3QgcGFnZUlEKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCmlu
ZGV4IGRjODIzNTIxMGU3ZGMwOTljNjM5NDg1MWI4YTUxNGRjYWU5Y2Q5ZTIuLmFjMjZjMGNiOGZk
YmI4YzllNzI1ZjkzM2I4NDc4YTJhNGRjYzBmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZU1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8Z3RrL2d0a3gu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDcsNCArMTA5LDExIEBAIHZvaWQgV2ViUGFn
ZVByb3h5Ojp3aW5kb3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGZyYW1lCiAgICAgd2Via2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUoV0VCS0lU
X1dFQl9WSUVXX0JBU0Uodmlld1dpZGdldCgpKSwgcGx1Z2luLCBmcmFtZVJlY3QpOwogfQogCisj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBXZWJQYWdlUHJveHk6OndpZGdldE1hcHBl
ZCh1aW50NjRfdCBuYXRpdmVXaW5kb3dJZCkKK3sKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OldpZGdldE1hcHBlZChuYXRpdmVXaW5kb3dJZCksIG1fcGFnZUlEKTsKK30K
KyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAppbmRleCA5MmViNDA4NTU5OTU2
MzBhN2I1NGMzOWJiYzIzNDRmYmMxZGYwZjc5Li40YjY5NWFmNjUwNzlkNmQzYzk5NDI1OGFlNGE0
ZjQwYzU5NWYzNjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgInF0L0xh
eWVyVHJlZUhvc3RRdC5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKKyNpbmNsdWRlICJndGsvTGF5ZXJUcmVlSG9zdEd0ay5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUw
LDYgKzU0LDggQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0PiBMYXllclRyZWVIb3N0OjpjcmVh
dGUoV2ViUGFnZSogd2ViUGFnZSkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVh
dGUod2ViUGFnZSk7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9z
dFF0OjpjcmVhdGUod2ViUGFnZSk7CisjZWxpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKKyAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlKHdlYlBhZ2Up
OwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNGIyYjc2YzhjMzY4ODY0ZWEwZDE5YTkwMmIyMWZj
MWFhYzg0OTQ0ZC4uNDdhYzAwMjliZjcxYThhYWFhMGU2NTA3MTQ5ZTJmZGE5YmE1ZTMyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC00MzIsNiAr
NDMyLDkgQEAgcHVibGljOgogCiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCB1cGRhdGVB
Y2Nlc3NpYmlsaXR5VHJlZSgpOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICB2b2lk
IHdpZGdldE1hcHBlZChpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZSk7CisjZW5kaWYKICNlbmRp
ZgogCiAgICAgdm9pZCBzZXRDb21wb3NpdGlvbkZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBjb21w
b3NpdGlvblN0cmluZywgdWludDY0X3QgZnJvbSwgdWludDY0X3QgbGVuZ3RoKTsKQEAgLTUzOCw2
ICs1NDEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKGludCB2aXNp
YmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShHVEspCisgICAgdWludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKCkgeyByZXR1cm4gbV9uYXRp
dmVXaW5kb3dIYW5kbGU7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2UodWludDY0
X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKQEAgLTc1MCw2
ICs3NTcsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2dlc3R1cmVU
YXJnZXROb2RlOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIFdlYlBhZ2VBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBtX2FjY2Vzc2liaWxpdHlPYmplY3Q7CisKKyAgICAvLyBPdXIgdmlldydzIHdpbmRv
dyBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICB1aW50NjRfdCBtX25hdGl2ZVdpbmRvd0hhbmRsZTsK
ICNlbmRpZgogICAgIAogICAgIFdlYkNvcmU6OlJ1bkxvb3A6OlRpbWVyPFdlYlBhZ2U+IG1fc2V0
Q2FuU3RhcnRNZWRpYVRpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA0YmFiOGFjNDJkMTU1Yzc5MTI1NDI0
NWIxMjcxNWE0MDU0NmZjYzk3Li4zMjk0ODlmZmQ3NzBiOTBkMzZmYTQyM2M4N2NmYmI0YzIyMWIy
OWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgpAQCAtMjcxLDQgKzI3MSw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2Ug
ewogI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQogICAgIFNldFZpc2liaWxpdHlTdGF0
ZShpbnQgdmlzaWJpbGl0eVN0YXRlLCBib29sIGlzSW5pdGlhbFN0YXRlKTsKICNlbmRpZgorCisj
aWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgV2lkZ2V0TWFw
cGVkKGludDY0X3QgaWQpCisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdkYWQ3MjUxMTBiMDFhYmJjYjQ4MGExMGFhZjI3NWRlOWFjODY1NmEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RH
dGsuY3BwCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdEd0ay5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKKyNpbmNsdWRlIDxHTC9nbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR0xDb250ZXh0
R0xYLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19YMTEpCisjZGVmaW5lIFJlZ2lvbiBYUmVnaW9uCisjZGVmaW5lIEZvbnQgWEZvbnQKKyNkZWZp
bmUgQ3Vyc29yIFhDdXJzb3IKKyNkZWZpbmUgU2NyZWVuIFhTY3JlZW4KKyNpbmNsdWRlIDxnZGsv
Z2RreC5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0R3RrPiBMYXllclRyZWVIb3N0R3Rr
OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdEd0
az4gaG9zdCA9IGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0R3RrKHdlYlBhZ2UpKTsKKyAgICBo
b3N0LT5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIGhvc3QucmVsZWFzZSgpOworfQorCitMYXll
clRyZWVIb3N0R3RrOjpMYXllclRyZWVIb3N0R3RrKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBM
YXllclRyZWVIb3N0KHdlYlBhZ2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICAsIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQorICAgICwgbV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQodHJ1ZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCgw
KQoreworfQorCitHTENvbnRleHQqIExheWVyVHJlZUhvc3RHdGs6OmdsQ29udGV4dCgpCit7Cisg
ICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKKworICAg
IHVpbnQ2NF90IHdpbmRvd0hhbmRsZSA9IG1fd2ViUGFnZS0+bmF0aXZlV2luZG93SGFuZGxlKCk7
CisgICAgaWYgKCF3aW5kb3dIYW5kbGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9jb250
ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHdpbmRvd0hhbmRsZSwgR0xD
b250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmluaXRpYWxpemUoKQoreworICAgIG1fcm9vdExh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIG1fcm9vdExheWVyLT5zZXRE
cmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+
c2l6ZSgpKTsKKworICAgIC8vIFRoZSBub24tY29tcG9zaXRlZCBjb250ZW50cyBhcmUgYSBjaGls
ZCBvZiB0aGUgcm9vdCBsYXllci4KKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFt
X3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgaWYgKG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldEFjY2VsZXJhdGVz
RHJhd2luZyh0cnVlKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFt
ZSgiTGF5ZXJUcmVlSG9zdCByb290IGxheWVyIik7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsK
KyNlbmRpZgorCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci5nZXQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoKTsKKworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53aW5kb3dIYW5kbGUgPSBtX3dl
YlBhZ2UtPm5hdGl2ZVdpbmRvd0hhbmRsZSgpOworCisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0g
Z2xDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRo
ZSBUZXh0dXJlTWFwcGVyIG5lZWRzIGFuIGFjdGl2ZSBPcGVuR0wgY29udGV4dC4KKyAgICBjb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJl
TWFwcGVyR0w6OmNyZWF0ZSgpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVy
LmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAg
aWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJs
YXlMYXllcigpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7Cit9CisKK0xheWVyVHJlZUhvc3RHdGs6On5MYXllclRyZWVIb3N0R3Rr
KCkKK3sKKyAgICBBU1NFUlQoIW1faXNWYWxpZCk7CisgICAgQVNTRVJUKCFtX3Jvb3RMYXllcik7
CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKworY29uc3QgTGF5ZXJUcmVlQ29u
dGV4dCYgTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJUcmVlQ29udGV4dCgpCit7CisgICAgcmV0dXJu
IG1fbGF5ZXJUcmVlQ29udGV4dDsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXRTaG91
bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
ID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RHdGs6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5
ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4K
KyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmludmFsaWRhdGUoKQoreworICAgIEFTU0VS
VChtX2lzVmFsaWQpOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICBtX3Jv
b3RMYXllciA9IG51bGxwdHI7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gbnVs
bHB0cjsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworICAgIG1fdGV4dHVyZU1h
cHBlciA9IG51bGxwdHI7CisKKyAgICBtX2NvbnRleHQgPSBudWxscHRyOworICAgIG1faXNWYWxp
ZCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNldE5vbkNvbXBvc2l0ZWRD
b250ZW50c05lZWREaXNwbGF5KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYg
KG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0R3RrOjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3Qg
SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAg
IHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RHdGs6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3U2l6
ZSkKK3sKKyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0
aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVu
dCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhw
b3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6
ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkp
IHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5l
d1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUu
d2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsK
KyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUu
aGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIp
CisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0R3RrOjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpCit7CisgICAg
Ly8gT3RoZXIgbGF5ZXJzIGxlYXJuIG9mIHRoZSBzY2FsZSBmYWN0b3IgY2hhbmdlIHZpYSBXZWJQ
YWdlOjpzZXREZXZpY2VTY2FsZUZhY3Rvci4KKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RHdGs6OmZvcmNlUmVwYWludCgpCit7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAg
ICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQorewor
ICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXko
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUg
dGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpub3RpZnlTeW5jUmVxdWlyZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dEd0azo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhh
c2UsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmIChncmFwaGljc0xheWVyID09
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdS
ZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CisgICAgICAg
IG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIExheWVyVHJlZUhvc3RHdGs6OnNob3dE
ZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVycygpOworfQor
Citib29sIExheWVyVHJlZUhvc3RHdGs6OnNob3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGlj
c0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0
aW5ncygpLT5zaG93UmVwYWludENvdW50ZXIoKTsKK30KKworZmxvYXQgTGF5ZXJUcmVlSG9zdEd0
azo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9CisKK2dib29sZWFuIExheWVyVHJlZUhv
c3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2soTGF5ZXJUcmVlSG9zdEd0ayogbGF5
ZXJUcmVlSG9zdCkKK3sKKyAgICBsYXllclRyZWVIb3N0LT5sYXllckZsdXNoVGltZXJGaXJlZCgp
OworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpsYXllckZs
dXNoVGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJ
ZCk7CisgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKKworICAgIGZsdXNoQW5k
UmVuZGVyTGF5ZXJzKCk7CisKKyAgICBpZiAodG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5
ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpICYmICFt
X2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2Fs
bGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAg
LyA2MC4wLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJl
ZENhbGxiYWNrKSwgdGhpcywgMCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdEd0azo6Zmx1c2hQ
ZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdl
T3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdT
dWJmcmFtZXMoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpjb21wb3NpdGVMYXllcnNU
b0NvbnRleHQoKQoreworICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOworICAg
IGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFRoZSB3aW5kb3cgc2l6ZSBtYXkgYmUgb3V0IG9mIHN5bmMgd2l0
aCB0aGUgcGFnZSBzaXplIGF0IHRoaXMgcG9pbnQsIGFuZCBnZXR0aW5nCisgICAgLy8gdGhlIHZp
ZXdwb3J0IHBhcmFtZXRlcnMgaW5jb3JyZWN0LCBtZWFucyB0aGF0IHRoZSBjb250ZW50IHdpbGwg
YmUgbWlzcGxhY2VkLiBUaHVzCisgICAgLy8gd2Ugc2V0IHRoZSB2aWV3cG9ydCBwYXJhbWV0ZXJz
IGRpcmVjdGx5IGZyb20gdGhlIHdpbmRvdyBzaXplLgorICAgIEludFNpemUgY29udGV4dFNpemUg
PSBtX2NvbnRleHQtPmRlZmF1bHRGcmFtZUJ1ZmZlclNpemUoKTsKKyAgICBnbFZpZXdwb3J0KDAs
IDAsIGNvbnRleHRTaXplLndpZHRoKCksIGNvbnRleHRTaXplLmhlaWdodCgpKTsKKworICAgIG1f
dGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBh
aW50aW5nKCk7CisKKyAgICBjb250ZXh0LT5zd2FwQnVmZmVycygpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RHdGs6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKK3sKKyAgICB7CisgICAgICAgIFJl
ZlB0cjxMYXllclRyZWVIb3N0R3RrPiBwcm90ZWN0KHRoaXMpOworICAgICAgICBtX3dlYlBhZ2Ut
PmxheW91dElmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7
CisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT3VyIG1vZGVsIGlzIHZlcnkgc2ltcGxlLiBXZSBhbHdh
eXMgY29tcG9zaXRlIGFuZCByZW5kZXIgdGhlIHRyZWUgaW1tZWRpYXRlbHkgYWZ0ZXIgdXBkYXRp
bmcgaXQuCisgICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisKKyAgICBpZiAobV9ub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsKKyAgICAgICAgLy8gTGV0IHRoZSBkcmF3aW5n
IGFyZWEga25vdyB0aGF0IHdlJ3ZlIGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIgY2hhbmdlcy4K
KyAgICAgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5n
QXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdEd0azo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKCFtX3BhZ2VP
dmVybGF5TGF5ZXIpOworCisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNl
dE5hbWUoIkxheWVyVHJlZUhvc3QgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisg
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExh
eWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RHdGs6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9w
YWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJl
bnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RHdGs6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgdXNlIGEg
R0xpYiB0aW1lciBiZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50IGhhbmRsaW5nIGR1cmluZyBk
cmFnZ2luZyBjYW4gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJp
b3JpdHkuCisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpCisgICAgICAgIG1f
bGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJ
VFlfRVZFTlRTLCAwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGlt
ZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6
c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQp
Cit7CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hp
bmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0R3RrOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAg
aWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGdfc291cmNlX3JlbW92ZShtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpOworICAgIG1fbGF5
ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRy
ZWVIb3N0R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVy
VHJlZUhvc3RHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDcyOTM1ZTNjZGFmODI2MTI2YWM2YjU3MTg1YjI1
YzQ1MTdjMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGF5ZXJUcmVl
SG9zdEd0a19oCisjZGVmaW5lIExheWVyVHJlZUhvc3RHdGtfaAorCisjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyTGF5ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dMQ29udGV4dC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVyVHJlZUhvc3RHdGsgOiBwdWJs
aWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdEd0az4gY3JlYXRlKFdlYlBhZ2Uq
KTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0R3RrKCk7CisKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBMYXllclRyZWVIb3N0R3RrKFdlYlBhZ2UqKTsKKworICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9
CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIC8vIExheWVyVHJlZUhvc3QuCisgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5n
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV2
aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50
KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVy
Rmx1c2hpbmdFbmFibGVkKTsKKworcHJpdmF0ZToKKyAgICAvLyBMYXllclRyZWVIb3N0LgorICAg
IHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNo
KGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWRE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFs
bFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNw
bGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiwgZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWly
ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3Jk
ZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKikgY29uc3QgeyB9CisKKyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsK
KyAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgdm9pZCBjb21wb3NpdGVM
YXllcnNUb0NvbnRleHQoKTsKKyAgICB2b2lkIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CisgICAg
dm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAgdm9pZCBsYXllckZsdXNoVGlt
ZXJGaXJlZCgpOworICAgIHN0YXRpYyBnYm9vbGVhbiBsYXllckZsdXNoVGltZXJGaXJlZENhbGxi
YWNrKExheWVyVHJlZUhvc3RHdGsqKTsKKworICAgIFdlYkNvcmU6OkdMQ29udGV4dCogZ2xDb250
ZXh0KCk7CisKKyAgICAvLyBUaGUgY29udGV4dCBmb3IgdGhpcyBsYXllciB0cmVlLgorICAgIExh
eWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworCisgICAgLy8gV2hldGhlciB0aGUg
bGF5ZXIgdHJlZSBob3N0IGlzIHZhbGlkIG9yIG5vdC4KKyAgICBib29sIG1faXNWYWxpZDsKKwor
ICAgIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIGxldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhlIG5l
eHQgdGltZSB3ZSd2ZSBmbHVzaGVkCisgICAgLy8gbGF5ZXIgdHJlZSBjaGFuZ2VzLgorICAgIGJv
b2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CisKKyAgICAvLyBUaGUgcm9vdCBs
YXllci4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisK
KyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRl
bnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVs
bCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgLy8gVGhlIFRleHR1cmVNYXBwZXIg
Zm9yIG91ciBsYXllciB0cmVlLgorICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBt
X3RleHR1cmVNYXBwZXI7CisKKyAgICAvLyBUaGUgR0xDb250ZXh0IG9mIG91ciBvdXRwdXQuCisg
ICAgT3duUHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OworCisgICAgLy8gV2hldGhl
ciB0aGUgaG9zdCB3aWxsIHNjaGVkdWxlIGxheWVyIGZsdXNoZXMuCisgICAgYm9vbCBtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKKworICAgIC8vIEEgR1NvdXJjZSB0YWcgdHJhY2tpbmcg
dGhlIGxheWVyIGZsdXNoIHRpbWVyLgorICAgIHVuc2lnbmVkIG1fbGF5ZXJGbHVzaFRpbWVyQ2Fs
bGJhY2tJZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gTGF5ZXJU
cmVlSG9zdEd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCAyYjJhOTQ2NGVjY2MzYjljM2YyMDAyMTljMThjOTgw
ZGU5MDM3ZGNmLi4yODk3ZGQ5ZmE5NWVjYzA3YWM5MGE3NDc0ZDNhMzFhODQ3YmNiMjIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0
ay5jcHAKQEAgLTU0LDYgKzU0LDggQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUo
KQogICAgIG1fYWNjZXNzaWJpbGl0eU9iamVjdCA9IHdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
TmV3KHRoaXMpOwogICAgIEdPd25QdHI8Z2NoYXI+IHBsdWdJRChhdGtfcGx1Z19nZXRfaWQoQVRL
X1BMVUcobV9hY2Nlc3NpYmlsaXR5T2JqZWN0KSkpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6QmluZEFjY2Vzc2liaWxpdHlUcmVlKFN0cmluZyhwbHVnSUQuZ2V0KCkpKSk7CisK
KyAgICBtX25hdGl2ZVdpbmRvd0hhbmRsZSA9IDA7CiB9CiAKIHZvaWQgV2ViUGFnZTo6dXBkYXRl
QWNjZXNzaWJpbGl0eVRyZWUoKQpAQCAtMTUwLDQgKzE1MiwxMiBAQCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gV2ViUGFnZTo6Y2FjaGVkUmVzcG9uc2VEYXRhRm9yVVJMKGNvbnN0IEtVUkwmKQog
ICAgIHJldHVybiAwOwogfQogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBXZWJQ
YWdlOjp3aWRnZXRNYXBwZWQoaW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUpCit7CisgICAgbV9u
YXRpdmVXaW5kb3dIYW5kbGUgPSBuYXRpdmVXaW5kb3dIYW5kbGU7Cit9CisKKyNlbmRpZgorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>145101</attachid>
            <date>2012-05-31 09:14:07 -0700</date>
            <delta_ts>2012-05-31 09:14:07 -0700</delta_ts>
            <desc>Stacktrace using 20120529 patch</desc>
            <filename>wk-wb86037-assert-painting-frame-view-with-pending-relayout.txt</filename>
            <type>text/plain</type>
            <size>9018</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">IzAgIDB4MDAwMDdmOGRhNDgyMjQ3OSBpbiBXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVu
dHMgKHRoaXM9MHgyNTM1ZmMwLCBwPTB4NDljNGViMCwgcmVjdD0uLi4pIGF0IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcDozMDYzCiMxICAweDAwMDA3ZjhkYTQ5NGQyYzcgaW4gV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6cGFpbnQgKHRoaXM9MHgyNTM1ZmMwLCBjb250ZXh0PTB4NDljNGVi
MCwgcmVjdD0uLi4pIGF0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOjEw
NzQKIzIgIDB4MDAwMDdmOGRhNDA4NjA5YiBpbiBXZWJLaXQ6OldlYlBhZ2U6OmRyYXdSZWN0ICh0
aGlzPTB4MjU2ZDFhMCwgZ3JhcGhpY3NDb250ZXh0PS4uLiwgcmVjdD0uLi4pIGF0IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDo5NTYKIzMgIDB4MDAwMDdmOGRh
NDBhNjg4MSBpbiBXZWJLaXQ6OkxheWVyVHJlZUhvc3RHdGs6OnBhaW50Q29udGVudHMgKHRoaXM9
MHg0ODA4NWYwLCBncmFwaGljc0xheWVyPTB4NDgwOGQxMCwgZ3JhcGhpY3NDb250ZXh0PS4uLiwg
Y2xpcFJlY3Q9Li4uKSBhdCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xh
eWVyVHJlZUhvc3RHdGsuY3BwOjI0NgojNCAgMHgwMDAwN2Y4ZGE0OGMxNjg1IGluIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzICh0aGlzPTB4NDgwOGQx
MCwgY29udGV4dD0uLi4sIGNsaXA9Li4uKSBhdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmNwcDozMTgKIzUgIDB4MDAwMDdmOGRhNGU0NDFjNSBpbiBXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZSAodGhpcz0weDQ4MDhm
ODAsIHRleHR1cmVNYXBwZXI9MHg0OWMxZmYwLCBsYXllcj0weDQ4MDhkMTApIGF0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOjEy
NwojNiAgMHgwMDAwN2Y4ZGE0ZTQ2MTZlIGluIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6
c3luY0NvbXBvc2l0aW5nU3RhdGUgKHRoaXM9MHg0ODA4ZjgwLCBncmFwaGljc0xheWVyPTB4NDgw
OGQxMCwgdGV4dHVyZU1hcHBlcj0weDQ5YzFmZjAsIG9wdGlvbnM9MCkgYXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHA6NTIzCiM3
ICAweDAwMDA3ZjhkYTRlNDU2NGQgaW4gV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZSAodGhpcz0weDQ4MDhmODAsIGdyYXBoaWNzTGF5ZXI9MHg0ODA4ZDEw
LCBvcHRpb25zPTApIGF0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOjM3OQojOCAgMHgwMDAwN2Y4ZGE0ZTNhMWNhIGluIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkgKHRoaXM9MHg0ODA4ZDEwKSBhdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOjM0OQojOSAgMHgw
MDAwN2Y4ZGE0MGE2YWEwIGluIFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzICh0aGlzPTB4NDgwODVmMCkgYXQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcDoyOTEKIzEwIDB4MDAwMDdmOGRhNDBh
NWVhYiBpbiBXZWJLaXQ6OkxheWVyVHJlZUhvc3RHdGs6OmluaXRpYWxpemUgKHRoaXM9MHg0ODA4
NWYwKSBhdCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhv
c3RHdGsuY3BwOjEyMgojMTEgMHgwMDAwN2Y4ZGE0MGE1ODg3IGluIFdlYktpdDo6TGF5ZXJUcmVl
SG9zdEd0azo6Y3JlYXRlICh3ZWJQYWdlPTB4MjU2ZDFhMCkgYXQgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcDo1NwojMTIgMHgwMDAwN2Y4
ZGE0MDc2YjViIGluIFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlICh3ZWJQYWdlPTB4MjU2
ZDFhMCkgYXQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwOjU4CiMxMyAweDAwMDA3ZjhkYTQwNmMyNTMgaW4gV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6
OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgKHRoaXM9MHgxZDJkMTUwLCBncmFwaGlj
c0xheWVyPTB4NDgwNzBmMCkgYXQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhSW1wbC5jcHA6NDY4CiMxNCAweDAwMDA3ZjhkYTQwNmI4MTIgaW4gV2ViS2l0OjpE
cmF3aW5nQXJlYUltcGw6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyICh0aGlzPTB4MWQyZDE1MCwg
Z3JhcGhpY3NMYXllcj0weDQ4MDcwZjApIGF0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOjI4OQojMTUgMHgwMDAwN2Y4ZGE0MDg0YTkxIGluIFdl
YktpdDo6V2ViUGFnZTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSAodGhpcz0weDI1
NmQxYTAsIGxheWVyPTB4NDgwNzBmMCkgYXQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOjU5OAojMTYgMHgwMDAwN2Y4ZGE0MDRiMDU4IGluIFdlYktpdDo6V2Vi
Q2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllciAodGhpcz0weDI1M2RhOTAsIGxh
eWVyPTB4NDgwNzBmMCkgYXQgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOjY3OAojMTcgMHgwMDAwN2Y4ZGE0YWNlMDgxIGluIFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyICh0aGlzPTB4MWI5N2M5
MCwgYXR0YWNobWVudD1XZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OlJvb3RMYXllckF0
dGFjaGVkVmlhQ2hyb21lQ2xpZW50KSBhdCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcDoyMTkzCiMxOCAweDAwMDA3ZjhkYTRhY2RhZDYgaW4gV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290TGF5ZXIgKHRoaXM9MHgxYjk3Yzkw
KSBhdCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoy
MTMzCiMxOSAweDAwMDA3ZjhkYTRhYzcwYjUgaW4gV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjplbmFibGVDb21wb3NpdGluZ01vZGUgKHRoaXM9MHgxYjk3YzkwLCBlbmFibGU9dHJ1ZSkg
YXQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6MjEx
CiMyMCAweDAwMDA3ZjhkYTRhYzgwYWEgaW4gV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVCYWNraW5nICh0aGlzPTB4MWI5N2M5MCwgbGF5ZXI9MHg0N2ZmZWI4LCBzaG91bGRS
ZXBhaW50PVdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Q29tcG9zaXRpbmdDaGFuZ2VS
ZXBhaW50Tm93KSBhdCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcDo0ODcKIzIxIDB4MDAwMDdmOGRhNGFjODM4YiBpbiBXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZSAodGhpcz0weDFiOTdjOTAs
IGxheWVyPTB4NDdmZmViOCwgc2hvdWxkUmVwYWludD1XZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OkNvbXBvc2l0aW5nQ2hhbmdlUmVwYWludE5vdykgYXQgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6NTUyCiMyMiAweDAwMDA3ZjhkYTRhYjc1
M2EgaW4gV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZCAodGhpcz0weDQ3ZmZlYjgs
IG9sZFN0eWxlPTB4MCkgYXQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDo0Nzg0CiMyMyAweDAwMDA3ZjhkYTRhNDZhMWEgaW4gV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlICh0aGlzPTB4NDdmZmUxOCwgZGlmZj1XZWJDb3JlOjpTdHls
ZURpZmZlcmVuY2VFcXVhbCwgb2xkU3R5bGU9MHgwKSBhdCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOjQ0NQojMjQgMHgwMDAwN2Y4ZGE0YTI5MGZjIGlu
IFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UgKHRoaXM9MHg0N2ZmZTE4LCBkaWZm
PVdlYkNvcmU6OlN0eWxlRGlmZmVyZW5jZUVxdWFsLCBvbGRTdHlsZT0weDApIGF0IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwOjIzNQojMjUgMHgwMDAwN2Y4ZGE0YjA4NDU0
IGluIFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzdHlsZURpZENoYW5nZSAodGhpcz0weDQ3ZmZl
MTgsIGRpZmY9V2ViQ29yZTo6U3R5bGVEaWZmZXJlbmNlRXF1YWwsIG9sZFN0eWxlPTB4MCkgYXQg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDo3MgojMjYgMHgwMDAw
N2Y4ZGE0YWY5MjFiIGluIFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGUgKHRoaXM9MHg0
N2ZmZTE4LCBzdHlsZT0uLi4pIGF0IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwOjE3OTMKIzI3IDB4MDAwMDdmOGRhNGFmOGIxMiBpbiBXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnNldEFuaW1hdGFibGVTdHlsZSAodGhpcz0weDQ3ZmZlMTgsIHN0eWxlPS4uLikgYXQgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6MTY5NAojMjggMHgwMDAwN2Y4
ZGE0NDE3MjMzIGluIFdlYkNvcmU6Ok5vZGVSZW5kZXJlckZhY3Rvcnk6OmNyZWF0ZVJlbmRlcmVy
ICh0aGlzPTB4N2ZmZjhkZDg2NDYwKSBhdCBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmlu
Z0NvbnRleHQuY3BwOjM1NAojMjkgMHgwMDAwN2Y4ZGE0NDE3NGRkIGluIFdlYkNvcmU6Ok5vZGVS
ZW5kZXJlckZhY3Rvcnk6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQgKHRoaXM9MHg3ZmZmOGRkODY0
NjApIGF0IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHA6Mzg3CiMz
MCAweDAwMDA3ZjhkYTQzZmYxY2IgaW4gV2ViQ29yZTo6Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5l
ZWRlZCAodGhpcz0weDM4OWYwZjApIGF0IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcDoxNDI5
CiMzMSAweDAwMDA3ZjhkYTQzZDE1YTkgaW4gV2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoICh0aGlz
PTB4Mzg5ZjBmMCkgYXQgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwOjk1NAojMzIgMHgw
MDAwN2Y4ZGE0MzU4MmQ2IGluIFdlYkNvcmU6Ok5vZGU6OnJlYXR0YWNoICh0aGlzPTB4Mzg5ZjBm
MCkgYXQgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaDo4NTcKIzMzIDB4MDAwMDdmOGRhNDNkMWVi
YiBpbiBXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSAodGhpcz0weDM4OWYwZjAsIGNoYW5n
ZT1XZWJDb3JlOjpOb2RlOjpOb0luaGVyaXQpIGF0IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcDoxMDgwCiMzNCAweDAwMDA3ZjhkYTQzZDI1ZWYgaW4gV2ViQ29yZTo6RWxlbWVudDo6cmVj
YWxjU3R5bGUgKHRoaXM9MHg0MjlkZWEwLCBjaGFuZ2U9V2ViQ29yZTo6Tm9kZTo6Tm9Jbmhlcml0
KSBhdCBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHA6MTE2NgojMzUgMHgwMDAwN2Y4ZGE0
M2QyNWVmIGluIFdlYkNvcmU6OkVsZW1lbnQ6OnJlY2FsY1N0eWxlICh0aGlzPTB4MzgxMDBjMCwg
Y2hhbmdlPVdlYkNvcmU6Ok5vZGU6Ok5vQ2hhbmdlKSBhdCBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHA6MTE2NgojMzYgMHgwMDAwN2Y4ZGE0M2QyNWVmIGluIFdlYkNvcmU6OkVsZW1lbnQ6
OnJlY2FsY1N0eWxlICh0aGlzPTB4Mzg0Zjg1MCwgY2hhbmdlPVdlYkNvcmU6Ok5vZGU6Ok5vSW5o
ZXJpdCkgYXQgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwOjExNjYKIzM3IDB4MDAwMDdm
OGRhNDNkMjVlZiBpbiBXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSAodGhpcz0weDM4MjQz
ZTAsIGNoYW5nZT1XZWJDb3JlOjpOb2RlOjpOb0NoYW5nZSkgYXQgU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwOjExNjYKIzM4IDB4MDAwMDdmOGRhNDNkMjVlZiBpbiBXZWJDb3JlOjpFbGVt
ZW50OjpyZWNhbGNTdHlsZSAodGhpcz0weDM4OTMxNzAsIGNoYW5nZT1XZWJDb3JlOjpOb2RlOjpO
b0luaGVyaXQpIGF0IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcDoxMTY2CiMzOSAweDAw
MDA3ZjhkYTQzZDI1ZWYgaW4gV2ViQ29yZTo6RWxlbWVudDo6cmVjYWxjU3R5bGUgKHRoaXM9MHgz
ODUwNzEwLCBjaGFuZ2U9V2ViQ29yZTo6Tm9kZTo6Tm9DaGFuZ2UpIGF0IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcDoxMTY2CiM0MCAweDAwMDA3ZjhkYTQzZDI1ZWYgaW4gV2ViQ29yZTo6
RWxlbWVudDo6cmVjYWxjU3R5bGUgKHRoaXM9MHgxZTJlODAwLCBjaGFuZ2U9V2ViQ29yZTo6Tm9k
ZTo6Tm9DaGFuZ2UpIGF0IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcDoxMTY2CiM0MSAw
eDAwMDA3ZjhkYTQzZDI1ZWYgaW4gV2ViQ29yZTo6RWxlbWVudDo6cmVjYWxjU3R5bGUgKHRoaXM9
MHgzMGFiYWIwLCBjaGFuZ2U9V2ViQ29yZTo6Tm9kZTo6Tm9DaGFuZ2UpIGF0IFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcDoxMTY2CiM0MiAweDAwMDA3ZjhkYTQzN2Y1NDcgaW4gV2ViQ29y
ZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlICh0aGlzPTB4MjEyNjNkMCwgY2hhbmdlPVdlYkNvcmU6
Ok5vZGU6Ok5vQ2hhbmdlKSBhdCBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwOjE3NzcK
IzQzIDB4MDAwMDdmOGRhNDM3Zjg0NCBpbiBXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlU3R5bGVJ
Zk5lZWRlZCAodGhpcz0weDIxMjYzZDApIGF0IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHA6MTgyNQojNDQgMHgwMDAwN2Y4ZGE0ODIyOWUwIGluIFdlYkNvcmU6OkZyYW1lVmlldzo6dXBk
YXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSAodGhpcz0weDI1MzVmYzApIGF0IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcDozMTcyCiM0NSAweDAwMDA3ZjhkYTQwODVj
ZGMgaW4gV2ViS2l0OjpXZWJQYWdlOjpsYXlvdXRJZk5lZWRlZCAodGhpcz0weDI1NmQxYTApIGF0
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDo4MDUKIzQ2IDB4
MDAwMDdmOGRhNDA2Y2QyYSBpbiBXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheSAodGhp
cz0weDFkMmQxNTAsIHVwZGF0ZUluZm89Li4uKSBhdCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcDo2MzUKIzQ3IDB4MDAwMDdmOGRhNDA2Yzk4ZSBp
biBXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheSAodGhpcz0weDFkMmQxNTApIGF0IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOjU4Mgoj
NDggMHgwMDAwN2Y4ZGE0MDZjODBhIGluIFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5
VGltZXJGaXJlZCAodGhpcz0weDFkMmQxNTApIGF0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOjU2MQojNDkgMHgwMDAwN2Y4ZGE0MDZlMzUxIGlu
IFdlYkNvcmU6OlJ1bkxvb3A6OlRpbWVyPFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsPjo6ZmlyZWQg
KHRoaXM9MHgxZDJkMzU4KSBhdCAuL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bkxvb3AuaDox
MjIKIzUwIDB4MDAwMDdmOGRhNTMzYjI4YiBpbiBXZWJDb3JlOjpSdW5Mb29wOjpUaW1lckJhc2U6
OnRpbWVyRmlyZWRDYWxsYmFjayAodGltZXI9MHgxZDJkMzU4KSBhdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHA6MTM3CiM1MSAweDAwMDA3ZjhkYTAyZDIyYWIgaW4g
Z190aW1lb3V0X2Rpc3BhdGNoIChzb3VyY2U9PG9wdGltaXplZCBvdXQ+LCBjYWxsYmFjaz08b3B0
aW1pemVkIG91dD4sIHVzZXJfZGF0YT08b3B0aW1pemVkIG91dD4pIGF0IGdtYWluLmM6Mzg4Mgoj
NTIgMHgwMDAwN2Y4ZGEwMmQxNmUzIGluIGdfbWFpbl9kaXNwYXRjaCAoY29udGV4dD0weDEzNjI4
ZjApIGF0IGdtYWluLmM6MjUzOQojNTMgZ19tYWluX2NvbnRleHRfZGlzcGF0Y2ggKGNvbnRleHQ9
MHgxMzYyOGYwKSBhdCBnbWFpbi5jOjMwNzUKIzU0IDB4MDAwMDdmOGRhMDJkMWEzMCBpbiBnX21h
aW5fY29udGV4dF9pdGVyYXRlIChkaXNwYXRjaD0xLCBibG9jaz08b3B0aW1pemVkIG91dD4sIGNv
bnRleHQ9MHgxMzYyOGYwLCBzZWxmPTxvcHRpbWl6ZWQgb3V0PikgYXQgZ21haW4uYzozMTQ2CiM1
NSBnX21haW5fY29udGV4dF9pdGVyYXRlIChjb250ZXh0PTB4MTM2MjhmMCwgYmxvY2s9PG9wdGlt
aXplZCBvdXQ+LCBkaXNwYXRjaD0xLCBzZWxmPTxvcHRpbWl6ZWQgb3V0PikgYXQgZ21haW4uYzoz
MDgzCiM1NiAweDAwMDA3ZjhkYTAyZDFlMmEgaW4gZ19tYWluX2xvb3BfcnVuIChsb29wPTB4MTQ0
OWY5MCkgYXQgZ21haW4uYzozMzQwCiM1NyAweDAwMDA3ZjhkYTUzM2FlMDggaW4gV2ViQ29yZTo6
UnVuTG9vcDo6cnVuICgpIGF0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SdW5Mb29wR3Rr
LmNwcDo1OQojNTggMHgwMDAwN2Y4ZGEzZmRkYWQ2IGluIFdlYktpdDo6V2ViUHJvY2Vzc01haW5H
dGsgKGFyZ2M9MiwgYXJndj0weDdmZmY4ZGQ4NzY2OCkgYXQgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwOjczCiM1OSAweDAwMDAwMDAwMDA0MDA3YTQg
aW4gbWFpbiAoKQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146664</attachid>
            <date>2012-06-08 16:53:51 -0700</date>
            <delta_ts>2012-06-12 10:02:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86037-20120608165350.patch</filename>
            <type>text/plain</type>
            <size>34352</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVhYWIwMmE2ZGVlZDE3
YzlkYjY3OTkwMDMxNjcyYTlhZDYxMjBmNC4uMzYwOGFhYjc1ZWU0MDJjMTcwMzE4YTY3MTA5NjM5
NmM2ODdjYWY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTA4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQg
YW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBjb21wb3NpdGluZyB0ZXN0cywgd2hp
Y2gKKyAgICAgICAgd2Ugd2lsbCBncmFkdWFsbHkgdHJ5IHRvIHR1cm4gb24gZm9yIHRoZSBib3Rz
LgorCisgICAgICAgIEFkZCBhIG5ldyBHTENvbnRleHQgbWV0aG9kIGZvciBnZXR0aW5nIHRvIGN1
cnJlbnQgZGVmYXVsdCBmcmFtZWJ1ZmZlciBzaXplLCB3aGljaAorICAgICAgICBpcyBxdWl0ZSB1
c2VmdWwgZm9yIHByZXZlbnRpbmcgY29tcG9zaXRlZCBjb250ZW50IHF1aXZlcmluZyB3aGlsZSBy
ZXNpemluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKTogQWRk
ZWQgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgWDExCisgICAgICAgIHdoaWNoIGFza3MgdGhlIFgg
c2VydmVyIGZvciB0aGUgd2luZG93IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5oOgorCiAyMDEyLTA2LTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIENyYXNoIGluIFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDYyZjVhZjk3NTU3Yjdi
ZmI1N2ZiZTM0ZGVkMGQzOTI0MGM2YzM3ZDQuLmVmNTE5MTRjOGE5YWI0N2FkYTdmZjQ5MDY2OWI0
NjM5NmQ4OTk1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0wNi0wOCAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRk
IGFuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjAzNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhbiBpbXBs
ZW1lbnRhdGlvbiBvZiBMYXllclRyZWVIb3N0IGZvciBHVEsrIHRoYXQgdXNlcyBUZXh0dXJlTWFw
cGVyR0wuCisgICAgICAgIExhdGVyIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBmYWxsIGJhY2sg
dG8gdXNpbmcgdGhlIEltYWdlQnVmZmVyIFRleHR1cmVNYXBwZXIuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byB0aGUgY29tcGlsYXRpb24uCisgICAgICAgICog
U2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaDoKKyAgICAgICAgKExheWVyVHJlZUNvbnRleHQpOiBU
aGUgR1RLKyB2ZXJzaW9uIG9mIHRoZSBMYXllclRyZWVDb250ZXh0IGp1c3QgaG9sZHMgd2luZG93
IGhhbmRsZS4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL0xheWVyVHJlZUNvbnRleHRHdGsuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3Rr
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9z
dEd0ay5jcHA6IEFkZGVkLgorICAgICAgICBBZGQgdGhpcyBMYXllclRyZWVIb3N0IGltcGxlbWVu
dGF0aW9uIHRoYXQganVzdCBjcmVhdGVzIGEgR0wgY29udGV4dCBmcm9tIHRoZSB3aWRnZXQgWDEx
IHdpbmRvdyBJRC4KKyAgICAgICAgTGF0ZXIgaW1wbGVtZW50YXRpb25zIG1pZ2h0IGZpbmQgYSBt
b3JlIGNyb3NzLXBsYXRmb3JtIHNvbHV0aW9uLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViUGFnZUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSk6IEluaXRpYWxpemUgdGhlIG5hdGl2ZSB3aW5kb3cgaGFuZGxlIHRvIGJlIHpl
cm8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OndpZGdldE1hcHBlZCk6IFdoZW4gbWFwcGlu
ZyB0aGUgd2lkZ2V0LCB0cnkgdG8gZ2V0IHRoZSBuYXRpdmUgd2luZG93CisgICAgICAgIGhhbmRs
ZSBhbmQgc2VuZCBpdCB0byB0aGUgV2ViUHJvY2Vzcy4KKwogMjAxMi0wNi0wOCAgVmlhdGNoZXNs
YXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KIAogICAgICAg
ICBbUXRdIFtXSzJdIEFQSSB0ZXN0cyByYW5kb21seSBhc3NlcnQgaW4gV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OmFzc2lnbkltYWdlVG9MYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuaAppbmRleCBkZTJlMGE2NGJjYWM4MWVlNTQ0ZDQw
YmRhYjAzMmFhNGVkMjhkNzRjLi5hYjgyYzlhNDU4MjU4YmU4NzJhYjdiYmQyMTNjZTVkNmVkYjhk
MWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuaApAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKSA9IDA7Cisg
ICAgdmlydHVhbCBJbnRTaXplIGRlZmF1bHRGcmFtZUJ1ZmZlclNpemUoKSA9IDA7CiAKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRm
b3JtQ29udGV4dCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKaW5kZXggZTYwYTJiZTQ0MzgwZjgwMzhiZDIwMWFm
Y2RjOWE4YzFlMDJjYzRhZC4uOTQ1MmM0NDg3MmVmZGE2NTJmMzc1MzZhNTkwYjhjMDQ4NTMxODY5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29u
dGV4dEdMWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dM
Q29udGV4dEdMWC5jcHAKQEAgLTI2Miw2ICsyNjIsMjAgQEAgYm9vbCBHTENvbnRleHRHTFg6OmNh
blJlbmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gbV93aW5kb3c7CiB9CiAK
K0ludFNpemUgR0xDb250ZXh0R0xYOjpkZWZhdWx0RnJhbWVCdWZmZXJTaXplKCkKK3sKKyAgICBp
ZiAoIWNhblJlbmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCkgfHwgIW1fd2luZG93KQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgaW50IHgsIHk7CisgICAgV2luZG93IHJvb3RXaW5k
b3c7CisgICAgdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIGJvcmRlcldpZHRoLCBkZXB0aDsK
KyAgICBpZiAoIVhHZXRHZW9tZXRyeShzaGFyZWREaXNwbGF5KCksIG1fd2luZG93LCAmcm9vdFdp
bmRvdywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsICZib3JkZXJXaWR0aCwgJmRlcHRoKSkKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWln
aHQpOworfQorCiBib29sIEdMQ29udGV4dEdMWDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICAg
ICBBU1NFUlQobV9jb250ZXh0ICYmIChtX3dpbmRvdyB8fCBtX3BidWZmZXIgfHwgbV9nbHhQaXht
YXApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9H
TENvbnRleHRHTFguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENv
bnRleHRHTFguaAppbmRleCAzODNjMGQ1NWYzNDhkOTY3YzNkMWU3MjQ4NzBhMGZkY2YyNmY2YjBj
Li4xMThlZGQ0MWQ0MjJhZWNjYjk5MGQxYjdhZmM2NGYwZDY3YWIxNjYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCkBAIC00
Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCk7CiAgICAgdmlydHVhbCBib29sIGNh
blJlbmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCk7CisgICAgdmlydHVhbCBJbnRTaXplIGRlZmF1
bHRGcmFtZUJ1ZmZlclNpemUoKTsKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2aXJ0dWFsIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCA4NTFkNjI2NmFlYTY1MTljN2U2ZTE1NWM5ZjcwODU1ODRmYTMy
MmMwLi4wYWExMjI4YjdiNDBhYTU5MGJiOGZlYmYyMjk4YWRlMWIwNzQxYTZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM0NCwxMCArMzQ0LDEwIEBAIHdlYmtpdDJfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Gb250U21vb3RoaW5nTGV2ZWwuaCBcCiAJU291cmNlL1dlYktpdDIvU2hh
cmVkL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fp
cm8vTGF5ZXJUcmVlQ29udGV4dENhaXJvLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2Nh
aXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9Bcmd1bWVudENvZGVyc0d0ay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3Vt
ZW50Q29kZXJzR3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9MYXllclRyZWVD
b250ZXh0R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXli
b2FyZEV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJN
b3VzZUV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJX
aGVlbEV2ZW50R3RrLmNwcCBcCkBAIC0xMDU5LDYgKzEwNTksMTIgQEAgd2Via2l0Ml9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAogCitpZiBVU0VfVEVYVFVSRV9NQVBQ
RVJfR0wKK3dlYmtpdDJfc291cmNlcyArPSBcCisgICBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwIFwKKyAgIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCitlbmRpZiAjIEVORCBVU0Vf
VEVYVFVSRV9NQVBQRVJfR0wKKwogaWYgRU5BQkxFX1BMVUdJTl9QUk9DRVNTCiAKIHdlYmtpdDJf
cGx1Z2luX3Byb2Nlc3NfYnVpbHRfc291cmNlcyArPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xh
eWVyVHJlZUNvbnRleHQuaAppbmRleCBmMzNmYTk3NzJjMDNjNzEwYmUzYmZjNDFlNDQxNWI5ZGM1
ZDNjMDc0Li43MTBkOWRhODE0NDMwNmE0ZTcwMjA0ZmZlMDc5NjczZGM5NTFiYWRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTU2LDYgKzU2LDggQEAgcHVi
bGljOgogICAgIEhXTkQgd2luZG93OwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgdWludDMyX3Qg
d2ViTGF5ZXJJRDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB1aW50NjRfdCB3aW5kb3dIYW5k
bGU7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
TGF5ZXJUcmVlQ29udGV4dEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0xheWVy
VHJlZUNvbnRleHRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3ZDkxOGE3MGY5ZGJiMWU2YzBiNzQ0YmJi
MmZkNjFkZGZiNDY4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL0xheWVyVHJlZUNvbnRleHRHdGsuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorCisj
aW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250
ZXh0KCkKKyAgICA6IHdpbmRvd0hhbmRsZSgwKQoreworfQorCitMYXllclRyZWVDb250ZXh0Ojp+
TGF5ZXJUcmVlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
LT5lbmNvZGUod2luZG93SGFuZGxlKTsKK30KKworYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBMYXllclRyZWVDb250ZXh0JiBj
b250ZXh0KQoreworICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUoY29udGV4dC53aW5kb3dIYW5k
bGUpOworfQorCitib29sIExheWVyVHJlZUNvbnRleHQ6OmlzRW1wdHkoKSBjb25zdAoreworICAg
IHJldHVybiAhd2luZG93SGFuZGxlOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYikKK3sKKyAgICByZXR1cm4g
YS53aW5kb3dIYW5kbGUgPT0gYi53aW5kb3dIYW5kbGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggZjgzMDhhYTE0ZjkwZThkZjM1ZmZiMTVlNWZhODAwYTU4
M2U5NDZjZS4uYmMyMTllMmE0ODE0MDIzMWE2ZmJiNjUwNzNmMjQ3YTgzODc3YWI4YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcApAQCAtNjUsNiArNjUsMTAgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5LmgiCiAjZW5kaWYKIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgZGVmaW5l
ZChHREtfV0lORE9XSU5HX1gxMSkKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTU0
LDYgKzE1OCw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlUmVhbGl6ZShHdGtXaWRn
ZXQqIHdpZGdldCkKICAgICBnaW50IGF0dHJpYnV0ZXNNYXNrID0gR0RLX1dBX1ggfCBHREtfV0Ff
WSB8IEdES19XQV9WSVNVQUw7CiAKICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGdka193aW5kb3df
bmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lkZ2V0KSwgJmF0dHJpYnV0ZXMsIGF0
dHJpYnV0ZXNNYXNrKTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgZ2RrX3dpbmRv
d19lbnN1cmVfbmF0aXZlKHdpbmRvdyk7CisjZW5kaWYKICAgICBndGtfd2lkZ2V0X3NldF93aW5k
b3cod2lkZ2V0LCB3aW5kb3cpOwogICAgIGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aW5kb3cs
IHdpZGdldCk7CiAKQEAgLTMzOSw2ICszNDYsMTMgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VNYXAoR3RrV2lkZ2V0KiB3aWRnZXQpCiAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRf
d2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5tYXAod2lkZ2V0KTsKIAogICAgIFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7Cisj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQor
ICAgIEdka1dpbmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7
CisgICAgQVNTRVJUKGdka1dpbmRvdyk7CisgICAgaWYgKGdka193aW5kb3dfaGFzX25hdGl2ZShn
ZGtXaW5kb3cpKQorICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT53aWRnZXRN
YXBwZWQoR0RLX1dJTkRPV19YSUQoZ2RrV2luZG93KSk7CisjZW5kaWYKKwogICAgIGlmICghd2Vi
Vmlld0Jhc2UtPnByaXYtPm5lZWRzUmVzaXplT25NYXApCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDgyNmMzYWI1OWFjNjIxYmY5
MTY3MjVlMzYyOTA0OGNiMjJjOGFkOWUuLjU0MzM4MWJjODMzYjhmNmUzY2E3NzZhMGNkZGI5Mzdh
NjYzZTViMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTY2
NSw2ICs2NjUsMTAgQEAgcHVibGljOgogICAgIC8vIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQK
ICAgICB2aXJ0dWFsIE5hdGl2ZVdlYk1vdXNlRXZlbnQqIGN1cnJlbnRseVByb2Nlc3NlZE1vdXNl
RG93bkV2ZW50KCk7CiAKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKKyAgICB2b2lkIHdpZGdldE1hcHBlZCh1aW50NjRfdCBuYXRpdmVXaW5kb3dJZCk7CisjZW5k
aWYKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCosIFBhc3NSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiwgV2ViUGFnZUdyb3VwKiwgdWludDY0X3QgcGFnZUlEKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCmluZGV4
IGRjODIzNTIxMGU3ZGMwOTljNjM5NDg1MWI4YTUxNGRjYWU5Y2Q5ZTIuLmFjMjZjMGNiOGZkYmI4
YzllNzI1ZjkzM2I4NDc4YTJhNGRjYzBmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8Z3RrL2d0a3guaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDcsNCArMTA5LDExIEBAIHZvaWQgV2ViUGFnZVBy
b3h5Ojp3aW5kb3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGZyYW1lCiAgICAgd2Via2l0V2ViVmlld0Jhc2VDaGlsZE1vdmVSZXNpemUoV0VCS0lUX1dF
Ql9WSUVXX0JBU0Uodmlld1dpZGdldCgpKSwgcGx1Z2luLCBmcmFtZVJlY3QpOwogfQogCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBXZWJQYWdlUHJveHk6OndpZGdldE1hcHBlZCh1
aW50NjRfdCBuYXRpdmVXaW5kb3dJZCkKK3sKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OldpZGdldE1hcHBlZChuYXRpdmVXaW5kb3dJZCksIG1fcGFnZUlEKTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAppbmRleCA5MmViNDA4NTU5OTU2MzBh
N2I1NGMzOWJiYzIzNDRmYmMxZGYwZjc5Li41YTliOGI0MGYyN2Y1ZGY4MDcxYWIwYjUzMzY4MmY0
NzhiZjFhMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgInF0L0xheWVy
VHJlZUhvc3RRdC5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0R3RrLmgiCisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTAsNiArNTQs
OCBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQ
YWdlKiB3ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQ
YWdlKTsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0UXQ6OmNy
ZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQorICAgIHJldHVybiBMYXllclRyZWVIb3N0R3RrOjpjcmVhdGUod2ViUGFnZSk7CiAjZWxz
ZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAppbmRleCAxNWRhN2Y1ZjE1YmE2MmZiZGMwN2I4NzZmNzgzZGQ0YTJkZDAx
NDQ4Li4wM2Q0YzgxMmIxY2ExNGJlZTkwOTQwZmYyYjM0OTkxMTg4ZDFkZjA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQzMiw2ICs0MzIsOSBA
QCBwdWJsaWM6CiAKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICB2b2lkIHVwZGF0ZUFjY2Vzc2li
aWxpdHlUcmVlKCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgd2lkZ2V0
TWFwcGVkKGludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKTsKKyNlbmRpZgogI2VuZGlmCiAKICAg
ICB2b2lkIHNldENvbXBvc2l0aW9uRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9u
U3RyaW5nLCB1aW50NjRfdCBmcm9tLCB1aW50NjRfdCBsZW5ndGgpOwpAQCAtNTM5LDYgKzU0Miwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoaW50IHZpc2liaWxpdHlT
dGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykK
KyAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUoKSB7IHJldHVybiBtX25hdGl2ZVdpbmRv
d0hhbmRsZTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdl
SUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApAQCAtNzUzLDYgKzc2MCw5
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fZ2VzdHVyZVRhcmdldE5v
ZGU7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3Qq
IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKKworICAgIC8vIE91ciB2aWV3J3Mgd2luZG93IGluIHRo
ZSBVSSBwcm9jZXNzLgorICAgIHVpbnQ2NF90IG1fbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlm
CiAgICAgCiAgICAgV2ViQ29yZTo6UnVuTG9vcDo6VGltZXI8V2ViUGFnZT4gbV9zZXRDYW5TdGFy
dE1lZGlhVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDNiMGNlZGM0YWM4ODEwNTI2MjAwYzNhNGMzZWY0
ZmMwYjVjNTg4YmEuLjliOTUzNGVhZThiN2YxZDg3ZGYyNTBhYTA0YmI3YjIyNGM5YTEzZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCkBAIC0yNzMsNCArMjczLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAjaWYg
RU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCiAgICAgU2V0VmlzaWJpbGl0eVN0YXRlKGludCB2
aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpOwogI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBXaWRnZXRNYXBwZWQoaW50
NjRfdCBpZCkKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI4ZWIz
ZWQ1YzQ3ZmVkMjQyNTJiZWI4NjhmNGJiN2IxYzdiOTFiZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAK
QEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0R3Rr
LmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyR0wuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgPEdML2dsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHRHTFguaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+
CisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkK
KyNkZWZpbmUgUmVnaW9uIFhSZWdpb24KKyNkZWZpbmUgRm9udCBYRm9udAorI2RlZmluZSBDdXJz
b3IgWEN1cnNvcgorI2RlZmluZSBTY3JlZW4gWFNjcmVlbgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+
CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IExheWVyVHJlZUhvc3RHdGs6OmNyZWF0
ZShXZWJQYWdlKiB3ZWJQYWdlKQoreworICAgIFJlZlB0cjxMYXllclRyZWVIb3N0R3RrPiBob3N0
ID0gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RHdGsod2ViUGFnZSkpOworICAgIGhvc3QtPmlu
aXRpYWxpemUoKTsKKyAgICByZXR1cm4gaG9zdC5yZWxlYXNlKCk7Cit9CisKK0xheWVyVHJlZUhv
c3RHdGs6OkxheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJl
ZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCh0cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKDApCit7Cit9
CisKK0dMQ29udGV4dCogTGF5ZXJUcmVlSG9zdEd0azo6Z2xDb250ZXh0KCkKK3sKKyAgICBpZiAo
bV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAgdWludDY0
X3Qgd2luZG93SGFuZGxlID0gbV93ZWJQYWdlLT5uYXRpdmVXaW5kb3dIYW5kbGUoKTsKKyAgICBp
ZiAoIXdpbmRvd0hhbmRsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2NvbnRleHQgPSBH
TENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cod2luZG93SGFuZGxlLCBHTENvbnRleHQ6
OnNoYXJpbmdDb250ZXh0KCkpOworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdEd0azo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9yb290TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29u
dGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkp
OworCisgICAgLy8gVGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRo
ZSByb290IGxheWVyLgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFn
ZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBpZiAobV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5n
KHRydWUpOworCisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXll
clRyZWVIb3N0IHJvb3QgbGF5ZXIiKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5hbWUoIkxheWVyVHJlZUhvc3Qgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlm
CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LmdldCgpKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpOworCisgICAgbV9sYXllclRyZWVDb250ZXh0LndpbmRvd0hhbmRsZSA9IG1fd2ViUGFnZS0+
bmF0aXZlV2luZG93SGFuZGxlKCk7CisKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRl
eHQoKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1
cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIGNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJH
TDo6Y3JlYXRlKCk7CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkp
LT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisKKyAgICBpZiAobV93
ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVy
KCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworTGF5ZXJUcmVlSG9zdEd0azo6
fkxheWVyVHJlZUhvc3RHdGsoKQoreworICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKKyAgICBBU1NF
UlQoIW1fcm9vdExheWVyKTsKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCitj
b25zdCBMYXllclRyZWVDb250ZXh0JiBMYXllclRyZWVIb3N0R3RrOjpsYXllclRyZWVDb250ZXh0
KCkKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RHdGs6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9v
bCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCit7CisgICAgbV9ub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVy
IHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworCisgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6aW52YWxpZGF0
ZSgpCit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIgPSBudWxscHRyOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7
CisgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKKworICAgIG1fY29udGV4dCA9IG51bGxw
dHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChyZWN0KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OnNjcm9sbE5vbkNvbXBvc2l0
ZWRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3Jv
bGxPZmZzZXQpCit7CisgICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Ny
b2xsUmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2l6ZURpZENoYW5nZShjb25z
dCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5l
d1NpemUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXpl
KTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24t
Y29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZv
ciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+
IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0
aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAg
ICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChG
bG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndp
ZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xk
U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUu
d2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAgaWYgKG1f
cGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5l
d1NpemUpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmRldmljZVNjYWxlRmFjdG9yRGlk
Q2hhbmdlKCkKK3sKKyAgICAvLyBPdGhlciBsYXllcnMgbGVhcm4gb2YgdGhlIHNjYWxlIGZhY3Rv
ciBjaGFuZ2UgdmlhIFdlYlBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yLgorICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpkaWRJbnN0YWxsUGFn
ZU92ZXJsYXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpkaWRVbmluc3RhbGxQ
YWdlT3ZlcmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpzZXRQYWdlT3Zl
cmxheU5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX3Bh
Z2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RHdGs6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciosIGRvdWJsZSB0aW1lKQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6Om5v
dGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0R3RrOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAg
IG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5
TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250
ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJU
cmVlSG9zdEd0azo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QK
K3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVi
dWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdEd0azo6c2hvd1JlcGFpbnRDb3Vu
dGVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291bnRlcigpOworfQorCitmbG9h
dCBMYXllclRyZWVIb3N0R3RrOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworZ2Jv
b2xlYW4gTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhMYXll
clRyZWVIb3N0R3RrKiBsYXllclRyZWVIb3N0KQoreworICAgIGxheWVyVHJlZUhvc3QtPmxheWVy
Rmx1c2hUaW1lckZpcmVkKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RHdGs6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQobV9sYXllckZs
dXNoVGltZXJDYWxsYmFja0lkKTsKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSAw
OworCisgICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKworICAgIGlmICh0b1RleHR1cmVNYXBw
ZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdB
bmltYXRpb25zKCkgJiYgIW1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCkKKyAgICAgICAgbV9s
YXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklU
WV9FVkVOVFMsIDEwMDAuMCAvIDYwLjAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxh
eWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKK30KKworYm9vbCBMYXllclRy
ZWVIb3N0R3RrOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIG1fcm9vdExheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICByZXR1cm4g
bV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6
OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpCit7CisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0g
Z2xDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHdpbmRvdyBzaXplIG1heSBi
ZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBwYWdlIHNpemUgYXQgdGhpcyBwb2ludCwgYW5kIGdldHRp
bmcKKyAgICAvLyB0aGUgdmlld3BvcnQgcGFyYW1ldGVycyBpbmNvcnJlY3QsIG1lYW5zIHRoYXQg
dGhlIGNvbnRlbnQgd2lsbCBiZSBtaXNwbGFjZWQuIFRodXMKKyAgICAvLyB3ZSBzZXQgdGhlIHZp
ZXdwb3J0IHBhcmFtZXRlcnMgZGlyZWN0bHkgZnJvbSB0aGUgd2luZG93IHNpemUuCisgICAgSW50
U2l6ZSBjb250ZXh0U2l6ZSA9IG1fY29udGV4dC0+ZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOwor
ICAgIGdsVmlld3BvcnQoMCwgMCwgY29udGV4dFNpemUud2lkdGgoKSwgY29udGV4dFNpemUuaGVp
Z2h0KCkpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5wYWludCgpOworICAgIG1fdGV4
dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Zmx1c2hBbmRSZW5kZXJMYXllcnMoKQorewor
ICAgIHsKKyAgICAgICAgUmVmUHRyPExheWVyVHJlZUhvc3RHdGs+IHByb3RlY3QodGhpcyk7Cisg
ICAgICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoIW1faXNW
YWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHTENvbnRleHQqIGNvbnRl
eHQgPSBnbENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdXIgbW9kZWwgaXMgdmVy
eSBzaW1wbGUuIFdlIGFsd2F5cyBjb21wb3NpdGUgYW5kIHJlbmRlciB0aGUgdHJlZSBpbW1lZGlh
dGVseSBhZnRlciB1cGRhdGluZyBpdC4KKyAgICBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsK
KworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgeworICAgICAgICAv
LyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNoIG9mIHRo
ZSBsYXllciBjaGFuZ2VzLgorICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPiht
X3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAg
ICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KK30K
Kwordm9pZCBMYXllclRyZWVIb3N0R3RrOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAg
ICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdCBwYWdlIG92ZXJsYXkgY29udGVu
dCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkp
OworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQor
eworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAg
ICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBXZSB1c2UgYSBHTGliIHRpbWVyIGJlY2F1c2Ugb3RoZXJ3aXNlIEdUSysgZXZlbnQg
aGFuZGxpbmcgZHVyaW5nIGRyYWdnaW5nIGNhbiBzdGFydmUgV2ViQ29yZSB0aW1lcnMsIHdoaWNo
IGhhdmUgYSBsb3dlciBwcmlvcml0eS4KKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJh
Y2tJZCkKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2Fk
ZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0R3RrOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXll
ckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5
ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBp
ZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RHdGs6OmNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZ19zb3VyY2VfcmVtb3ZlKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJh
Y2tJZCk7CisgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNzI5MzVlM2NkYWY4
MjYxMjZhYzZiNTcxODViMjVjNDUxN2MwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaApAQCAtMCwwICsx
LDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBMYXllclRyZWVIb3N0R3RrX2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdEd0a19oCisK
KyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR0xD
b250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5ZXJU
cmVlSG9zdEd0ayA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0R3Rr
PiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RHdGsoKTsKKwor
cHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSopOworCisg
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9y
b290TGF5ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgLy8gTGF5
ZXJUcmVlSG9zdC4KKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIHZpcnR1YWwg
dm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOworICAg
IHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOworICAgIHZpcnR1YWwg
dm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpOworCitwcml2YXRlOgorICAgIC8vIExh
eWVyVHJlZUhvc3QuCisgICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRy
ZWVDb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNj
aGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9z
aXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsK
KworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmly
dHVhbCBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworCisgICAgLy8gR3JhcGhpY3NM
YXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lk
IG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllcios
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGlu
Z1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgdmlydHVhbCBi
b29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Io
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IH0KKworICAgIHZvaWQgY3JlYXRlUGFn
ZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAg
ICB2b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworICAgIHZvaWQgZmx1c2hBbmRSZW5k
ZXJMYXllcnMoKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICB2
b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKCk7CisgICAgc3RhdGljIGdib29sZWFuIGxheWVyRmx1
c2hUaW1lckZpcmVkQ2FsbGJhY2soTGF5ZXJUcmVlSG9zdEd0ayopOworCisgICAgV2ViQ29yZTo6
R0xDb250ZXh0KiBnbENvbnRleHQoKTsKKworICAgIC8vIFRoZSBjb250ZXh0IGZvciB0aGlzIGxh
eWVyIHRyZWUuCisgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisKKyAg
ICAvLyBXaGV0aGVyIHRoZSBsYXllciB0cmVlIGhvc3QgaXMgdmFsaWQgb3Igbm90LgorICAgIGJv
b2wgbV9pc1ZhbGlkOworCisgICAgLy8gV2hldGhlciB3ZSBzaG91bGQgbGV0IHRoZSBkcmF3aW5n
IGFyZWEga25vdyB0aGUgbmV4dCB0aW1lIHdlJ3ZlIGZsdXNoZWQKKyAgICAvLyBsYXllciB0cmVl
IGNoYW5nZXMuCisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKKwor
ICAgIC8vIFRoZSByb290IGxheWVyLgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9u
LWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBs
YXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisKKyAgICAvLyBU
aGUgVGV4dHVyZU1hcHBlciBmb3Igb3VyIGxheWVyIHRyZWUuCisgICAgT3duUHRyPFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKworICAgIC8vIFRoZSBHTENvbnRleHQg
b2Ygb3VyIG91dHB1dC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7
CisKKyAgICAvLyBXaGV0aGVyIHRoZSBob3N0IHdpbGwgc2NoZWR1bGUgbGF5ZXIgZmx1c2hlcy4K
KyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOworCisgICAgLy8gQSBHU291
cmNlIHRhZyB0cmFja2luZyB0aGUgbGF5ZXIgZmx1c2ggdGltZXIuCisgICAgdW5zaWduZWQgbV9s
YXllckZsdXNoVGltZXJDYWxsYmFja0lkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBMYXllclRyZWVIb3N0R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCmluZGV4IDJiMmE5NDY0ZWNjYzNi
OWMzZjIwMDIxOWMxOGM5ODBkZTkwMzdkY2YuLjI4OTdkZDlmYTk1ZWNjMDdhYzkwYTc0NzRkM2Ez
MWE4NDdiY2IyMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcApAQCAtNTQsNiArNTQsOCBAQCB2b2lkIFdlYlBhZ2U6OnBs
YXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0ID0gd2ViUGFnZUFj
Y2Vzc2liaWxpdHlPYmplY3ROZXcodGhpcyk7CiAgICAgR093blB0cjxnY2hhcj4gcGx1Z0lEKGF0
a19wbHVnX2dldF9pZChBVEtfUExVRyhtX2FjY2Vzc2liaWxpdHlPYmplY3QpKSk7CiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCaW5kQWNjZXNzaWJpbGl0eVRyZWUoU3RyaW5nKHBs
dWdJRC5nZXQoKSkpKTsKKworICAgIG1fbmF0aXZlV2luZG93SGFuZGxlID0gMDsKIH0KIAogdm9p
ZCBXZWJQYWdlOjp1cGRhdGVBY2Nlc3NpYmlsaXR5VHJlZSgpCkBAIC0xNTAsNCArMTUyLDEyIEBA
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBXZWJQYWdlOjpjYWNoZWRSZXNwb25zZURhdGFGb3JV
UkwoY29uc3QgS1VSTCYpCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCit2b2lkIFdlYlBhZ2U6OndpZGdldE1hcHBlZChpbnQ2NF90IG5hdGl2ZVdpbmRvd0hh
bmRsZSkKK3sKKyAgICBtX25hdGl2ZVdpbmRvd0hhbmRsZSA9IG5hdGl2ZVdpbmRvd0hhbmRsZTsK
K30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="153993"
          type_id="1"
          status="+"
          setter="alex"
    />
          </attachment>
      

    </bug>

</bugzilla>