<?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>97267</bug_id>
          
          <creation_ts>2012-09-20 15:42:40 -0700</creation_ts>
          <short_desc>[GTK] Use XDamage to simplify RedirectedXCompositeWindow</short_desc>
          <delta_ts>2012-09-29 12:43:38 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>724930</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-20 15:42:40 -0700</bug_when>
    <thetext>Instead of using a timer to figure out when to draw the contents of the RedirectedXComposite window, we can use XDamage to simply paint the widget. This allows us to remove a lot of hacks in RedirectedXCompositeWindow and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724971</commentid>
    <comment_count>1</comment_count>
      <attachid>165009</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-20 16:39:52 -0700</bug_when>
    <thetext>Created attachment 165009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725714</commentid>
    <comment_count>2</comment_count>
      <attachid>165174</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-21 12:39:54 -0700</bug_when>
    <thetext>Created attachment 165174
Rebased on top of trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725720</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 12:45:00 -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>726098</commentid>
    <comment_count>4</comment_count>
      <attachid>165174</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-09-22 01:54:32 -0700</bug_when>
    <thetext>Comment on attachment 165174
Rebased on top of trunk

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

Great patch, added some comment. Also I found some issue that I could reproduce reliably with the following steps:

1. Open and load MiniBrowser with: http://www.webkit.org/blog/386/3d-transforms
2. Go to www.google.com
3. Go back to the transforms webpage
4. Flip the card and wait for a moment, the webpage is replaced with grey background.

After that even when reloading layered content and scrolling does not work any more

I hope this helps.

&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:93
&gt; +    gdk_window_add_filter(0, reinterpret_cast&lt;GdkFilterFunc&gt;(filterXDamageEvent), 0);

Should we remove the filter when we are not redirecting the window anymore to avoid filtering events? Checking the API I also wonder if we could call this function in the constructor and use the first parameter to filter with m_window, maybe we can avoid using the hash, not sure if I&apos;m missing some part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726112</commentid>
    <comment_count>5</comment_count>
      <attachid>165174</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-22 03:43:33 -0700</bug_when>
    <thetext>Comment on attachment 165174
Rebased on top of trunk

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

&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:63
&gt; +    i-&gt;second-&gt;callDamageNotifyCallback();

We could get the damaged region and pass it to the callback so that they can use gtk_widget_queue_draw_region() or gtk_widget_queue_draw_area() and update only the damaged region.

&gt;&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:93
&gt;&gt; +    gdk_window_add_filter(0, reinterpret_cast&lt;GdkFilterFunc&gt;(filterXDamageEvent), 0);
&gt; 
&gt; Should we remove the filter when we are not redirecting the window anymore to avoid filtering events? Checking the API I also wonder if we could call this function in the constructor and use the first parameter to filter with m_window, maybe we can avoid using the hash, not sure if I&apos;m missing some part.

We can&apos;t filter per window, because it expects a GdkWindow, but I agree that instead of using a global filter we could install a filter for every window in the constructor passing the RedirectedXCompositeWindow as user_data, so that we don&apos;t need the global hash map. And of course the filter should be removed in the destructor.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:79
&gt;          m_redirectedWindow = RedirectedXCompositeWindow::create(pageSize);
&gt; -    else
&gt; +        m_redirectedWindow-&gt;setDamageNotifyCallback(redirectedWindowDamagedCallback, m_webView);

m_redirectedWindow can be null now if X extensions are not available.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:937
&gt; +    gtk_widget_queue_draw(GTK_WIDGET(data));

The implementation of the callback is exactly the same in wk1 and wk2, I wonder if we could simply pass the widget to the redirected window object and call gtk_widget_queue_draw_region from the GdkFilter function callback. It&apos;s simpler than using a callback + callback_data</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726135</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 07:35:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 165174 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165174&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:63
&gt; &gt; +    i-&gt;second-&gt;callDamageNotifyCallback();
&gt; 
&gt; We could get the damaged region and pass it to the callback so that they can use gtk_widget_queue_draw_region() or gtk_widget_queue_draw_area() and update only the damaged region.

The damaged region will always be the entire pixmap, so this will bring no benefit at this point.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:93
&gt; &gt;&gt; +    gdk_window_add_filter(0, reinterpret_cast&lt;GdkFilterFunc&gt;(filterXDamageEvent), 0);
&gt; &gt; 
&gt; &gt; Should we remove the filter when we are not redirecting the window anymore to avoid filtering events? Checking the API I also wonder if we could call this function in the constructor and use the first parameter to filter with m_window, maybe we can avoid using the hash, not sure if I&apos;m missing some part.
&gt; 
&gt; We can&apos;t filter per window, because it expects a GdkWindow, but I agree that instead of using a global filter we could install a filter for every window in the constructor passing the RedirectedXCompositeWindow as user_data, so that we don&apos;t need the global hash map. And of course the filter should be removed in the destructor.

I did use this approach at the beginning, but I opted for a global filter, because if we opened 20 WebViews running AC or WebGL all of those would have their own global event filter. I was a lot more certain of the performance impact of a single event filter. The more I think about this, the more I agree with myself.

I also considered removing the event filter when the last RedirectedXComposite window was destroyed. The logic seemed a bit more complicated, but I can do that.
&gt; 
&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:79
&gt; &gt;          m_redirectedWindow = RedirectedXCompositeWindow::create(pageSize);
&gt; &gt; -    else
&gt; &gt; +        m_redirectedWindow-&gt;setDamageNotifyCallback(redirectedWindowDamagedCallback, m_webView);
&gt; 
&gt; m_redirectedWindow can be null now if X extensions are not available.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:937
&gt; &gt; +    gtk_widget_queue_draw(GTK_WIDGET(data));
&gt; 
&gt; The implementation of the callback is exactly the same in wk1 and wk2, I wonder if we could simply pass the widget to the redirected window object and call gtk_widget_queue_draw_region from the GdkFilter function callback. It&apos;s simpler than using a callback + callback_data

I like this approach because it&apos;s more general. It allows the user of RedirectedXCompositeWindow to do more than just queue a redraw. It also reduces the GTK+ dependencies for RedirectedXCompositeWindow, which is a good thing, because one day it may be used by more than just GTK+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726136</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 07:39:29 -0700</bug_when>
    <thetext>(In reply to comment #6)

&gt; I like this approach because it&apos;s more general. It allows the user of RedirectedXCompositeWindow to do more than just queue a redraw. It also reduces the GTK+ dependencies for RedirectedXCompositeWindow, which is a good thing, because one day it may be used by more than just GTK+.

Granted, we are increasing them in this patch, but I still like the flexibility of just passing a callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726138</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 08:22:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 165174 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165174&amp;action=review
&gt; 
&gt; Great patch, added some comment. Also I found some issue that I could reproduce reliably with the following steps:
&gt; 
&gt; 1. Open and load MiniBrowser with: http://www.webkit.org/blog/386/3d-transforms
&gt; 2. Go to www.google.com
&gt; 3. Go back to the transforms webpage
&gt; 4. Flip the card and wait for a moment, the webpage is replaced with grey background.
&gt; 
&gt; After that even when reloading layered content and scrolling does not work any more

I think this is https://bugs.webkit.org/show_bug.cgi?id=97394. I confirmed that I see it with and without the patch.

&gt; I hope this helps.
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:93
&gt; &gt; +    gdk_window_add_filter(0, reinterpret_cast&lt;GdkFilterFunc&gt;(filterXDamageEvent), 0);
&gt; 
&gt; Should we remove the filter when we are not redirecting the window anymore to avoid filtering events? Checking the API I also wonder if we could call this function in the constructor and use the first parameter to filter with m_window, maybe we can avoid using the hash, not sure if I&apos;m missing some part.

Going to upload a new patch that adds and removes the filter at the appropriate times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726139</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-22 08:25:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 165174 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165174&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:63
&gt; &gt; &gt; +    i-&gt;second-&gt;callDamageNotifyCallback();
&gt; &gt; 
&gt; &gt; We could get the damaged region and pass it to the callback so that they can use gtk_widget_queue_draw_region() or gtk_widget_queue_draw_area() and update only the damaged region.
&gt; 
&gt; The damaged region will always be the entire pixmap, so this will bring no benefit at this point.

Why is always the entire pixmap?

&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:93
&gt; &gt; &gt;&gt; +    gdk_window_add_filter(0, reinterpret_cast&lt;GdkFilterFunc&gt;(filterXDamageEvent), 0);
&gt; &gt; &gt; 
&gt; &gt; &gt; Should we remove the filter when we are not redirecting the window anymore to avoid filtering events? Checking the API I also wonder if we could call this function in the constructor and use the first parameter to filter with m_window, maybe we can avoid using the hash, not sure if I&apos;m missing some part.
&gt; &gt; 
&gt; &gt; We can&apos;t filter per window, because it expects a GdkWindow, but I agree that instead of using a global filter we could install a filter for every window in the constructor passing the RedirectedXCompositeWindow as user_data, so that we don&apos;t need the global hash map. And of course the filter should be removed in the destructor.
&gt; 
&gt; I did use this approach at the beginning, but I opted for a global filter, because if we opened 20 WebViews running AC or WebGL all of those would have their own global event filter. I was a lot more certain of the performance impact of a single event filter. The more I think about this, the more I agree with myself.

Did you notice performance issues using a global filter per window? The loop is broken as soon as the filter for the window is called because it returns GDK_FILTER_REMOVE, so not all filter callbacks are always called. 


&gt; &gt; The implementation of the callback is exactly the same in wk1 and wk2, I wonder if we could simply pass the widget to the redirected window object and call gtk_widget_queue_draw_region from the GdkFilter function callback. It&apos;s simpler than using a callback + callback_data
&gt; 
&gt; I like this approach because it&apos;s more general. It allows the user of RedirectedXCompositeWindow to do more than just queue a redraw. It also reduces the GTK+ dependencies for RedirectedXCompositeWindow, which is a good thing, because one day it may be used by more than just GTK+.

Fair enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726140</commentid>
    <comment_count>10</comment_count>
      <attachid>165262</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 08:28:13 -0700</bug_when>
    <thetext>Created attachment 165262
Remove the filter when the last RedirectedXComposite window is destructed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726142</commentid>
    <comment_count>11</comment_count>
      <attachid>165262</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-22 08:38:31 -0700</bug_when>
    <thetext>Comment on attachment 165262
Remove the filter when the last RedirectedXComposite window is destructed

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

&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:114
&gt; -    Display* display = GLContextGLX::sharedDisplay();
&gt; +    Display* display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());

Btw, just curiosity, why is this change required now?

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:79
&gt;          m_redirectedWindow = RedirectedXCompositeWindow::create(pageSize);
&gt; -    else
&gt; +        m_redirectedWindow-&gt;setDamageNotifyCallback(redirectedWindowDamagedCallback, m_webView);

As I said, this would crash if RedirectedXCompositeWindow::create() returns NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726143</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 08:40:28 -0700</bug_when>
    <thetext>&gt; &gt; The damaged region will always be the entire pixmap, so this will bring no benefit at this point.
&gt; 
&gt; Why is always the entire pixmap?

We are using OpenGL in a double-buffered manner, to avoid redraw artifacts. When you update the scene, you must then swap the buffer, which updates the entire window and, in turn, the entire XComposite pixmap.

&gt; Did you notice performance issues using a global filter per window? The loop is broken as soon as the filter for the window is called because it returns GDK_FILTER_REMOVE, so not all filter callbacks 
are always called. 

I&apos;ll break down my reasoning here. The performance implications of installing a single GDK event filter and accessing data from a HashMap is well understood. I have some reasonable confidence that installing a single filter will work well through all versions of GDK. I believe this because there&apos;s no warning in the documentation and I&apos;ve seen other projects install global GDK event filters to accomplish this very task. The only additional complexity of my approach (in the big O sense of the word) is in accessing the HashMap.  I&apos;m also reasonably confident that the HashMap implementation is efficient enough that adding some windows is not going to drastically alter the big O of the lookup.

When I&apos;m using libraries like GDK, my philosophy is that as much as I can (and it&apos;s not always possible, because documentation or APIs are poorly written) I use them as a black boxes. Thus, even if I opened up the GDK source on my computer and verified that, indeed, it&apos;s not expensive to install 20 global event filters, I would be doing a slight disservice to the users. They might be using some other version of GDK for which this wasn&apos;t the case. This introduces slightly more uncertainty into the approach you are suggesting.

Now, admittedly the danger here is low. A user is not likely to open 20 WebViews with accelerated compositing turned on. On the other hand, why not write more resilient code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726146</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 08:43:11 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 165262 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165262&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:114
&gt; &gt; -    Display* display = GLContextGLX::sharedDisplay();
&gt; &gt; +    Display* display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
&gt; 
&gt; Btw, just curiosity, why is this change required now?

It&apos;s safer to create the window, call XDamageCreate, and install the global event filter into a display that GDK controls and this improves the code in general.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726147</commentid>
    <comment_count>14</comment_count>
      <attachid>165264</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 08:48:16 -0700</bug_when>
    <thetext>Created attachment 165264
Handle another situation where the creation of the RedirectedXCompositeWindow can fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726148</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-22 08:49:08 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; &gt; The damaged region will always be the entire pixmap, so this will bring no benefit at this point.
&gt; &gt; 
&gt; &gt; Why is always the entire pixmap?
&gt; 
&gt; We are using OpenGL in a double-buffered manner, to avoid redraw artifacts. When you update the scene, you must then swap the buffer, which updates the entire window and, in turn, the entire XComposite pixmap.

Ah, understood, thanks.

&gt; &gt; Did you notice performance issues using a global filter per window? The loop is broken as soon as the filter for the window is called because it returns GDK_FILTER_REMOVE, so not all filter callbacks 
&gt; are always called. 
&gt; 
&gt; I&apos;ll break down my reasoning here. The performance implications of installing a single GDK event filter and accessing data from a HashMap is well understood. I have some reasonable confidence that installing a single filter will work well through all versions of GDK. I believe this because there&apos;s no warning in the documentation and I&apos;ve seen other projects install global GDK event filters to accomplish this very task. The only additional complexity of my approach (in the big O sense of the word) is in accessing the HashMap.  I&apos;m also reasonably confident that the HashMap implementation is efficient enough that adding some windows is not going to drastically alter the big O of the lookup.
&gt; 
&gt; When I&apos;m using libraries like GDK, my philosophy is that as much as I can (and it&apos;s not always possible, because documentation or APIs are poorly written) I use them as a black boxes. Thus, even if I opened up the GDK source on my computer and verified that, indeed, it&apos;s not expensive to install 20 global event filters, I would be doing a slight disservice to the users. They might be using some other version of GDK for which this wasn&apos;t the case. This introduces slightly more uncertainty into the approach you are suggesting.
&gt; 
&gt; Now, admittedly the danger here is low. A user is not likely to open 20 WebViews with accelerated compositing turned on. On the other hand, why not write more resilient code?

The idea was to simplify the code and allow to easily remove the filter in the destructor, but the approach of removing the filter when the window hash map is empty is simple enough anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726150</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-22 09:03:12 -0700</bug_when>
    <thetext>(In reply to comment #15)

&gt; The idea was to simplify the code and allow to easily remove the filter in the destructor, but the approach of removing the filter when the window hash map is empty is simple enough anyway.

Okay. Thanks for the reviews. Any other issues with this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726151</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-22 09:12:22 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; 
&gt; &gt; The idea was to simplify the code and allow to easily remove the filter in the destructor, but the approach of removing the filter when the window hash map is empty is simple enough anyway.
&gt; 
&gt; Okay. Thanks for the reviews. Any other issues with this patch?

Nope, patch looks good to me, but Alex was playing with it, so I prefer he gives a final review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728288</commentid>
    <comment_count>18</comment_count>
      <attachid>165264</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-09-26 00:53:02 -0700</bug_when>
    <thetext>Comment on attachment 165264
Handle another situation where the creation of the RedirectedXCompositeWindow can fail

LGTM! Great work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728629</commentid>
    <comment_count>19</comment_count>
      <attachid>165264</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-09-26 09:03:17 -0700</bug_when>
    <thetext>Comment on attachment 165264
Handle another situation where the creation of the RedirectedXCompositeWindow can fail

Landed at http://trac.webkit.org/changeset/129651</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165009</attachid>
            <date>2012-09-20 16:39:52 -0700</date>
            <delta_ts>2012-09-21 12:39:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97267-20120920163917.patch</filename>
            <type>text/plain</type>
            <size>33549</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc3M2FlMmFhOTQzYmNm
MmEzNDVhMzBiZTBlZDAyMzFkMzM2MzAzYy4uMmE1ZjM5MTNkZDM1NjUxZTczNTg5ZWQ4NjllM2I3
YjUzY2RjYTQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTIwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2Ug
WERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgWERhbWFnZSB0byBxdWV1
ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRpcmVjdGluZyBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4gd2luZG93LiBUaGlzIGFsbG93cyByZW1v
dmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9hY2gsIGltcHJvdmVzCisgICAgICAgIHBl
cmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5nIHRoaW5ncyBncmVhdGx5LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCB0aGUgWERhbWFnZSBDRkxBR1MgaW4gdGhlIGFw
cHJvcHJpYXRlIHBsYWNlLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRXaW5kb3dIYXNoTWFwKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJYRGFtYWdlRXZlbnQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUpOiBGYWlsIHRv
IGNyZWF0ZSB0aGUgd2luZG93IGlmCisgICAgICAgIHRoZSBYU2VydmVyIGRvZXNuJ3Qgc3VwcG9y
dCBYRGFtYWdlIGFuZCBYQ29tcG9zaXRlLgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KTogQWRkIFhEYW1hZ2Ug
c3VwcG9ydCBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSBtX3VzYWJsZSBzaXplIGRpc3RpbmN0aW9u
LiBBZGQgdGhlIHdpbmRvdyB0aGUgd2luZG93IEhhc2hNYXAgbm93LgorICAgICAgICAoV2ViQ29y
ZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyk6IFJlbW92ZSB0aGUgd2luZG93CisgICAgICAgIGZyb20gdGhlIHdpbmRvdyBIYXNoTWFwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZSk6IE5v
dyBqdXN0IGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgc2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpzZXREYW1hZ2VO
b3RpZnlDYWxsYmFjayk6IEFkZGVkLgorCiAyMDEyLTA5LTIwICBEYXZpZCBCYXJ0b24gIDxkYmFy
dG9uQG1hdGhzY3JpYmUuY29tPgogCiAgICAgICAgIFtNYXRoTUxdIEluY3JlYXNlIHZpc3VhbCBz
cGFjZSBhcm91bmQgZnJhY3Rpb24gcGFydHMsIGl0YWxpYyB2YXJpYWJsZXMsIGFuZCBvcGVyYXRv
cnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwppbmRleCBjMWFmYTUzZWRjOWI1MGI1MjFmOWQzMGRhMjdhZmFiZjg5
NDRhNjJmLi5jNzlkMzA5NWQ5MjlhZDlkNjJmMjY2YTMwZWMyYzVmMTUwYWE5M2E5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTItMDktMjAgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFVzZSBYRGFtYWdlIHRvIHNp
bXBsaWZ5IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzI2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBYRGFtYWdlIHRvIHF1ZXVlIHJlZHJhd3Mgb2Yg
dGhlIHdpZGdldCB3aGVuIHJlZGlyZWN0aW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCisgICAg
ICAgIHRvIGFuIG9mZnNjcmVlbiB3aW5kb3cuIFRoaXMgYWxsb3dzIHJlbW92aW5nIGEgZmluaWNr
eSB0aW1lci1iYXNlZCBhcHByb2FjaCwgaW1wcm92ZXMKKyAgICAgICAgcGVyZm9ybWFuY2UsIGFu
ZCBhbGxvd3Mgc2ltcGxpZnlpbmcgdGhpbmdzIGdyZWF0bHkuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbTogQWRkIHRoZSBYRGFtYWdlIENGTEFHUyBhbmQgTElCUy4KKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAgICAgICAoQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQpOiBDaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiBjb21w
b3NpdGVMYXllcnNUb0NvbnRleHQKKyAgICAgICAgdG8gYWNjZXB0IGFuIGVudW0gdGhhdCBleHBs
YWlucyB0aGUgY29tcG9zaXRlIHB1cnBvc2UuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnJlZGly
ZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmluaXRpYWxpemUpOiBIYW5kbGUgdGhlIHNpdHVh
dGlvbiB3aGVyZQorICAgICAgICB0aGUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgcmV0dXJu
cyBhIG51bGwgcG9pbnRlci4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OmVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KTogUmVtb3ZlIHRoZSBjb2Rl
IGhhbmRsaW5nCisgICAgICAgIHRoZSB1c2FibGUgc2l6ZSBvZiB0aGUgUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cuIFRoZSB1c2FibGUgc2l6ZSBpcyBub3cgYWx3YXlzIGVxdWFsCisgICAgICAg
IHRvIHRoZSBzaXplLgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KTogV2hlbiBkcmF3aW5nIGZvciBhCisgICAg
ICAgIHJlc2l6ZSwgZmlyc3QgY2xlYXIgdGhlIGVudGlyZSBjb250ZXh0LiBSZW1vdmUgdGhlIGRv
dWJsZSBzd2FwLWJ1ZmZlciwgYXMgaXQncyBubworICAgICAgICBsb25nZXIgbmVjZXNzYXJ5Lgor
ICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIpOiBIYW5kbGUgdGhlIGNhc2UgdGhhdAorICAgICAgICB0aGUgcmVkaXJl
Y3RlZCB3aW5kb3cgaXMgbnVsbC4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6OnJlc2l6ZVJvb3RMYXllcik6IEluc3RlYWQgb2YgZG9pbmcgYW5vdGhlcgor
ICAgICAgICBpbW1lZGlhdGUgbGF5ZXIgZmx1c2gsIGp1c3QgcmVjb21wb3NpdGUgdGhlIGN1cnJl
bnQgbGF5ZXIgc3RhdGUgYW5kIHNjaGVkdWxlIGEgbmV3CisgICAgICAgIGZsdXNoLiBUaGlzIHNo
b3VsZCBtYWtlIHJlc2l6aW5nIGZhc3Rlci4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKTogV2Ugbm8gbG9uZ2VyIG5l
ZWQgdG8KKyAgICAgICAgcXVldWUgYSByZWRyYXcsIHVubGVzcyB3ZSB3YW50IHRvIGZvcmNlIG9u
ZS4KKwogMjAxMi0wOS0xOSAgRGFuaWxvIENlc2FyIExlbWVzIGRlIFBhdWxhICA8ZGFuaWxvLmNl
c2FyQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBbZ3RrXSBhZGQgZW5hYmxlLW1lZGlhLXN0
cmVhbSB0byB3ZWJzZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDg4YTUyYTJmYjJhYjBjZTNhNWM5OTQ1
OWZmMWI0MzhlMTYwMWVjNjguLmQwNWM5YWY5NGNlZTI3NjlkNWNiMDRmNmZhNTQ3MmJjMjQ4OWRj
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wOS0yMCAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNlIFhEYW1hZ2Ug
dG8gc2ltcGxpZnkgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MjY3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFhEYW1hZ2UgdG8gcXVldWUgcmVkcmF3
cyBvZiB0aGUgd2lkZ2V0IHdoZW4gcmVkaXJlY3RpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcK
KyAgICAgICAgdG8gYW4gb2Zmc2NyZWVuIHdpbmRvdy4gVGhpcyBhbGxvd3MgcmVtb3ZpbmcgYSBm
aW5pY2t5IHRpbWVyLWJhc2VkIGFwcHJvYWNoLCBpbXByb3ZlcworICAgICAgICBwZXJmb3JtYW5j
ZSwgYW5kIGFsbG93cyBzaW1wbGlmeWluZyB0aGluZ3MgZ3JlYXRseS4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOiBBZGQgdGhlIFhEYW1hZ2UgQ0ZMQUdTIGFuZCBMSUJTIHRvIHRoZSBhcHBy
b3ByaWF0ZSBwbGFjZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwOgorICAgICAgICAoX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSk6IFJlbW92ZSBy
ZWFkeVRvUmVuZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMgYXMKKyAgICAgICAgaXQn
cyBubyBsb25nZXIgbmVjZXNzYXJ5LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfaW5p
dCk6IEhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdworICAgICAgICBpcyBudWxsLgorICAgICAgICAod2Via2l0V2ViVmlld1JlbmRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKTogRGl0dG8uCisgICAgICAgIChyZXNpemVXZWJLaXRX
ZWJWaWV3QmFzZUZyb21BbGxvY2F0aW9uKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZUNyZWF0ZVdlYlBhZ2UpOiBEaXR0by4KKyAgICAgICAgKHJlZGlyZWN0ZWRXaW5kb3dEYW1h
Z2VkQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
IFJlbW92ZSBJbnZhbGlkYXRlV2lkZ2V0IG1lc3NhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbjogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9X
ZWJQYWdlUHJveHlHdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVy
VHJlZUhvc3RHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0R3RrOjpjb21w
b3NpdGVMYXllcnNUb0NvbnRleHQpOiBObyBsb25nZXIgbmVlZCB0bworICAgICAgICB0cmlnZ2Vy
IHRoZSBpbnZhbGlkYXRlV2luZG93IG1lc3NhZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcDogRGl0dG8uCisKIDIwMTItMDktMTcgIEpvbiBMZWUgIDxq
b25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFNhZmFyaSA2IG5vdGlmaWNhdGlvbnMnIG9uY2xp
Y2sgaGFuZGxlcnMgY2FuJ3QgY2FsbCB3aW5kb3cub3BlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IGNmZDNmOGYxMGVlNjk4MTAzYzNmMGY5NDEyZTk1MDAzNTQ5NzQ3MGUuLjAzMjIxNDdjZmU3
ZDU5MDU0M2M3OTFhYzZjYzVmZjJlYzgxYjRmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC02
OTQsNiArNjk0LDcgQEAgbGliV2ViQ29yZUd0a19sYV9DUFBGTEFHUyA9IFwKIAkkKFNRTElURTNf
Q0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAogCSQoWENPTVBPU0lURV9DRkxBR1MpIFwK
KwkkKFhEQU1BR0VfQ0ZMQUdTKSBcCiAJJChYUkVOREVSX0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdT
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmNwcAppbmRleCAwZDdiZGJhNDM2MDNlMzc5MTU2OTBjNmUxZjli
NDg4ZDMwNGNmM2ZjLi41YWU5YzdiMGY3MmQ1NmUxOGY0YWZhMjIwNTZlMWI1NTI2MzE3NzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdy5jcHAKQEAgLTMxLDI4ICszMSw4OCBAQAogI2luY2x1ZGUgIkdMQ29u
dGV4dEdMWC5oIgogI2luY2x1ZGUgPEdML2dseC5oPgogI2luY2x1ZGUgPFgxMS9leHRlbnNpb25z
L1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YZGFtYWdlLmg+CiAjaW5j
bHVkZSA8Y2Fpcm8teGxpYi5oPgogI2luY2x1ZGUgPGdkay9nZGt4Lmg+CiAjaW5jbHVkZSA8Z2xp
Yi5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYgSGFzaE1hcDxXaW5kb3csIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Kj4gV2luZG93SGFzaE1hcDsKK3N0YXRpYyBXaW5kb3dIYXNoTWFwJiBn
ZXRXaW5kb3dIYXNoTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdpbmRvd0hhc2hN
YXAsIHdpbmRvd0hhc2hNYXAsICgpKTsKKyAgICByZXR1cm4gd2luZG93SGFzaE1hcDsKK30KKwor
c3RhdGljIGludCBnRGFtYWdlRXZlbnRCYXNlOworc3RhdGljIEdka0ZpbHRlclJldHVybiBmaWx0
ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBnZGtYRXZlbnQsIEdka0V2ZW50KiBldmVudCwgdm9p
ZCopCit7CisgICAgWEV2ZW50KiB4RXZlbnQgPSBzdGF0aWNfY2FzdDxYRXZlbnQqPihnZGtYRXZl
bnQpOworICAgIGlmICh4RXZlbnQtPnR5cGUgIT0gZ0RhbWFnZUV2ZW50QmFzZSArIFhEYW1hZ2VO
b3RpZnkpCisgICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworCisgICAgWERhbWFn
ZU5vdGlmeUV2ZW50KiBkYW1hZ2VFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8WERhbWFnZU5vdGlm
eUV2ZW50Kj4oeEV2ZW50KTsKKyAgICBXaW5kb3dIYXNoTWFwJiB3aW5kb3dIYXNoTWFwID0gZ2V0
V2luZG93SGFzaE1hcCgpOworICAgIFdpbmRvd0hhc2hNYXA6Oml0ZXJhdG9yIGkgPSB3aW5kb3dI
YXNoTWFwLmZpbmQoZGFtYWdlRXZlbnQtPmRyYXdhYmxlKTsKKyAgICBpZiAoaSA9PSB3aW5kb3dI
YXNoTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKworICAg
IGktPnNlY29uZC0+Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7CisgICAgWERhbWFnZVN1YnRy
YWN0KEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1h
Z2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1P
VkU7Cit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQorewor
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaGFz
RXh0ZW5zaW9ucyA9IGZhbHNlOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1
cm4gaGFzRXh0ZW5zaW9uczsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGludCBl
cnJvckJhc2U7CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9u
KGRpc3BsYXksICZnRGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW50IGV2ZW50QmFzZTsKKyAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4
dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAw
LjIuCisgICAgaW50IG1ham9yLCBtaW5vcjsKKyAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRp
c3BsYXksICZtYWpvciwgJm1pbm9yKTsKKyAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYg
bWlub3IgPCAyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2RrX3dpbmRvd19hZGRf
ZmlsdGVyKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oZmlsdGVyWERhbWFnZUV2
ZW50KSwgMCk7CisgICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIFBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KHNpemUpKTsKKyAgICByZXR1
cm4gc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93KHNpemUpKSA6IG51bGxwdHI7CiB9CiAKIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiBz
aXplKQotICAgIDogbV91c2FibGVTaXplKHNpemUpCisgICAgOiBtX3NpemUoc2l6ZSkKICAgICAs
IG1fd2luZG93KDApCiAgICAgLCBtX3BhcmVudFdpbmRvdygwKQogICAgICwgbV9waXhtYXAoMCkK
ICAgICAsIG1fc3VyZmFjZSgwKQogICAgICwgbV9wZW5kaW5nUmVzaXplU291cmNlSWQoMCkKICAg
ICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKKyAgICAsIG1fZGFtYWdlKDAp
CisgICAgLCBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKDApCisgICAgLCBtX2RhbWFnZU5vdGlmeURh
dGEoMCkKIHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNw
bGF5KCk7CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCkpOwogCiAgICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBjb2RlIGZy
b20gQ2hyb21pdW06IHNyYy9jb250ZW50L2NvbW1vbi9ncHUvaW1hZ2VfdHJhbnNwb3J0X3N1cmZh
Y2VfbGludXguY2MKICAgICBYU2V0V2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwpA
QCAtODEsNiArMTQxLDggQEAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKICAgICBYTWFwV2luZG93KGRpc3BsYXksIG1f
d2luZG93KTsKIAorICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5kb3csIHRoaXMpOwor
CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgWEV2ZW50IGV2ZW50OwogICAgICAgICBYV2luZG93
RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CkBA
IC04OCw1NCArMTUwLDI4IEBAIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dpbmRvdywgTm9FdmVudE1hc2sp
OwotCiAgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fd2luZG93LCBDb21w
b3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0KLSAgICByZXNpemUoc2l6ZSk7CisgICAgbV9kYW1hZ2Ug
PSBYRGFtYWdlQ3JlYXRlKGRpc3BsYXksIG1fd2luZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkp
OwogfQogCiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93KCkKIHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWRE
aXNwbGF5KCk7Ci0gICAgaWYgKG1fd2luZG93KQotICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNw
bGF5LCBtX3dpbmRvdyk7Ci0gICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICBYRGVzdHJv
eVdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7Ci0gICAgY2xlYW51cFBpeG1hcEFuZFBp
eG1hcFN1cmZhY2UoKTsKLQotICAgIGlmIChtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCkKLSAgICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsKLX0KKyAgICBBU1NF
UlQobV9kYW1hZ2UpOworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgQVNTRVJUKG1fcGFyZW50
V2luZG93KTsKIAotZ2Jvb2xlYW4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZUxh
dGVyQ2FsbGJhY2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqIHdpbmRvdykKLXsKLSAgICB3
aW5kb3ctPnJlc2l6ZUxhdGVyKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQorICAgIGdldFdpbmRv
d0hhc2hNYXAoKS5yZW1vdmUobV93aW5kb3cpOwogCi12b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93OjpyZXNpemVMYXRlcigpCi17Ci0gICAgbV91c2FibGVTaXplID0gbV9zaXplOwotICAg
IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkID0gMDsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RL
X0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgWERhbWFn
ZURlc3Ryb3koZGlzcGxheSwgbV9kYW1hZ2UpOworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXks
IG1fd2luZG93KTsKKyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7
CisgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKIH0KIAogdm9pZCBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAg
Ly8gV2hlbiBlbmxhcmdpbmcgYSByZWRpcmVjdGVkIHdpbmRvdywgZm9yIHRoZSBmaXJzdCByZW5k
ZXIsIHRoZSBuZXdseSBleHBvc2VkIGFyZWFzIHNlZW0KLSAgICAvLyB0byBjb250YWluIHVuaW5p
dGlhbGl6ZWQgbWVtb3J5IG9uIEludGVsIGRyaXZlcnMuIFRvIGF2b2lkIHJlbmRlcmluZyBhcnRp
ZmFjdHMgd2hpbGUKLSAgICAvLyByZXNpemluZywgd2Ugd2FpdCB0byByZW5kZXIgdGhvc2UgbmV3
IGFyZWFzIHVudGlsIGFmdGVyIGEgc2hvcnQgdGltZW91dC4gVGh1cywgdGhlCi0gICAgLy8gInVz
YWJsZSBzaXplIiBvZiB0aGUgd2luZG93IGlzIHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIHNpemUg
b2YgdGhlIHdpbmRvdyBmb3IgdGhlIGZpcnN0Ci0gICAgLy8gcmVuZGVyLgotICAgIG1fdXNhYmxl
U2l6ZSA9IHNpemUuc2hydW5rVG8obV91c2FibGVTaXplKTsKLSAgICBpZiAobV91c2FibGVTaXpl
LndpZHRoKCkgPCBzaXplLndpZHRoKCkgfHwgbV91c2FibGVTaXplLmhlaWdodCgpIDwgc2l6ZS5o
ZWlnaHQoKSkgeyAvLyBUaGUgd2luZG93IGlzIGdyb3dpbmcuCi0gICAgICAgIC8vIFdlJ3JlIGJl
aW5nIHZlcnkgY29uc2VydmF0aXZlIGhlcmUuIEluc3RlYWQgb2Ygcmlza2luZyBkcmF3aW5nIGFy
dGlmYWN0cyB3aGlsZSBkb2luZyBjb250aW51b3VzCi0gICAgICAgIC8vIG9wYXF1ZSByZXNpemlu
Zywgd2UgZXJyIG9uIHRoZSBzaWRlIG9mIGhhdmluZyBtb3JlIHVuZHJhd24gYXJlYXMuCi0gICAg
ICAgIGlmIChtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCkKLSAgICAgICAgICAgIGdfc291cmNlX3Jl
bW92ZShtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCk7Ci0gICAgICAgIG1fcGVuZGluZ1Jlc2l6ZVNv
dXJjZUlkID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihy
ZXNpemVMYXRlckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgRGlzcGxheSogZGlzcGxh
eSA9IEdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSgpOworICAgIERpc3BsYXkqIGRpc3BsYXkg
PSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKICAgICBY
UmVzaXplV2luZG93KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwogCiAgICAgWEZsdXNoKGRpc3BsYXkpOwpAQCAtMjE2LDYgKzI1MiwxMiBAQCBjYWlyb19z
dXJmYWNlX3QqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWlyb1N1cmZhY2VGb3JXaWRn
ZXQoR3RrV2lkZ2V0KiB3aQogICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7CiB9CiAKK3ZvaWQg
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpCit7
CisgICAgaWYgKG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2spCisgICAgICAgIG1fZGFtYWdlTm90aWZ5
Q2FsbGJhY2sobV9kYW1hZ2VOb3RpZnlEYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gVVNFKEdMWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKaW5kZXggZTVkYjBmYTdlOGFk
OWE4MjVlMWI2OWY5ZTYyYWUzNzA3ZTI5ZWZhOS4uODY1YmUzYmNjNGUyNzRiNTBhNmU3OGViZTA1
N2Y4ZmNiOWNmMzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKQEAgLTM1LDYgKzM1LDggQEAKIAogdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7
Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgRGFtYWdlOwordHlwZWRlZiB2b2lkICgqRGFtYWdlTm90
aWZ5Q2FsbGJhY2spKHZvaWQqKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwyNCAr
NDQsMjUgQEAgY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgflJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCk7
Ci0KLSAgICBjb25zdCBJbnRTaXplJiB1c2FibGVTaXplKCkgeyByZXR1cm4gbV91c2FibGVTaXpl
OyB9CiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAg
dm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7CiAgICAgR0xDb250ZXh0KiBjb250
ZXh0KCk7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lk
Z2V0Kik7CiAgICAgV2luZG93IHdpbmRvd0lkKCkgeyByZXR1cm4gbV93aW5kb3c7IH0KKyAgICB2
b2lkIGNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOworCisgICAgdm9pZCBzZXREYW1hZ2VOb3Rp
ZnlDYWxsYmFjayhEYW1hZ2VOb3RpZnlDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkKKyAg
ICB7CisgICAgICAgIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAg
bV9kYW1hZ2VOb3RpZnlEYXRhID0gZGF0YTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYpOwotCi0gICAgc3RhdGljIGdib29s
ZWFuIHJlc2l6ZUxhdGVyQ2FsbGJhY2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqKTsKLSAg
ICB2b2lkIHJlc2l6ZUxhdGVyKCk7CiAgICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3Vy
ZmFjZSgpOwogCiAgICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX3VzYWJsZVNpemU7
CiAgICAgV2luZG93IG1fd2luZG93OwogICAgIFdpbmRvdyBtX3BhcmVudFdpbmRvdzsKICAgICBQ
aXhtYXAgbV9waXhtYXA7CkBAIC02Nyw2ICs3MCwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKICAgICB1bnNpZ25lZCBpbnQgbV9wZW5kaW5nUmVz
aXplU291cmNlSWQ7CiAgICAgYm9vbCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemU7CisKKyAg
ICBEYW1hZ2UgbV9kYW1hZ2U7CisgICAgRGFtYWdlTm90aWZ5Q2FsbGJhY2sgbV9kYW1hZ2VOb3Rp
ZnlDYWxsYmFjazsKKyAgICB2b2lkKiBtX2RhbWFnZU5vdGlmeURhdGE7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRiNmM5YjBiYzRk
MDBiZGZkODQ0MTk2MThiNWEwOGJkNTkxMjBjZDcuLjViZTllYjU0OGVlMDIzZDE0MGEzNWQxNjYy
NDMzZDU4MWJiNzFiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC02Niw2ICs2Niw4
IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9DUFBGCiAJJChMSUJYU0xUX0NGTEFHUykgXAogCSQoU1FM
SVRFM19DRkxBR1MpIFwKIAkkKFVOSUNPREVfQ0ZMQUdTKSBcCisJJChYQ09NUE9TSVRFX0xJQlMp
IFwKKwkkKFhEQU1BR0VfTElCUykgXAogCSQoWFRfQ0ZMQUdTKSBcCiAJJChaTElCX0NGTEFHUykK
IApAQCAtMTAyLDYgKzEwNCw3IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBCiAJJChTUUxJVEUz
X0xJQlMpIFwKIAkkKFVOSUNPREVfTElCUykgXAogCSQoWENPTVBPU0lURV9MSUJTKSBcCisJJChY
REFNQUdFX0xJQlMpIFwKIAkkKFhSRU5ERVJfTElCUykgXAogCSQoWFRfTElCUykgXAogCSQoV0lO
TU1fTElCUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKaW5kZXggNDVlZjQ3MGI2
YTczZGE5NTdiNzljYmU2ZmI0NjcxNWFiMjRlY2FhMi4uOTI2YjIxOWZiOTBlMDA3MDI5OTkxMDYz
ZGNkNGZhOTA3NzUyMDU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCkBAIC02
NCw3ICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRl
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CiAKICAgICB2b2lkIGluaXRp
YWxpemUoKTsKLSAgICB2b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworCisgICAgZW51
bSBDb21wb3NpdGVQdXJwb3NlIHsgRm9yUmVzaXplLCBOb3RGb3JSZXNpemUgfTsKKyAgICB2b2lk
IGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlID0gTm90Rm9yUmVzaXpl
KTsKKwogICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKICAgICBib29sIGZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpOwogICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNjcm9sbE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3Bw
CmluZGV4IDk1ZGE2NDRlMzY4YTFkNzRjMDMxZDE3MjhhNTM2ODdjOGYyMzQyODMuLjQ1MWNhMGY0
ZmJjMDdiYzljZjIxNzhiNDcyNTkwMzljYWYzYmRmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0R0wuY3BwCkBAIC02MywxNyArNjMsMjYgQEAgc3RhdGljIEludFNpemUgZ2V0
V2ViVmlld1NpemUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICByZXR1cm4gSW50U2l6ZShh
bGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CiB9CiAKK3ZvaWQgcmVkaXJlY3Rl
ZFdpbmRvd0RhbWFnZWRDYWxsYmFjayh2b2lkKiBkYXRhKQoreworICAgIGd0a193aWRnZXRfcXVl
dWVfZHJhdyhHVEtfV0lER0VUKGRhdGEpKTsKK30KKwogdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaWYgKG1fcm9vdExheWVyKQogICAgICAg
ICByZXR1cm47CiAKICAgICBJbnRTaXplIHBhZ2VTaXplID0gZ2V0V2ViVmlld1NpemUobV93ZWJW
aWV3KTsKLSAgICBpZiAoIW1fcmVkaXJlY3RlZFdpbmRvdykKKyAgICBpZiAoIW1fcmVkaXJlY3Rl
ZFdpbmRvdykgewogICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3cgPSBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzo6Y3JlYXRlKHBhZ2VTaXplKTsKLSAgICBlbHNlCisgICAgICAgIG1fcmVkaXJl
Y3RlZFdpbmRvdy0+c2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2socmVkaXJlY3RlZFdpbmRvd0RhbWFn
ZWRDYWxsYmFjaywgbV93ZWJWaWV3KTsKKyAgICB9IGVsc2UKICAgICAgICAgbV9yZWRpcmVjdGVk
V2luZG93LT5yZXNpemUocGFnZVNpemUpOwogCisgICAgaWYgKCFtX3JlZGlyZWN0ZWRXaW5kb3cp
CisgICAgICAgIHJldHVybjsKKwogICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKHRoaXMpOwogICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwogICAg
IG1fcm9vdExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKQEAgLTEyMCw3ICsxMjksNyBAQCB2b2lk
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzdG9wQW55UGVuZGluZ0xheWVyRmx1c2go
KQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKCkKIHsKLSAg
ICByZXR1cm4gbV9yb290TGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOworICAgIHJldHVybiBtX3Jl
ZGlyZWN0ZWRXaW5kb3cgJiYgbV9yb290TGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOwogfQogCiBi
b29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRvdyhj
YWlyb190KiBjciwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCkBAIC0xMzAsMTkgKzEzOSw2IEBA
IGJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93
KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIHBhaW50IGEgd2hpdGUgYmFj
a2dyb3VuZCAoaWYgdGhlIFdlYlZpZXcgaXNuJ3QgdHJhbnNwYXJlbnQpLCBiZWNhdXNlIHdoZW4g
Z3Jvd2luZwotICAgIC8vIHRoZSByZWRpcmVjdGVkIHdpbmRvdywgdGhlIHVzYWJsZSBzaXplIG9m
IHRoZSB3aW5kb3cgbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgYWxsb2NhdGlvbiBvZiBvdXIgd2lk
Z2V0LgotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2hvdyBhcnRpZmFjdHMgaW4gdGhhdCBjYXNl
LgotICAgIEludFNpemUgdXNhYmxlV2luZG93U2l6ZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+dXNh
YmxlU2l6ZSgpOwotICAgIGlmICh1c2FibGVXaW5kb3dTaXplICE9IG1fcmVkaXJlY3RlZFdpbmRv
dy0+c2l6ZSgpKSB7Ci0gICAgICAgIGlmICghbV93ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVudCkg
ewotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDEsIDEsIDEpOwotICAgICAg
ICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BF
UkFUT1JfQ0xFQVIpOwotICAgICAgICBjYWlyb19wYWludChjcik7Ci0gICAgfQotCiAgICAgY2Fp
cm9fc3VyZmFjZV90KiB3aW5kb3dTdXJmYWNlID0gbV9yZWRpcmVjdGVkV2luZG93LT5jYWlyb1N1
cmZhY2VGb3JXaWRnZXQoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKICAgICBpZiAoIXdpbmRvd1N1
cmZhY2UpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDcgKzE3Miw3IEBAIEdMQ29udGV4
dCogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnByZXBhcmVGb3JSZW5kZXJpbmcoKQog
ICAgIHJldHVybiBjb250ZXh0OwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0Ojpjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KENvbXBvc2l0ZVB1cnBvc2UgcHVy
cG9zZSkKIHsKICAgICBHTENvbnRleHQqIGNvbnRleHQgPSBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7
CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtMTg1LDIxICsxODEsMTYgQEAgdm9pZCBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCkKICAgICBjb25z
dCBJbnRTaXplJiB3aW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXplKCk7CiAgICAg
Z2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0KCkp
OwogCisgICAgaWYgKHB1cnBvc2UgPT0gRm9yUmVzaXplKSB7CisgICAgICAgIGdsQ2xlYXJDb2xv
cigxLCAxLCAxLCAwKTsKKyAgICAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKyAg
ICB9CisKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKICAgICB0b1RleHR1
cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnBhaW50KCk7CiAgICAgbV90ZXh0dXJl
TWFwcGVyLT5lbmRQYWludGluZygpOwogCiAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLQot
ICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB0aGF0IHdoZW4gdXNpbmcgZG91YmxlLWJ1ZmZlcmluZyAo
YW5kIG9uIHNvbWUgZHJpdmVycyBzaW5nbGUtYnVmZmVyaW5nKQotICAgIC8vIGFuZCBYQ29tcG9z
aXRlIHdpbmRvdyByZWRpcmVjdGlvbiwgdHdvIHN3YXAgYnVmZmVycyBhcmUgcmVxdWlyZWQgdG8g
Zm9yY2UgdGhlIHBpeG1hcAotICAgIC8vIHRvIHVwZGF0ZS4gVGhpcyBpc24ndCBhIHByb2JsZW0g
ZHVyaW5nIGFuaW1hdGlvbnMsIGJlY2F1c2Ugc3dhcEJ1ZmZlciBpcyBjb250aW51b3VzbHkKLSAg
ICAvLyBjYWxsZWQuIEZvciBub24tYW5pbWF0aW9uIHNpdHVhdGlvbnMgd2UgdXNlIHRoaXMgdGVy
cmlibGUgaGFjayB1bnRpbCB3ZSBjYW4gZ2V0IHRvIHRoZQotICAgIC8vIGJvdHRvbSBvZiB0aGUg
aXNzdWUuCi0gICAgaWYgKCF0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpIHsKLSAgICAgICAgY29u
dGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLSAgICAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLSAg
ICB9CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNsZWFyRXZlcnl3
aGVyZSgpCkBAIC0yMzYsNyArMjI3LDggQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGgKICAgICAg
ICAgc3RvcEFueVBlbmRpbmdMYXllckZsdXNoKCk7CiAKICAgICAgICAgLy8gU2hyaW5rIHRoZSBv
ZmZzY3JlZW4gd2luZG93IHRvIHNhdmUgbWVtb3J5IHdoaWxlIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nIGlzIHR1cm5lZCBvZmYuCi0gICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKElu
dFNpemUoMSwgMSkpOworICAgICAgICBpZiAobV9yZWRpcmVjdGVkV2luZG93KQorICAgICAgICAg
ICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUoSW50U2l6ZSgxLCAxKSk7CiAgICAgICAgIG1f
cm9vdExheWVyID0gbnVsbHB0cjsKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
ID0gbnVsbHB0cjsKICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKQEAgLTI0NSw2
ICsyMzcsOSBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFwaAogCiAgICAgLy8gQWRkIHRoZSBhY2Nl
bGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KICAgICBpbml0aWFsaXplKCk7CisgICAgaWYg
KCFtX3JlZGlyZWN0ZWRXaW5kb3cpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOwogCkBAIC0yOTUsNyArMjkw
LDggQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVzaXplUm9vdExheWVy
KGNvbnN0IEludFNpemUmIG5ld1NpemUpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgp
LCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7
CiAKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChJbnRSZWN0KEludFBvaW50KCksIG5ld1NpemUpKTsKLSAgICBmbHVzaEFuZFJlbmRlckxheWVy
cygpOworICAgIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChGb3JSZXNpemUpOworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOwogfQogCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwg
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQpAQCAtMzUxLDE0ICszNDcsMTMgQEAgdm9pZCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hBbmRSZW5kZXJMYXllcnMoKQogICAg
IG1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lKCk7CiAgICAgY29tcG9zaXRlTGF5ZXJzVG9D
b250ZXh0KCk7CiAKLSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChtX3dlYlZp
ZXcpKTsKLQogICAgIC8vIElmIGl0J3MgYmVlbiBhIGxvbmcgdGltZSBzaW5jZSB3ZSd2ZSBhY3R1
YWxseSBwYWludGVkLCB3aGljaCBtZWFucyB0aGF0IGV2ZW50cyBtaWdodAogICAgIC8vIGJlIHN0
YXJ2aW5nIHRoZSBtYWluIGxvb3AsIHdlIHNob3VsZCBmb3JjZSBhIGRyYXcgbm93LiBUaGlzIHNl
ZW1zIHRvIHByZXZlbnQgZGlzcGxheQogICAgIC8vIGxhZyBvbiBodHRwOi8vMjAxMi5iZWVyY2Ft
cC5jb20uCi0gICAgaWYgKG1fcmVkcmF3UGVuZGluZ1RpbWUgJiYgY3VycmVudFRpbWUoKSAtIG1f
cmVkcmF3UGVuZGluZ1RpbWUgPiBnU2NoZWR1bGVEZWxheSkKKyAgICBpZiAobV9yZWRyYXdQZW5k
aW5nVGltZSAmJiBjdXJyZW50VGltZSgpIC0gbV9yZWRyYXdQZW5kaW5nVGltZSA+IGdTY2hlZHVs
ZURlbGF5KSB7CisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKG1fd2Vi
VmlldykpOwogICAgICAgICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyhndGtfd2lkZ2V0X2dl
dF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKSwgRkFMU0UpOwotICAgIGVsc2UgaWYgKCFt
X3JlZHJhd1BlbmRpbmdUaW1lKQorICAgIH0gZWxzZSBpZiAoIW1fcmVkcmF3UGVuZGluZ1RpbWUp
CiAgICAgICAgIG1fcmVkcmF3UGVuZGluZ1RpbWUgPSBjdXJyZW50VGltZSgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCmluZGV4IGJhMGFjNjk1NTMwMTY4NTQyMzE3M2VhYzg5OTdkY2RmOGM1ZDNm
YTkuLmIxYTlmNmQyZDM2ZGUwMDhiMDA2Zjc0NTE0YjllOTZkNjI4OTI2MWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCkBAIC0xMDksNiArMTA5LDcgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQ
SV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9DUFAKIAkk
KExJQlNPVVBfQ0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAogCSQoWENPTVBPU0lURV9D
RkxBR1MpIFwKKwkkKFhEQU1BR0VfQ0ZMQUdTKSBcCiAJJChYVF9DRkxBR1MpCiAKIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfQ1hYRkxBR1MgPSBcCkBAIC0xODIsNiArMTgzLDcgQEAgbGlid2Via2l0Mmd0
a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQF9sYV9MSUIKIAkkKFVOSUNPREVfTElCUykgXAogCSQoWFJFTkRFUl9MSUJTKSBcCiAJJChY
Q09NUE9TSVRFX0xJQlMpIFwKKwkkKFhEQU1BR0VfTElCUykgXAogCSQoWFRfTElCUykgXAogCSQo
WkxJQl9MSUJTKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggMjNiMDJmNjQ5ZmQxYTNjZWFlYTI0NTkwZTAz
MmYxMDJkODExN2FmNy4uNGU1MTViZGUyZThmZjkwOWYxMDM1YzI5N2FlMTgzNDFmZjBiNjZmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcApAQCAtNzUsNiArNzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKIHR5cGVkZWYgSGFzaE1hcDxHdGtXaWRnZXQqLCBJbnRSZWN0PiBXZWJLaXRXZWJWaWV3Q2hp
bGRyZW5NYXA7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIHJlZGlyZWN0ZWRX
aW5kb3dEYW1hZ2VkQ2FsbGJhY2sodm9pZCogZGF0YSk7CisjZW5kaWYKKwogc3RydWN0IF9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcCBjaGls
ZHJlbjsKICAgICBPd25QdHI8UGFnZUNsaWVudEltcGw+IHBhZ2VDbGllbnQ7CkBAIC0xMDIsNyAr
MTA2LDYgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogCiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQogICAgIE93blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4g
cmVkaXJlY3RlZFdpbmRvdzsKLSAgICBib29sIHJlYWR5VG9SZW5kZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nUmVzdWx0czsKICNlbmRpZgogfTsKIApAQCAtMjgwLDcgKzI4Myw4IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdl
YlZpZXdCYXNlKQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIHByaXYtPnJlZGly
ZWN0ZWRXaW5kb3cgPSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKEludFNpemUo
MSwgMSkpOwotICAgIHByaXYtPnJlYWR5VG9SZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVz
dWx0cyA9IGZhbHNlOworICAgIGlmIChwcml2LT5yZWRpcmVjdGVkV2luZG93KQorICAgICAgICBw
cml2LT5yZWRpcmVjdGVkV2luZG93LT5zZXREYW1hZ2VOb3RpZnlDYWxsYmFjayhyZWRpcmVjdGVk
V2luZG93RGFtYWdlZENhbGxiYWNrLCB3ZWJraXRXZWJWaWV3QmFzZSk7CiAjZW5kaWYKIH0KIApA
QCAtMjkzLDEwICsyOTcsOSBAQCBzdGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3UmVuZGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMoV2ViS2l0V2ViVmlld0Jhc2UqCiAgICAgLy8gVG8gYXZv
aWQgZmxhc2hlcyB3aGVuIGluaXRpYWxpemluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBmb3Ig
dGhlIGZpcnN0CiAgICAgLy8gdGltZSwgd2Ugd2FpdCB1bnRpbCB3ZSBrbm93IHRoZXJlJ3MgYSBm
cmFtZSByZWFkeSBiZWZvcmUgcmVuZGVyaW5nLgogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwotICAgIGlmICghcHJpdi0+cmVhZHlUb1JlbmRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKQorICAgIGlmICghcHJpdi0+cmVkaXJlY3Rl
ZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKHByaXYtPnJlZGly
ZWN0ZWRXaW5kb3cpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgY2xpcFJlY3QtPngsIGNsaXBS
ZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5oZWlnaHQpOwogICAgIGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSA9IHByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPmNhaXJvU3VyZmFjZUZv
cldpZGdldChHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKGNyLCBzdXJmYWNlLCAwLCAwKTsKQEAgLTM1OSw3ICszNjIsNyBAQCBzdGF0aWMgdm9p
ZCByZXNpemVXZWJLaXRXZWJWaWV3QmFzZUZyb21BbGxvY2F0aW9uKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZQogICAgIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICBp
ZiAoc2l6ZUNoYW5nZWQpCisgICAgaWYgKHNpemVDaGFuZ2VkICYmIHdlYlZpZXdCYXNlLT5wcml2
LT5yZWRpcmVjdGVkV2luZG93KQogICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cmVkaXJlY3Rl
ZFdpbmRvdy0+cmVzaXplKHZpZXdSZWN0LnNpemUoKSk7CiAjZW5kaWYKIApAQCAtNzE4LDcgKzcy
MSw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJraXRXZWJWaWV3QmFzZSwgV0tDb250CiAjZW5kaWYKIAogI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKLSAgICBwcml2LT5wYWdlUHJveHktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdXaW5kb3dJZChwcml2LT5yZWRpcmVjdGVkV2luZG93LT53aW5kb3dJZCgpKTsKKyAgICBpZiAo
cHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKKyAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQocHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+d2luZG93
SWQoKSk7CiAjZW5kaWYKIH0KIApAQCAtODQ1LDM2ICs4NDksOCBAQCBHZGtFdmVudCogd2Via2l0
V2ViVmlld0Jhc2VUYWtlQ29udGV4dE1lbnVFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0
V2ViVmlldwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotc3RhdGljIGdib29sZWFu
IHF1ZXVlQW5vdGhlckRyYXdPZkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKGdwb2ludGVy
KiB3ZWJWaWV3QmFzZVBvaW50ZXIpCit2b2lkIHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJh
Y2sodm9pZCogZGF0YSkKIHsKLSAgICAvLyBUaGUgV2ViVmlld0Jhc2UgbWF5IGhhdmUgYmVlbiBk
ZXN0cm95ZWQgaW4gdGhlIHRpbWUgc2luY2Ugd2UgcXVldWVkIHRoaXMKLSAgICAvLyBkcmF3IGFu
ZCB0aGUgdGltZSB3ZSBhcmUgYWN0dWFsbHkgZXhlY3V0aW5nLgotICAgIGlmICghKndlYlZpZXdC
YXNlUG9pbnRlcikgewotICAgICAgICBmYXN0RnJlZSh3ZWJWaWV3QmFzZVBvaW50ZXIpOwotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UoKndlYlZpZXdCYXNlUG9pbnRlcik7Ci0gICAg
Z3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKLSAgICB3ZWJW
aWV3QmFzZS0+cHJpdi0+cmVhZHlUb1JlbmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRz
ID0gdHJ1ZTsKLQotICAgIGdfb2JqZWN0X3JlbW92ZV93ZWFrX3BvaW50ZXIoR19PQkpFQ1Qod2Vi
Vmlld0Jhc2UpLCB3ZWJWaWV3QmFzZVBvaW50ZXIpOwotICAgIGZhc3RGcmVlKHdlYlZpZXdCYXNl
UG9pbnRlcik7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXZvaWQgd2Via2l0V2ViVmlld0Jh
c2VRdWV1ZURyYXdPZkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJWaWV3QmFzZSkKLXsKLSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdF
VCh3ZWJWaWV3QmFzZSkpOwotCi0gICAgLy8gUmVkcmF3IGFnYWluLCBvbmUgZnJhbWUgbGF0ZXIs
IGFzIGl0IG1pZ2h0IHRha2Ugc29tZSB0aW1lIGZvciB0aGUgbmV3IEdMIGZyYW1lIHRvIGJlIGF2
YWlsYWJsZS4KLSAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBkaXNwbGF5IGZyb20gYWx3YXlzIGJl
aW5nIG9uZSBmcmFtZSBiZWhpbmQgaW4gdGhlIGNhc2UgR0wgaGFzbid0IHlldCBmaW5pc2hlZAot
ICAgIC8vIHJlbmRlcmluZyB0byB0aGUgd2luZG93LgotICAgIC8vIFRPRE86IEFkZCBYRGFtYWdl
IHN1cHBvcnQgdG8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgdG8gYWNjb21wbGlzaCB0aGlz
LgotICAgIGdwb2ludGVyKiB3ZWJWaWV3QmFzZVBvaW50ZXIgPSBzdGF0aWNfY2FzdDxncG9pbnRl
cio+KGZhc3RNYWxsb2Moc2l6ZW9mKGdwb2ludGVyKSkpOwotICAgIGdfb2JqZWN0X2FkZF93ZWFr
X3BvaW50ZXIoR19PQkpFQ1Qod2ViVmlld0Jhc2UpLCB3ZWJWaWV3QmFzZVBvaW50ZXIpOwotICAg
ICp3ZWJWaWV3QmFzZVBvaW50ZXIgPSB3ZWJWaWV3QmFzZTsKLSAgICBnX3RpbWVvdXRfYWRkKDEw
MDAgLyA2MCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVldWVBbm90aGVyRHJhd09m
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMpLCB3ZWJWaWV3QmFzZVBvaW50ZXIpOworICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKGRhdGEpKTsKIH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDI4YzVkYTkwYWUxMDk0MjZm
ZjdjOWU2ZWEzNDNkZjBiNjI5ZDcyNWIuLjE1M2M0ZTM2Y2Y4YzdlZDhjZmE2Zjg3ZWRkZTAwYWU2
NjQ4ZDI5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTcx
NSw3ICs3MTUsNiBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJZCh1
aW50NjRfdCBuYXRpdmVXaW5kb3dJZCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlV2lkZ2V0KCk7CiAj
ZW5kaWYKIAogICAgIHZvaWQgc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhib29sIGZsYWcp
IHsgbV9zdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzID0gZmxhZzsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYTRhM2M1N2Jm
MmM5OTIyYTFmZTRlOWY5YjNmNDEzZDNlNzU2NzQzZC4uYzU0MWQyYzE0NDAzZGJmYmI1YzQxYjRk
NTc3Zjg0ZGE0ZGM0MjM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xNzcsMTAgKzE3Nyw2IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2VQcm94eSB7CiAgICAgQmluZEFjY2Vzc2liaWxpdHlUcmVlKFdURjo6U3RyaW5nIHBsdWdJ
RCkKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
Ci0gICAgSW52YWxpZGF0ZVdpZGdldCgpCi0jZW5kaWYKLQogICAgICMgQmFja0ZvcndhcmQgbWVz
c2FnZXMKICAgICBCYWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIEJhY2tG
b3J3YXJkR29Ub0l0ZW0odWludDY0X3QgaXRlbUlEKSAtPiAoV2ViS2l0OjpTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCA4MDg4MWJmZTcwYjlhM2Qx
MGQ1YjQyY2M1MDcxODVhMjIzNjdlNzgyLi42YjAxYmIwMjc4MDIxNWZkNDgzMGIzMzE0ODg2ZDU5
ZjdlYmZlYzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBh
Z2VQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdl
UHJveHlHdGsuY3BwCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQodWludDY0X3QgbmF0aXZlV2luZG93SWQpCiB7
CiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nV2luZG93SWQobmF0aXZlV2luZG93SWQpLCBtX3BhZ2VJRCk7CiB9Ci0KLXZvaWQg
V2ViUGFnZVByb3h5OjppbnZhbGlkYXRlV2lkZ2V0KCkKLXsKLSAgICB3ZWJraXRXZWJWaWV3QmFz
ZVF1ZXVlRHJhd09mQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMoV0VCS0lUX1dFQl9WSUVX
X0JBU0Uoc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEltcGwqPihtX3BhZ2VDbGllbnQpLT52aWV3V2lk
Z2V0KCkpKTsKLX0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDc3NWI4MjcwYTljMGUwNzQ5
YTNlMzI3MTAzNTJiYTZlZmE4Yjc3ZWIuLjUyMzcxMjQyY2I5ZGI3Njg2MWZlMzkyZmE4Mjk0MDgw
NjVjNWJjYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aApAQCAtNDU5LDcgKzQ1OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3Nl
ZEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpOwogI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJ
ZChpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZSk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlV2lkZ2V0
KCk7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcAppbmRleCAwOThhNGM3MTYz
OGM5ZTc1M2E0NzE1Y2FhMjUwMjg4OWUxNTJlMWUzLi5iY2IyYmVmZGUzNGZhMDBmZmI2ZTRlNmZl
YjA2MTYwZTk1YjZlOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTMxNyw3ICszMTcsNiBA
QCB2b2lkIExheWVyVHJlZUhvc3RHdGs6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3Np
dGVQdXJwb3NlIHB1cnBvc2UpCiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwog
CiAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLSAgICBtX3dlYlBhZ2UtPmludmFsaWRhdGVX
aWRnZXQoKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0R3RrOjpmbHVzaEFuZFJlbmRlckxheWVy
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQ
YWdlR3RrLmNwcAppbmRleCBkOWRkZTgxYTI1ZGI3NDQyNjZhNWU2N2E4ZmE5YmE2OTlhMGFmZDVh
Li5lMjhlNzRmMzk5OWJkODMxYTNiOGE4MDYwMDU2ZGExOGRlZjllMjUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKQEAg
LTE2MCwxMSArMTYwLDYgQEAgdm9pZCBXZWJQYWdlOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
V2luZG93SWQoaW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUpCiB7CiAgICAgbV9uYXRpdmVXaW5k
b3dIYW5kbGUgPSBuYXRpdmVXaW5kb3dIYW5kbGU7CiB9Ci0KLXZvaWQgV2ViUGFnZTo6aW52YWxp
ZGF0ZVdpZGdldCgpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnZhbGlk
YXRlV2lkZ2V0KCkpOwotfQogI2VuZGlmCiAKIGJvb2wgV2ViUGFnZTo6aGFuZGxlTW91c2VQcmVz
c2VkRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdXNlRXZlbnQpCmRp
ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZGY3NDQ3M2YwMmU1MjhiNDEw
Y2IyNjIyOTU5OTliMjU5YzIyMTFkZS4uMDZiNzg3NzQ0M2VhN2E5OWM4MzIzNGQxOGY2NTVmMjA3
YTM4MjlmZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDEyLTA5LTIwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBVc2UgWERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTcyNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVc2UgWERhbWFnZSB0byBxdWV1ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRp
cmVjdGluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4g
d2luZG93LiBUaGlzIGFsbG93cyByZW1vdmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9h
Y2gsIGltcHJvdmVzCisgICAgICAgIHBlcmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5n
IHRoaW5ncyBncmVhdGx5LgorCisgICAgICAgICogY29uZmlndXJlLmFjOiBBZGQgc3VwcG9ydCBm
b3IgZmluZGluZyBYRGFtYWdlIHZpYSBwa2ctY29uZmlnLgorCiAyMDEyLTA5LTIwICBTaW1vbiBI
YXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIFF0V2Vi
S2l0IG1vZHVsZSBoZWFkZXIgaW5jbHVkZXMgcHJpdmF0ZSBkZXBlbmRlbmNpZXMKZGlmZiAtLWdp
dCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmMDE5NmU5MmJmYjgzMzk3Y2Nh
OTk2N2I2ZDczMDdhYzhkYTQ2MWZmLi5jOGYxMTBkYzE0MDQzNTliYzM3YmIyZjZjYzBmNmIxNGVh
OTZkMDA2IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC01
NjcsOCArNTY3LDExIEBAIEFDX01TR19SRVNVTFQoWyR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5k
XSkKIAogaWYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9wZW5nbCI7IHRo
ZW4KICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4Y29tcG9zaXRlXSk7Cisg
ICAgUEtHX0NIRUNLX01PRFVMRVMoW1hEQU1BR0VdLCBbeGRhbWFnZV0pOwogICAgIEFDX1NVQlNU
KFhDT01QT1NJVEVfQ0ZMQUdTKQogICAgIEFDX1NVQlNUKFhDT01QT1NJVEVfTElCUykKKyAgICBB
Q19TVUJTVChYREFNQUdFX0NGTEFHUykKKyAgICBBQ19TVUJTVChYREFNQUdFX0xJQlMpCiBmaQog
CiAjIE9wZW5HTCBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdCAoYWxvbmcgd2l0aCBXZWJHTCBhbmQg
YWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcpLCBidXQgaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165174</attachid>
            <date>2012-09-21 12:39:54 -0700</date>
            <delta_ts>2012-09-22 08:28:10 -0700</delta_ts>
            <desc>Rebased on top of trunk</desc>
            <filename>bug-97267-20120921123917.patch</filename>
            <type>text/plain</type>
            <size>33551</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAwNjNmMzliYTBiMTBh
NDZlMTAzYzNkMDQ4NzMwY2Y5YTk2NWMyMC4uM2MwMWNmNDg3NDIyMjYwZmM4NGY2ZmRkZWU1Zjlh
ZWYzZjMzYjRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTIwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2Ug
WERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgWERhbWFnZSB0byBxdWV1
ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRpcmVjdGluZyBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4gd2luZG93LiBUaGlzIGFsbG93cyByZW1v
dmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9hY2gsIGltcHJvdmVzCisgICAgICAgIHBl
cmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5nIHRoaW5ncyBncmVhdGx5LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCB0aGUgWERhbWFnZSBDRkxBR1MgaW4gdGhlIGFw
cHJvcHJpYXRlIHBsYWNlLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRXaW5kb3dIYXNoTWFwKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJYRGFtYWdlRXZlbnQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUpOiBGYWlsIHRv
IGNyZWF0ZSB0aGUgd2luZG93IGlmCisgICAgICAgIHRoZSBYU2VydmVyIGRvZXNuJ3Qgc3VwcG9y
dCBYRGFtYWdlIGFuZCBYQ29tcG9zaXRlLgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KTogQWRkIFhEYW1hZ2Ug
c3VwcG9ydCBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSBtX3VzYWJsZSBzaXplIGRpc3RpbmN0aW9u
LiBBZGQgdGhlIHdpbmRvdyB0aGUgd2luZG93IEhhc2hNYXAgbm93LgorICAgICAgICAoV2ViQ29y
ZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyk6IFJlbW92ZSB0aGUgd2luZG93CisgICAgICAgIGZyb20gdGhlIHdpbmRvdyBIYXNoTWFwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZSk6IE5v
dyBqdXN0IGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgc2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpzZXREYW1hZ2VO
b3RpZnlDYWxsYmFjayk6IEFkZGVkLgorCiAyMDEyLTA5LTIxICBKb25hdGhhbiBEb25nICA8am9u
YXRoYW4uZG9uZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEhU
TUw1IG1lZGlhIGRvZXMgbm90IGhhbmRsZSBTU0wgY2VydGlmaWNhdGUgZmFpbHVyZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwppbmRleCBjMWFmYTUzZWRjOWI1MGI1MjFmOWQzMGRhMjdhZmFiZjg5NDRhNjJmLi5j
NzlkMzA5NWQ5MjlhZDlkNjJmMjY2YTMwZWMyYzVmMTUwYWE5M2E5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzcgQEAKKzIwMTItMDktMjAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNv
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFVzZSBYRGFtYWdlIHRvIHNpbXBsaWZ5IFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NzI2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVzZSBYRGFtYWdlIHRvIHF1ZXVlIHJlZHJhd3Mgb2YgdGhlIHdpZGdl
dCB3aGVuIHJlZGlyZWN0aW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCisgICAgICAgIHRvIGFu
IG9mZnNjcmVlbiB3aW5kb3cuIFRoaXMgYWxsb3dzIHJlbW92aW5nIGEgZmluaWNreSB0aW1lci1i
YXNlZCBhcHByb2FjaCwgaW1wcm92ZXMKKyAgICAgICAgcGVyZm9ybWFuY2UsIGFuZCBhbGxvd3Mg
c2ltcGxpZnlpbmcgdGhpbmdzIGdyZWF0bHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
QWRkIHRoZSBYRGFtYWdlIENGTEFHUyBhbmQgTElCUy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAgICAgICAoQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQpOiBDaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiBjb21wb3NpdGVMYXll
cnNUb0NvbnRleHQKKyAgICAgICAgdG8gYWNjZXB0IGFuIGVudW0gdGhhdCBleHBsYWlucyB0aGUg
Y29tcG9zaXRlIHB1cnBvc2UuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHRHTC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnJlZGlyZWN0ZWRXaW5k
b3dEYW1hZ2VkQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OmluaXRpYWxpemUpOiBIYW5kbGUgdGhlIHNpdHVhdGlvbiB3aGVy
ZQorICAgICAgICB0aGUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgcmV0dXJucyBhIG51bGwg
cG9pbnRlci4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OmVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KTogUmVtb3ZlIHRoZSBjb2RlIGhhbmRsaW5n
CisgICAgICAgIHRoZSB1c2FibGUgc2l6ZSBvZiB0aGUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuIFRoZSB1c2FibGUgc2l6ZSBpcyBub3cgYWx3YXlzIGVxdWFsCisgICAgICAgIHRvIHRoZSBz
aXplLgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Y29t
cG9zaXRlTGF5ZXJzVG9Db250ZXh0KTogV2hlbiBkcmF3aW5nIGZvciBhCisgICAgICAgIHJlc2l6
ZSwgZmlyc3QgY2xlYXIgdGhlIGVudGlyZSBjb250ZXh0LiBSZW1vdmUgdGhlIGRvdWJsZSBzd2Fw
LWJ1ZmZlciwgYXMgaXQncyBubworICAgICAgICBsb25nZXIgbmVjZXNzYXJ5LgorICAgICAgICAo
V2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIpOiBIYW5kbGUgdGhlIGNhc2UgdGhhdAorICAgICAgICB0aGUgcmVkaXJlY3RlZCB3aW5k
b3cgaXMgbnVsbC4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OnJlc2l6ZVJvb3RMYXllcik6IEluc3RlYWQgb2YgZG9pbmcgYW5vdGhlcgorICAgICAgICBp
bW1lZGlhdGUgbGF5ZXIgZmx1c2gsIGp1c3QgcmVjb21wb3NpdGUgdGhlIGN1cnJlbnQgbGF5ZXIg
c3RhdGUgYW5kIHNjaGVkdWxlIGEgbmV3CisgICAgICAgIGZsdXNoLiBUaGlzIHNob3VsZCBtYWtl
IHJlc2l6aW5nIGZhc3Rlci4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdG8KKyAg
ICAgICAgcXVldWUgYSByZWRyYXcsIHVubGVzcyB3ZSB3YW50IHRvIGZvcmNlIG9uZS4KKwogMjAx
Mi0wOS0xOSAgRGFuaWxvIENlc2FyIExlbWVzIGRlIFBhdWxhICA8ZGFuaWxvLmNlc2FyQGNvbGxh
Ym9yYS5jby51az4KIAogICAgICAgICBbZ3RrXSBhZGQgZW5hYmxlLW1lZGlhLXN0cmVhbSB0byB3
ZWJzZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDQxOGE1ZDUxYmYwMDVlODk3ZGM3ZmI4NGZmYTk5OTk3
YzJkNmExYmQuLjUzYTYyNzY5MzBhNTE5NGQzN2M3ZWY0YTdkZmM0ZWE4N2EwZmE4ZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wOS0yMCAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNlIFhEYW1hZ2UgdG8gc2ltcGxp
ZnkgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIFhEYW1hZ2UgdG8gcXVldWUgcmVkcmF3cyBvZiB0aGUg
d2lkZ2V0IHdoZW4gcmVkaXJlY3RpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKKyAgICAgICAg
dG8gYW4gb2Zmc2NyZWVuIHdpbmRvdy4gVGhpcyBhbGxvd3MgcmVtb3ZpbmcgYSBmaW5pY2t5IHRp
bWVyLWJhc2VkIGFwcHJvYWNoLCBpbXByb3ZlcworICAgICAgICBwZXJmb3JtYW5jZSwgYW5kIGFs
bG93cyBzaW1wbGlmeWluZyB0aGluZ3MgZ3JlYXRseS4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBBZGQgdGhlIFhEYW1hZ2UgQ0ZMQUdTIGFuZCBMSUJTIHRvIHRoZSBhcHByb3ByaWF0ZSBw
bGFjZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3Bw
OgorICAgICAgICAoX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSk6IFJlbW92ZSByZWFkeVRvUmVu
ZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMgYXMKKyAgICAgICAgaXQncyBubyBsb25n
ZXIgbmVjZXNzYXJ5LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdCk6IEhhbmRs
ZSB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdworICAg
ICAgICBpcyBudWxsLgorICAgICAgICAod2Via2l0V2ViVmlld1JlbmRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSZXN1bHRzKTogRGl0dG8uCisgICAgICAgIChyZXNpemVXZWJLaXRXZWJWaWV3QmFz
ZUZyb21BbGxvY2F0aW9uKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0
ZVdlYlBhZ2UpOiBEaXR0by4KKyAgICAgICAgKHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJh
Y2spOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6IFJlbW92ZSBJ
bnZhbGlkYXRlV2lkZ2V0IG1lc3NhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbjogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJv
eHlHdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RH
dGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0R3RrOjpjb21wb3NpdGVMYXll
cnNUb0NvbnRleHQpOiBObyBsb25nZXIgbmVlZCB0bworICAgICAgICB0cmlnZ2VyIHRoZSBpbnZh
bGlkYXRlV2luZG93IG1lc3NhZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlR3RrLmNwcDogRGl0dG8uCisKIDIwMTItMDktMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEltcGxlbWVudCBWaWV3U3Rh
dGUgbWV0aG9kcyBpbiBQYWdlQ2xpZW50SW1wbCBpbiBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CmluZGV4IGNmZDNmOGYxMGVlNjk4MTAzYzNmMGY5NDEyZTk1MDAzNTQ5NzQ3MGUuLjAzMjIxNDdj
ZmU3ZDU5MDU0M2M3OTFhYzZjYzVmZjJlYzgxYjRmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBA
IC02OTQsNiArNjk0LDcgQEAgbGliV2ViQ29yZUd0a19sYV9DUFBGTEFHUyA9IFwKIAkkKFNRTElU
RTNfQ0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAogCSQoWENPTVBPU0lURV9DRkxBR1Mp
IFwKKwkkKFhEQU1BR0VfQ0ZMQUdTKSBcCiAJJChYUkVOREVSX0NGTEFHUykgXAogCSQoWFRfQ0ZM
QUdTKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcAppbmRleCAwZDdiZGJhNDM2MDNlMzc5MTU2OTBjNmUx
ZjliNDg4ZDMwNGNmM2ZjLi41YWU5YzdiMGY3MmQ1NmUxOGY0YWZhMjIwNTZlMWI1NTI2MzE3NzZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKQEAgLTMxLDI4ICszMSw4OCBAQAogI2luY2x1ZGUgIkdM
Q29udGV4dEdMWC5oIgogI2luY2x1ZGUgPEdML2dseC5oPgogI2luY2x1ZGUgPFgxMS9leHRlbnNp
b25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YZGFtYWdlLmg+CiAj
aW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgogI2luY2x1ZGUgPGdkay9nZGt4Lmg+CiAjaW5jbHVkZSA8
Z2xpYi5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYgSGFzaE1hcDxXaW5kb3csIFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93Kj4gV2luZG93SGFzaE1hcDsKK3N0YXRpYyBXaW5kb3dIYXNoTWFw
JiBnZXRXaW5kb3dIYXNoTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdpbmRvd0hh
c2hNYXAsIHdpbmRvd0hhc2hNYXAsICgpKTsKKyAgICByZXR1cm4gd2luZG93SGFzaE1hcDsKK30K
Kworc3RhdGljIGludCBnRGFtYWdlRXZlbnRCYXNlOworc3RhdGljIEdka0ZpbHRlclJldHVybiBm
aWx0ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBnZGtYRXZlbnQsIEdka0V2ZW50KiBldmVudCwg
dm9pZCopCit7CisgICAgWEV2ZW50KiB4RXZlbnQgPSBzdGF0aWNfY2FzdDxYRXZlbnQqPihnZGtY
RXZlbnQpOworICAgIGlmICh4RXZlbnQtPnR5cGUgIT0gZ0RhbWFnZUV2ZW50QmFzZSArIFhEYW1h
Z2VOb3RpZnkpCisgICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworCisgICAgWERh
bWFnZU5vdGlmeUV2ZW50KiBkYW1hZ2VFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8WERhbWFnZU5v
dGlmeUV2ZW50Kj4oeEV2ZW50KTsKKyAgICBXaW5kb3dIYXNoTWFwJiB3aW5kb3dIYXNoTWFwID0g
Z2V0V2luZG93SGFzaE1hcCgpOworICAgIFdpbmRvd0hhc2hNYXA6Oml0ZXJhdG9yIGkgPSB3aW5k
b3dIYXNoTWFwLmZpbmQoZGFtYWdlRXZlbnQtPmRyYXdhYmxlKTsKKyAgICBpZiAoaSA9PSB3aW5k
b3dIYXNoTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKwor
ICAgIGktPnNlY29uZC0+Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7CisgICAgWERhbWFnZVN1
YnRyYWN0KEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBk
YW1hZ2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9S
RU1PVkU7Cit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQor
eworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wg
aGFzRXh0ZW5zaW9ucyA9IGZhbHNlOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICBy
ZXR1cm4gaGFzRXh0ZW5zaW9uczsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlu
dCBlcnJvckJhc2U7CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZ
KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5z
aW9uKGRpc3BsYXksICZnRGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGV2ZW50QmFzZTsKKyAgICBpZiAoIVhDb21wb3NpdGVRdWVy
eUV4dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lv
biAwLjIuCisgICAgaW50IG1ham9yLCBtaW5vcjsKKyAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9u
KGRpc3BsYXksICZtYWpvciwgJm1pbm9yKTsKKyAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3Ig
JiYgbWlub3IgPCAyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2RrX3dpbmRvd19h
ZGRfZmlsdGVyKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oZmlsdGVyWERhbWFn
ZUV2ZW50KSwgMCk7CisgICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIFBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KHNpemUpKTsKKyAgICBy
ZXR1cm4gc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93KHNpemUpKSA6IG51bGxwdHI7CiB9CiAKIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXpl
JiBzaXplKQotICAgIDogbV91c2FibGVTaXplKHNpemUpCisgICAgOiBtX3NpemUoc2l6ZSkKICAg
ICAsIG1fd2luZG93KDApCiAgICAgLCBtX3BhcmVudFdpbmRvdygwKQogICAgICwgbV9waXhtYXAo
MCkKICAgICAsIG1fc3VyZmFjZSgwKQogICAgICwgbV9wZW5kaW5nUmVzaXplU291cmNlSWQoMCkK
ICAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKKyAgICAsIG1fZGFtYWdl
KDApCisgICAgLCBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKDApCisgICAgLCBtX2RhbWFnZU5vdGlm
eURhdGEoMCkKIHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWRE
aXNwbGF5KCk7CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwogCiAgICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBjb2Rl
IGZyb20gQ2hyb21pdW06IHNyYy9jb250ZW50L2NvbW1vbi9ncHUvaW1hZ2VfdHJhbnNwb3J0X3N1
cmZhY2VfbGludXguY2MKICAgICBYU2V0V2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVz
OwpAQCAtODEsNiArMTQxLDggQEAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKICAgICBYTWFwV2luZG93KGRpc3BsYXks
IG1fd2luZG93KTsKIAorICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5kb3csIHRoaXMp
OworCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgWEV2ZW50IGV2ZW50OwogICAgICAgICBYV2lu
ZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7
CkBAIC04OCw1NCArMTUwLDI4IEBAIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dpbmRvdywgTm9FdmVudE1h
c2spOwotCiAgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fd2luZG93LCBD
b21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0KLSAgICByZXNpemUoc2l6ZSk7CisgICAgbV9kYW1h
Z2UgPSBYRGFtYWdlQ3JlYXRlKGRpc3BsYXksIG1fd2luZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1w
dHkpOwogfQogCiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93KCkKIHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFy
ZWREaXNwbGF5KCk7Ci0gICAgaWYgKG1fd2luZG93KQotICAgICAgICBYRGVzdHJveVdpbmRvdyhk
aXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICBYRGVz
dHJveVdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7Ci0gICAgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKLQotICAgIGlmIChtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCkKLSAg
ICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsKLX0KKyAgICBB
U1NFUlQobV9kYW1hZ2UpOworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgQVNTRVJUKG1fcGFy
ZW50V2luZG93KTsKIAotZ2Jvb2xlYW4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6
ZUxhdGVyQ2FsbGJhY2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqIHdpbmRvdykKLXsKLSAg
ICB3aW5kb3ctPnJlc2l6ZUxhdGVyKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQorICAgIGdldFdp
bmRvd0hhc2hNYXAoKS5yZW1vdmUobV93aW5kb3cpOwogCi12b2lkIFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93OjpyZXNpemVMYXRlcigpCi17Ci0gICAgbV91c2FibGVTaXplID0gbV9zaXplOwot
ICAgIG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkID0gMDsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
R0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgWERh
bWFnZURlc3Ryb3koZGlzcGxheSwgbV9kYW1hZ2UpOworICAgIFhEZXN0cm95V2luZG93KGRpc3Bs
YXksIG1fd2luZG93KTsKKyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRv
dyk7CisgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKIH0KIAogdm9pZCBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0g
ICAgLy8gV2hlbiBlbmxhcmdpbmcgYSByZWRpcmVjdGVkIHdpbmRvdywgZm9yIHRoZSBmaXJzdCBy
ZW5kZXIsIHRoZSBuZXdseSBleHBvc2VkIGFyZWFzIHNlZW0KLSAgICAvLyB0byBjb250YWluIHVu
aW5pdGlhbGl6ZWQgbWVtb3J5IG9uIEludGVsIGRyaXZlcnMuIFRvIGF2b2lkIHJlbmRlcmluZyBh
cnRpZmFjdHMgd2hpbGUKLSAgICAvLyByZXNpemluZywgd2Ugd2FpdCB0byByZW5kZXIgdGhvc2Ug
bmV3IGFyZWFzIHVudGlsIGFmdGVyIGEgc2hvcnQgdGltZW91dC4gVGh1cywgdGhlCi0gICAgLy8g
InVzYWJsZSBzaXplIiBvZiB0aGUgd2luZG93IGlzIHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIHNp
emUgb2YgdGhlIHdpbmRvdyBmb3IgdGhlIGZpcnN0Ci0gICAgLy8gcmVuZGVyLgotICAgIG1fdXNh
YmxlU2l6ZSA9IHNpemUuc2hydW5rVG8obV91c2FibGVTaXplKTsKLSAgICBpZiAobV91c2FibGVT
aXplLndpZHRoKCkgPCBzaXplLndpZHRoKCkgfHwgbV91c2FibGVTaXplLmhlaWdodCgpIDwgc2l6
ZS5oZWlnaHQoKSkgeyAvLyBUaGUgd2luZG93IGlzIGdyb3dpbmcuCi0gICAgICAgIC8vIFdlJ3Jl
IGJlaW5nIHZlcnkgY29uc2VydmF0aXZlIGhlcmUuIEluc3RlYWQgb2Ygcmlza2luZyBkcmF3aW5n
IGFydGlmYWN0cyB3aGlsZSBkb2luZyBjb250aW51b3VzCi0gICAgICAgIC8vIG9wYXF1ZSByZXNp
emluZywgd2UgZXJyIG9uIHRoZSBzaWRlIG9mIGhhdmluZyBtb3JlIHVuZHJhd24gYXJlYXMuCi0g
ICAgICAgIGlmIChtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCkKLSAgICAgICAgICAgIGdfc291cmNl
X3JlbW92ZShtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCk7Ci0gICAgICAgIG1fcGVuZGluZ1Jlc2l6
ZVNvdXJjZUlkID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PihyZXNpemVMYXRlckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgRGlzcGxheSogZGlz
cGxheSA9IEdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSgpOworICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKICAg
ICBYUmVzaXplV2luZG93KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpOwogCiAgICAgWEZsdXNoKGRpc3BsYXkpOwpAQCAtMjE2LDYgKzI1MiwxMiBAQCBjYWly
b19zdXJmYWNlX3QqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWlyb1N1cmZhY2VGb3JX
aWRnZXQoR3RrV2lkZ2V0KiB3aQogICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7CiB9CiAKK3Zv
aWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygp
Cit7CisgICAgaWYgKG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2spCisgICAgICAgIG1fZGFtYWdlTm90
aWZ5Q2FsbGJhY2sobV9kYW1hZ2VOb3RpZnlEYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gVVNFKEdMWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKaW5kZXggZTVkYjBmYTdl
OGFkOWE4MjVlMWI2OWY5ZTYyYWUzNzA3ZTI5ZWZhOS4uODY1YmUzYmNjNGUyNzRiNTBhNmU3OGVi
ZTA1N2Y4ZmNiOWNmMzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKQEAgLTM1LDYgKzM1LDggQEAKIAog
dHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5k
b3c7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgRGFtYWdlOwordHlwZWRlZiB2b2lkICgqRGFtYWdl
Tm90aWZ5Q2FsbGJhY2spKHZvaWQqKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miwy
NCArNDQsMjUgQEAgY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUo
Y29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgflJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
KCk7Ci0KLSAgICBjb25zdCBJbnRTaXplJiB1c2FibGVTaXplKCkgeyByZXR1cm4gbV91c2FibGVT
aXplOyB9CiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAg
ICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7CiAgICAgR0xDb250ZXh0KiBj
b250ZXh0KCk7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3Rr
V2lkZ2V0Kik7CiAgICAgV2luZG93IHdpbmRvd0lkKCkgeyByZXR1cm4gbV93aW5kb3c7IH0KKyAg
ICB2b2lkIGNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOworCisgICAgdm9pZCBzZXREYW1hZ2VO
b3RpZnlDYWxsYmFjayhEYW1hZ2VOb3RpZnlDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkK
KyAgICB7CisgICAgICAgIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAg
ICAgbV9kYW1hZ2VOb3RpZnlEYXRhID0gZGF0YTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYpOwotCi0gICAgc3RhdGljIGdi
b29sZWFuIHJlc2l6ZUxhdGVyQ2FsbGJhY2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqKTsK
LSAgICB2b2lkIHJlc2l6ZUxhdGVyKCk7CiAgICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOwogCiAgICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX3VzYWJsZVNp
emU7CiAgICAgV2luZG93IG1fd2luZG93OwogICAgIFdpbmRvdyBtX3BhcmVudFdpbmRvdzsKICAg
ICBQaXhtYXAgbV9waXhtYXA7CkBAIC02Nyw2ICs3MCwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKICAgICB1bnNpZ25lZCBpbnQgbV9wZW5kaW5n
UmVzaXplU291cmNlSWQ7CiAgICAgYm9vbCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemU7CisK
KyAgICBEYW1hZ2UgbV9kYW1hZ2U7CisgICAgRGFtYWdlTm90aWZ5Q2FsbGJhY2sgbV9kYW1hZ2VO
b3RpZnlDYWxsYmFjazsKKyAgICB2b2lkKiBtX2RhbWFnZU5vdGlmeURhdGE7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtl
ZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRiNmM5YjBi
YzRkMDBiZGZkODQ0MTk2MThiNWEwOGJkNTkxMjBjZDcuLjViZTllYjU0OGVlMDIzZDE0MGEzNWQx
NjYyNDMzZDU4MWJiNzFiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC02Niw2ICs2
Niw4IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9DUFBGCiAJJChMSUJYU0xUX0NGTEFHUykgXAogCSQo
U1FMSVRFM19DRkxBR1MpIFwKIAkkKFVOSUNPREVfQ0ZMQUdTKSBcCisJJChYQ09NUE9TSVRFX0xJ
QlMpIFwKKwkkKFhEQU1BR0VfTElCUykgXAogCSQoWFRfQ0ZMQUdTKSBcCiAJJChaTElCX0NGTEFH
UykKIApAQCAtMTAyLDYgKzEwNCw3IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpP
Ul9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBCiAJJChTUUxJ
VEUzX0xJQlMpIFwKIAkkKFVOSUNPREVfTElCUykgXAogCSQoWENPTVBPU0lURV9MSUJTKSBcCisJ
JChYREFNQUdFX0xJQlMpIFwKIAkkKFhSRU5ERVJfTElCUykgXAogCSQoWFRfTElCUykgXAogCSQo
V0lOTU1fTElCUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKaW5kZXggNDVlZjQ3
MGI2YTczZGE5NTdiNzljYmU2ZmI0NjcxNWFiMjRlY2FhMi4uOTI2YjIxOWZiOTBlMDA3MDI5OTkx
MDYzZGNkNGZhOTA3NzUyMDU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCkBA
IC02NCw3ICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291
bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CiAKICAgICB2b2lkIGlu
aXRpYWxpemUoKTsKLSAgICB2b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworCisgICAg
ZW51bSBDb21wb3NpdGVQdXJwb3NlIHsgRm9yUmVzaXplLCBOb3RGb3JSZXNpemUgfTsKKyAgICB2
b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlID0gTm90Rm9yUmVz
aXplKTsKKwogICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKICAgICBib29sIGZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcygpOwogICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wu
Y3BwCmluZGV4IDk1ZGE2NDRlMzY4YTFkNzRjMDMxZDE3MjhhNTM2ODdjOGYyMzQyODMuLjQ1MWNh
MGY0ZmJjMDdiYzljZjIxNzhiNDcyNTkwMzljYWYzYmRmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0R0wuY3BwCkBAIC02MywxNyArNjMsMjYgQEAgc3RhdGljIEludFNpemUg
Z2V0V2ViVmlld1NpemUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICByZXR1cm4gSW50U2l6
ZShhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CiB9CiAKK3ZvaWQgcmVkaXJl
Y3RlZFdpbmRvd0RhbWFnZWRDYWxsYmFjayh2b2lkKiBkYXRhKQoreworICAgIGd0a193aWRnZXRf
cXVldWVfZHJhdyhHVEtfV0lER0VUKGRhdGEpKTsKK30KKwogdm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaWYgKG1fcm9vdExheWVyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBJbnRTaXplIHBhZ2VTaXplID0gZ2V0V2ViVmlld1NpemUobV93
ZWJWaWV3KTsKLSAgICBpZiAoIW1fcmVkaXJlY3RlZFdpbmRvdykKKyAgICBpZiAoIW1fcmVkaXJl
Y3RlZFdpbmRvdykgewogICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3cgPSBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKHBhZ2VTaXplKTsKLSAgICBlbHNlCisgICAgICAgIG1fcmVk
aXJlY3RlZFdpbmRvdy0+c2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2socmVkaXJlY3RlZFdpbmRvd0Rh
bWFnZWRDYWxsYmFjaywgbV93ZWJWaWV3KTsKKyAgICB9IGVsc2UKICAgICAgICAgbV9yZWRpcmVj
dGVkV2luZG93LT5yZXNpemUocGFnZVNpemUpOwogCisgICAgaWYgKCFtX3JlZGlyZWN0ZWRXaW5k
b3cpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMpOwogICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwog
ICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKQEAgLTEyMCw3ICsxMjksNyBAQCB2
b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzdG9wQW55UGVuZGluZ0xheWVyRmx1
c2goKQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKCkKIHsK
LSAgICByZXR1cm4gbV9yb290TGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOworICAgIHJldHVybiBt
X3JlZGlyZWN0ZWRXaW5kb3cgJiYgbV9yb290TGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOwogfQog
CiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRv
dyhjYWlyb190KiBjciwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCkBAIC0xMzAsMTkgKzEzOSw2
IEBAIGJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2lu
ZG93KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIHBhaW50IGEgd2hpdGUg
YmFja2dyb3VuZCAoaWYgdGhlIFdlYlZpZXcgaXNuJ3QgdHJhbnNwYXJlbnQpLCBiZWNhdXNlIHdo
ZW4gZ3Jvd2luZwotICAgIC8vIHRoZSByZWRpcmVjdGVkIHdpbmRvdywgdGhlIHVzYWJsZSBzaXpl
IG9mIHRoZSB3aW5kb3cgbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgYWxsb2NhdGlvbiBvZiBvdXIg
d2lkZ2V0LgotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2hvdyBhcnRpZmFjdHMgaW4gdGhhdCBj
YXNlLgotICAgIEludFNpemUgdXNhYmxlV2luZG93U2l6ZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+
dXNhYmxlU2l6ZSgpOwotICAgIGlmICh1c2FibGVXaW5kb3dTaXplICE9IG1fcmVkaXJlY3RlZFdp
bmRvdy0+c2l6ZSgpKSB7Ci0gICAgICAgIGlmICghbV93ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVu
dCkgewotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDEsIDEsIDEpOwotICAg
ICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9f
T1BFUkFUT1JfQ0xFQVIpOwotICAgICAgICBjYWlyb19wYWludChjcik7Ci0gICAgfQotCiAgICAg
Y2Fpcm9fc3VyZmFjZV90KiB3aW5kb3dTdXJmYWNlID0gbV9yZWRpcmVjdGVkV2luZG93LT5jYWly
b1N1cmZhY2VGb3JXaWRnZXQoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKICAgICBpZiAoIXdpbmRv
d1N1cmZhY2UpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDcgKzE3Miw3IEBAIEdMQ29u
dGV4dCogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnByZXBhcmVGb3JSZW5kZXJpbmco
KQogICAgIHJldHVybiBjb250ZXh0OwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0Ojpjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKQordm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KENvbXBvc2l0ZVB1cnBvc2Ug
cHVycG9zZSkKIHsKICAgICBHTENvbnRleHQqIGNvbnRleHQgPSBwcmVwYXJlRm9yUmVuZGVyaW5n
KCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtMTg1LDIxICsxODEsMTYgQEAgdm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCkKICAgICBj
b25zdCBJbnRTaXplJiB3aW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXplKCk7CiAg
ICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0
KCkpOwogCisgICAgaWYgKHB1cnBvc2UgPT0gRm9yUmVzaXplKSB7CisgICAgICAgIGdsQ2xlYXJD
b2xvcigxLCAxLCAxLCAwKTsKKyAgICAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsK
KyAgICB9CisKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKICAgICB0b1Rl
eHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnBhaW50KCk7CiAgICAgbV90ZXh0
dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwogCiAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsK
LQotICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB0aGF0IHdoZW4gdXNpbmcgZG91YmxlLWJ1ZmZlcmlu
ZyAoYW5kIG9uIHNvbWUgZHJpdmVycyBzaW5nbGUtYnVmZmVyaW5nKQotICAgIC8vIGFuZCBYQ29t
cG9zaXRlIHdpbmRvdyByZWRpcmVjdGlvbiwgdHdvIHN3YXAgYnVmZmVycyBhcmUgcmVxdWlyZWQg
dG8gZm9yY2UgdGhlIHBpeG1hcAotICAgIC8vIHRvIHVwZGF0ZS4gVGhpcyBpc24ndCBhIHByb2Js
ZW0gZHVyaW5nIGFuaW1hdGlvbnMsIGJlY2F1c2Ugc3dhcEJ1ZmZlciBpcyBjb250aW51b3VzbHkK
LSAgICAvLyBjYWxsZWQuIEZvciBub24tYW5pbWF0aW9uIHNpdHVhdGlvbnMgd2UgdXNlIHRoaXMg
dGVycmlibGUgaGFjayB1bnRpbCB3ZSBjYW4gZ2V0IHRvIHRoZQotICAgIC8vIGJvdHRvbSBvZiB0
aGUgaXNzdWUuCi0gICAgaWYgKCF0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQo
KSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpIHsKLSAgICAgICAg
Y29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLSAgICAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsK
LSAgICB9CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNsZWFyRXZl
cnl3aGVyZSgpCkBAIC0yMzYsNyArMjI3LDggQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGgKICAg
ICAgICAgc3RvcEFueVBlbmRpbmdMYXllckZsdXNoKCk7CiAKICAgICAgICAgLy8gU2hyaW5rIHRo
ZSBvZmZzY3JlZW4gd2luZG93IHRvIHNhdmUgbWVtb3J5IHdoaWxlIGFjY2VsZXJhdGVkIGNvbXBv
c2l0aW5nIGlzIHR1cm5lZCBvZmYuCi0gICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXpl
KEludFNpemUoMSwgMSkpOworICAgICAgICBpZiAobV9yZWRpcmVjdGVkV2luZG93KQorICAgICAg
ICAgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUoSW50U2l6ZSgxLCAxKSk7CiAgICAgICAg
IG1fcm9vdExheWVyID0gbnVsbHB0cjsKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyID0gbnVsbHB0cjsKICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKQEAgLTI0
NSw2ICsyMzcsOSBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXRSb290
Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFwaAogCiAgICAgLy8gQWRkIHRoZSBh
Y2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KICAgICBpbml0aWFsaXplKCk7CisgICAg
aWYgKCFtX3JlZGlyZWN0ZWRXaW5kb3cpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOwogCkBAIC0yOTUsNyAr
MjkwLDggQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVzaXplUm9vdExh
eWVyKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdo
dCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgp
KSk7CiAKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChJbnRSZWN0KEludFBvaW50KCksIG5ld1NpemUpKTsKLSAgICBmbHVzaEFuZFJlbmRlckxh
eWVycygpOworICAgIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChGb3JSZXNpemUpOworICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVj
dCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQpAQCAtMzUxLDE0ICszNDcsMTMgQEAgdm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hBbmRSZW5kZXJMYXllcnMoKQog
ICAgIG1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lKCk7CiAgICAgY29tcG9zaXRlTGF5ZXJz
VG9Db250ZXh0KCk7CiAKLSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChtX3dl
YlZpZXcpKTsKLQogICAgIC8vIElmIGl0J3MgYmVlbiBhIGxvbmcgdGltZSBzaW5jZSB3ZSd2ZSBh
Y3R1YWxseSBwYWludGVkLCB3aGljaCBtZWFucyB0aGF0IGV2ZW50cyBtaWdodAogICAgIC8vIGJl
IHN0YXJ2aW5nIHRoZSBtYWluIGxvb3AsIHdlIHNob3VsZCBmb3JjZSBhIGRyYXcgbm93LiBUaGlz
IHNlZW1zIHRvIHByZXZlbnQgZGlzcGxheQogICAgIC8vIGxhZyBvbiBodHRwOi8vMjAxMi5iZWVy
Y2FtcC5jb20uCi0gICAgaWYgKG1fcmVkcmF3UGVuZGluZ1RpbWUgJiYgY3VycmVudFRpbWUoKSAt
IG1fcmVkcmF3UGVuZGluZ1RpbWUgPiBnU2NoZWR1bGVEZWxheSkKKyAgICBpZiAobV9yZWRyYXdQ
ZW5kaW5nVGltZSAmJiBjdXJyZW50VGltZSgpIC0gbV9yZWRyYXdQZW5kaW5nVGltZSA+IGdTY2hl
ZHVsZURlbGF5KSB7CisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKG1f
d2ViVmlldykpOwogICAgICAgICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyhndGtfd2lkZ2V0
X2dldF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKSwgRkFMU0UpOwotICAgIGVsc2UgaWYg
KCFtX3JlZHJhd1BlbmRpbmdUaW1lKQorICAgIH0gZWxzZSBpZiAoIW1fcmVkcmF3UGVuZGluZ1Rp
bWUpCiAgICAgICAgIG1fcmVkcmF3UGVuZGluZ1RpbWUgPSBjdXJyZW50VGltZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCmluZGV4IGJhMGFjNjk1NTMwMTY4NTQyMzE3M2VhYzg5OTdkY2RmOGM1
ZDNmYTkuLmIxYTlmNmQyZDM2ZGUwMDhiMDA2Zjc0NTE0YjllOTZkNjI4OTI2MWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCkBAIC0xMDksNiArMTA5LDcgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RL
X0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9DUFAK
IAkkKExJQlNPVVBfQ0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAogCSQoWENPTVBPU0lU
RV9DRkxBR1MpIFwKKwkkKFhEQU1BR0VfQ0ZMQUdTKSBcCiAJJChYVF9DRkxBR1MpCiAKIGxpYndl
YmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlO
T1JfVkVSU0lPTkBfbGFfQ1hYRkxBR1MgPSBcCkBAIC0xODIsNiArMTgzLDcgQEAgbGlid2Via2l0
Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQF9sYV9MSUIKIAkkKFVOSUNPREVfTElCUykgXAogCSQoWFJFTkRFUl9MSUJTKSBcCiAJ
JChYQ09NUE9TSVRFX0xJQlMpIFwKKwkkKFhEQU1BR0VfTElCUykgXAogCSQoWFRfTElCUykgXAog
CSQoWkxJQl9MSUJTKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggNTMzOGUyYmQzZGQwNmM3NzQwOGRiZjNj
OTkxNWZmMjdiOWRiNTVlMS4uZmEwMzcyZTgzY2RkZjllMzc0MjRhYjZjM2ZlN2MzNDJhZTEyNzEw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcApAQCAtNzUsNiArNzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIHR5cGVkZWYgSGFzaE1hcDxHdGtXaWRnZXQqLCBJbnRSZWN0PiBXZWJLaXRXZWJWaWV3
Q2hpbGRyZW5NYXA7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIHJlZGlyZWN0
ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJhY2sodm9pZCogZGF0YSk7CisjZW5kaWYKKwogc3RydWN0IF9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcCBj
aGlsZHJlbjsKICAgICBPd25QdHI8UGFnZUNsaWVudEltcGw+IHBhZ2VDbGllbnQ7CkBAIC0xMTEs
NyArMTE1LDYgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogCiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIE93blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dz4gcmVkaXJlY3RlZFdpbmRvdzsKLSAgICBib29sIHJlYWR5VG9SZW5kZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nUmVzdWx0czsKICNlbmRpZgogfTsKIApAQCAtMzUxLDcgKzM1NCw4IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtp
dFdlYlZpZXdCYXNlKQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIHByaXYtPnJl
ZGlyZWN0ZWRXaW5kb3cgPSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKEludFNp
emUoMSwgMSkpOwotICAgIHByaXYtPnJlYWR5VG9SZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
UmVzdWx0cyA9IGZhbHNlOworICAgIGlmIChwcml2LT5yZWRpcmVjdGVkV2luZG93KQorICAgICAg
ICBwcml2LT5yZWRpcmVjdGVkV2luZG93LT5zZXREYW1hZ2VOb3RpZnlDYWxsYmFjayhyZWRpcmVj
dGVkV2luZG93RGFtYWdlZENhbGxiYWNrLCB3ZWJraXRXZWJWaWV3QmFzZSk7CiAjZW5kaWYKIH0K
IApAQCAtMzY0LDEwICszNjgsOSBAQCBzdGF0aWMgYm9vbCB3ZWJraXRXZWJWaWV3UmVuZGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMoV2ViS2l0V2ViVmlld0Jhc2UqCiAgICAgLy8gVG8g
YXZvaWQgZmxhc2hlcyB3aGVuIGluaXRpYWxpemluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBm
b3IgdGhlIGZpcnN0CiAgICAgLy8gdGltZSwgd2Ugd2FpdCB1bnRpbCB3ZSBrbm93IHRoZXJlJ3Mg
YSBmcmFtZSByZWFkeSBiZWZvcmUgcmVuZGVyaW5nLgogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwotICAgIGlmICghcHJpdi0+cmVhZHlUb1Jl
bmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKQorICAgIGlmICghcHJpdi0+cmVkaXJl
Y3RlZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKHByaXYtPnJl
ZGlyZWN0ZWRXaW5kb3cpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgY2xpcFJlY3QtPngsIGNs
aXBSZWN0LT55LCBjbGlwUmVjdC0+d2lkdGgsIGNsaXBSZWN0LT5oZWlnaHQpOwogICAgIGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSA9IHByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPmNhaXJvU3VyZmFj
ZUZvcldpZGdldChHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CiAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9zdXJmYWNlKGNyLCBzdXJmYWNlLCAwLCAwKTsKQEAgLTQzMCw3ICs0MzMsNyBAQCBzdGF0aWMg
dm9pZCByZXNpemVXZWJLaXRXZWJWaWV3QmFzZUZyb21BbGxvY2F0aW9uKFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJWaWV3QmFzZQogICAgIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAg
ICBpZiAoc2l6ZUNoYW5nZWQpCisgICAgaWYgKHNpemVDaGFuZ2VkICYmIHdlYlZpZXdCYXNlLT5w
cml2LT5yZWRpcmVjdGVkV2luZG93KQogICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cmVkaXJl
Y3RlZFdpbmRvdy0+cmVzaXplKHZpZXdSZWN0LnNpemUoKSk7CiAjZW5kaWYKIApAQCAtODAxLDcg
KzgwNCw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSwgV0tDb250CiAjZW5kaWYKIAogI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKLSAgICBwcml2LT5wYWdlUHJveHktPnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdXaW5kb3dJZChwcml2LT5yZWRpcmVjdGVkV2luZG93LT53aW5kb3dJZCgpKTsKKyAgICBp
ZiAocHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKKyAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5zZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQocHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+d2lu
ZG93SWQoKSk7CiAjZW5kaWYKIH0KIApAQCAtOTI4LDM3ICs5MzIsOSBAQCBHZGtFdmVudCogd2Vi
a2l0V2ViVmlld0Jhc2VUYWtlQ29udGV4dE1lbnVFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
a2l0V2ViVmlldwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotc3RhdGljIGdib29s
ZWFuIHF1ZXVlQW5vdGhlckRyYXdPZkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKGdwb2lu
dGVyKiB3ZWJWaWV3QmFzZVBvaW50ZXIpCit2b2lkIHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2Fs
bGJhY2sodm9pZCogZGF0YSkKIHsKLSAgICAvLyBUaGUgV2ViVmlld0Jhc2UgbWF5IGhhdmUgYmVl
biBkZXN0cm95ZWQgaW4gdGhlIHRpbWUgc2luY2Ugd2UgcXVldWVkIHRoaXMKLSAgICAvLyBkcmF3
IGFuZCB0aGUgdGltZSB3ZSBhcmUgYWN0dWFsbHkgZXhlY3V0aW5nLgotICAgIGlmICghKndlYlZp
ZXdCYXNlUG9pbnRlcikgewotICAgICAgICBmYXN0RnJlZSh3ZWJWaWV3QmFzZVBvaW50ZXIpOwot
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UoKndlYlZpZXdCYXNlUG9pbnRlcik7Ci0g
ICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKLSAgICB3
ZWJWaWV3QmFzZS0+cHJpdi0+cmVhZHlUb1JlbmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1
bHRzID0gdHJ1ZTsKLQotICAgIGdfb2JqZWN0X3JlbW92ZV93ZWFrX3BvaW50ZXIoR19PQkpFQ1Qo
d2ViVmlld0Jhc2UpLCB3ZWJWaWV3QmFzZVBvaW50ZXIpOwotICAgIGZhc3RGcmVlKHdlYlZpZXdC
YXNlUG9pbnRlcik7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXZvaWQgd2Via2l0V2ViVmll
d0Jhc2VRdWV1ZURyYXdPZkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSkKLXsKLSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJ
REdFVCh3ZWJWaWV3QmFzZSkpOwotCi0gICAgLy8gUmVkcmF3IGFnYWluLCBvbmUgZnJhbWUgbGF0
ZXIsIGFzIGl0IG1pZ2h0IHRha2Ugc29tZSB0aW1lIGZvciB0aGUgbmV3IEdMIGZyYW1lIHRvIGJl
IGF2YWlsYWJsZS4KLSAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBkaXNwbGF5IGZyb20gYWx3YXlz
IGJlaW5nIG9uZSBmcmFtZSBiZWhpbmQgaW4gdGhlIGNhc2UgR0wgaGFzbid0IHlldCBmaW5pc2hl
ZAotICAgIC8vIHJlbmRlcmluZyB0byB0aGUgd2luZG93LgotICAgIC8vIFRPRE86IEFkZCBYRGFt
YWdlIHN1cHBvcnQgdG8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgdG8gYWNjb21wbGlzaCB0
aGlzLgotICAgIGdwb2ludGVyKiB3ZWJWaWV3QmFzZVBvaW50ZXIgPSBzdGF0aWNfY2FzdDxncG9p
bnRlcio+KGZhc3RNYWxsb2Moc2l6ZW9mKGdwb2ludGVyKSkpOwotICAgIGdfb2JqZWN0X2FkZF93
ZWFrX3BvaW50ZXIoR19PQkpFQ1Qod2ViVmlld0Jhc2UpLCB3ZWJWaWV3QmFzZVBvaW50ZXIpOwot
ICAgICp3ZWJWaWV3QmFzZVBvaW50ZXIgPSB3ZWJWaWV3QmFzZTsKLSAgICBnX3RpbWVvdXRfYWRk
KDEwMDAgLyA2MCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVldWVBbm90aGVyRHJh
d09mQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMpLCB3ZWJWaWV3QmFzZVBvaW50ZXIpOwor
ICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKGRhdGEpKTsKIH0KICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMjhjNWRhOTBhZTEw
OTQyNmZmN2M5ZTZlYTM0M2RmMGI2MjlkNzI1Yi4uMTUzYzRlMzZjZjhjN2VkOGNmYTZmODdlZGRl
MDBhZTY2NDhkMjlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApA
QCAtNzE1LDcgKzcxNSw2IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1dpbmRv
d0lkKHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0lkKTsKLSAgICB2b2lkIGludmFsaWRhdGVXaWRnZXQo
KTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKGJvb2wg
ZmxhZykgeyBtX3N1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMgPSBmbGFnOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBhNGEz
YzU3YmYyYzk5MjJhMWZlNGU5ZjliM2Y0MTNkM2U3NTY3NDNkLi5jNTQxZDJjMTQ0MDNkYmZiYjVj
NDFiNGQ1NzdmODRkYTRkYzQyMzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTE3NywxMCArMTc3LDYgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKICAgICBCaW5kQWNjZXNzaWJpbGl0eVRyZWUoV1RGOjpTdHJpbmcg
cGx1Z0lEKQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKLSAgICBJbnZhbGlkYXRlV2lkZ2V0KCkKLSNlbmRpZgotCiAgICAgIyBCYWNrRm9yd2Fy
ZCBtZXNzYWdlcwogICAgIEJhY2tGb3J3YXJkQWRkSXRlbSh1aW50NjRfdCBpdGVtSUQpCiAgICAg
QmFja0ZvcndhcmRHb1RvSXRlbSh1aW50NjRfdCBpdGVtSUQpIC0+IChXZWJLaXQ6OlNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCmluZGV4IDgwODgxYmZlNzBi
OWEzZDEwZDViNDJjYzUwNzE4NWEyMjM2N2U3ODIuLjZiMDFiYjAyNzgwMjE1ZmQ0ODMwYjMzMTQ4
ODZkNTlmN2ViZmVjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlBhZ2VQcm94eUd0ay5jcHAKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJZCh1aW50NjRfdCBuYXRpdmVXaW5kb3dJ
ZCkKIHsKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdXaW5kb3dJZChuYXRpdmVXaW5kb3dJZCksIG1fcGFnZUlEKTsKIH0KLQot
dm9pZCBXZWJQYWdlUHJveHk6OmludmFsaWRhdGVXaWRnZXQoKQotewotICAgIHdlYmtpdFdlYlZp
ZXdCYXNlUXVldWVEcmF3T2ZBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyhXRUJLSVRfV0VC
X1ZJRVdfQkFTRShzdGF0aWNfY2FzdDxQYWdlQ2xpZW50SW1wbCo+KG1fcGFnZUNsaWVudCktPnZp
ZXdXaWRnZXQoKSkpOwotfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNzc1YjgyNzBhOWMw
ZTA3NDlhM2UzMjcxMDM1MmJhNmVmYThiNzdlYi4uNTIzNzEyNDJjYjlkYjc2ODYxZmUzOTJmYTgy
OTQwODA2NWM1YmNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCkBAIC00NTksNyArNDU5LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxlTW91c2VQ
cmVzc2VkRXZlbnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1dp
bmRvd0lkKGludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKTsKLSAgICB2b2lkIGludmFsaWRhdGVX
aWRnZXQoKTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCmluZGV4IDA5OGE0
YzcxNjM4YzllNzUzYTQ3MTVjYWEyNTAyODg5ZTE1MmUxZTMuLmJjYjJiZWZkZTM0ZmEwMGZmYjZl
NGU2ZmViMDYxNjBlOTViNmU5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcApAQCAtMzE3LDcgKzMx
Nyw2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KENv
bXBvc2l0ZVB1cnBvc2UgcHVycG9zZSkKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5n
KCk7CiAKICAgICBjb250ZXh0LT5zd2FwQnVmZmVycygpOwotICAgIG1fd2ViUGFnZS0+aW52YWxp
ZGF0ZVdpZGdldCgpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RHdGs6OmZsdXNoQW5kUmVuZGVy
TGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUGFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlBhZ2VHdGsuY3BwCmluZGV4IGQ5ZGRlODFhMjVkYjc0NDI2NmE1ZTY3YThmYTliYTY5OWEw
YWZkNWEuLmUyOGU3NGYzOTk5YmQ4MzFhM2I4YTgwNjAwNTZkYTE4ZGVmOWUyNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNw
cApAQCAtMTYwLDExICsxNjAsNiBAQCB2b2lkIFdlYlBhZ2U6OnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdXaW5kb3dJZChpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZSkKIHsKICAgICBtX25hdGl2
ZVdpbmRvd0hhbmRsZSA9IG5hdGl2ZVdpbmRvd0hhbmRsZTsKIH0KLQotdm9pZCBXZWJQYWdlOjpp
bnZhbGlkYXRlV2lkZ2V0KCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Oklu
dmFsaWRhdGVXaWRnZXQoKSk7Ci19CiAjZW5kaWYKIAogYm9vbCBXZWJQYWdlOjpoYW5kbGVNb3Vz
ZVByZXNzZWRFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2VFdmVu
dCkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0YmVhNDJkNmQ1ZThh
ZDUxMzU1YzBhZjZmMWE1ZDA0ZGM3NDdmMzc5Li43MGVhNDc3YjZhYjFhNjU0NjgzNzUzYTE1N2I5
ZGQ4MzA1NjFhZmE0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTItMDktMjAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFVzZSBYRGFtYWdlIHRvIHNpbXBsaWZ5IFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NzI2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVzZSBYRGFtYWdlIHRvIHF1ZXVlIHJlZHJhd3Mgb2YgdGhlIHdpZGdldCB3aGVu
IHJlZGlyZWN0aW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCisgICAgICAgIHRvIGFuIG9mZnNj
cmVlbiB3aW5kb3cuIFRoaXMgYWxsb3dzIHJlbW92aW5nIGEgZmluaWNreSB0aW1lci1iYXNlZCBh
cHByb2FjaCwgaW1wcm92ZXMKKyAgICAgICAgcGVyZm9ybWFuY2UsIGFuZCBhbGxvd3Mgc2ltcGxp
ZnlpbmcgdGhpbmdzIGdyZWF0bHkuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6IEFkZCBzdXBw
b3J0IGZvciBmaW5kaW5nIFhEYW1hZ2UgdmlhIHBrZy1jb25maWcuCisKIDIwMTItMDktMjEgIFNp
bW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0g
QmFpbCBvdXQgd2hlbiB0cnlpbmcgdG8gYnVpbGQgV2ViS2l0IHdpdGggUXQgIT0gNQpkaWZmIC0t
Z2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IGYwMTk2ZTkyYmZiODMzOTdj
Y2E5OTY3YjZkNzMwN2FjOGRhNDYxZmYuLmM4ZjExMGRjMTQwNDM1OWJjMzdiYjJmNmNjMGY2YjE0
ZWE5NmQwMDYgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAg
LTU2Nyw4ICs1NjcsMTEgQEAgQUNfTVNHX1JFU1VMVChbJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tl
bmRdKQogCiBpZiB0ZXN0ICIkd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZCIgPSAib3BlbmdsIjsg
dGhlbgogICAgIFBLR19DSEVDS19NT0RVTEVTKFtYQ09NUE9TSVRFXSwgW3hjb21wb3NpdGVdKTsK
KyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWERBTUFHRV0sIFt4ZGFtYWdlXSk7CiAgICAgQUNfU1VC
U1QoWENPTVBPU0lURV9DRkxBR1MpCiAgICAgQUNfU1VCU1QoWENPTVBPU0lURV9MSUJTKQorICAg
IEFDX1NVQlNUKFhEQU1BR0VfQ0ZMQUdTKQorICAgIEFDX1NVQlNUKFhEQU1BR0VfTElCUykKIGZp
CiAKICMgT3BlbkdMIGlzIHR1cm5lZCBvbiBieSBkZWZhdWx0IChhbG9uZyB3aXRoIFdlYkdMIGFu
ZCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyksIGJ1dCBpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165262</attachid>
            <date>2012-09-22 08:28:13 -0700</date>
            <delta_ts>2012-09-22 08:48:13 -0700</delta_ts>
            <desc>Remove the filter when the last RedirectedXComposite window is destructed</desc>
            <filename>bug-97267-20120922082736.patch</filename>
            <type>text/plain</type>
            <size>33678</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRjNTQ4YjUwMGFiYjYx
NjQzOWEyNzdkNjAwNmYwYmM1NTcxMTA0MS4uZjFmOTA0MmEzMTMyYTM1ZmNlOWNhMmNjYWJhMmVi
NTI1YTZmMjg0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTIyICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2Ug
WERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgWERhbWFnZSB0byBxdWV1
ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRpcmVjdGluZyBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4gd2luZG93LiBUaGlzIGFsbG93cyByZW1v
dmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9hY2gsIGltcHJvdmVzCisgICAgICAgIHBl
cmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5nIHRoaW5ncyBncmVhdGx5LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCB0aGUgWERhbWFnZSBDRkxBR1MgaW4gdGhlIGFw
cHJvcHJpYXRlIHBsYWNlLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRXaW5kb3dIYXNoTWFwKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJYRGFtYWdlRXZlbnQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUpOiBGYWlsIHRv
IGNyZWF0ZSB0aGUgd2luZG93IGlmCisgICAgICAgIHRoZSBYU2VydmVyIGRvZXNuJ3Qgc3VwcG9y
dCBYRGFtYWdlIGFuZCBYQ29tcG9zaXRlLgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KTogQWRkIFhEYW1hZ2Ug
c3VwcG9ydCBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSBtX3VzYWJsZSBzaXplIGRpc3RpbmN0aW9u
LiBBZGQgdGhlIHdpbmRvdyB0aGUgd2luZG93IEhhc2hNYXAgbm93LgorICAgICAgICAoV2ViQ29y
ZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyk6IFJlbW92ZSB0aGUgd2luZG93CisgICAgICAgIGZyb20gdGhlIHdpbmRvdyBIYXNoTWFwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZSk6IE5v
dyBqdXN0IGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgc2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpzZXREYW1hZ2VO
b3RpZnlDYWxsYmFjayk6IEFkZGVkLgorCiAyMDEyLTA5LTIyICBUaGllcnJ5IFJlZGluZyAgPHRo
aWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPgogCiAgICAgICAgIFtHVEtdIEJ1aWxkIGlz
IGJyb2tlbiB3aXRoIEdMaWIgVW5pY29kZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYzFh
ZmE1M2VkYzliNTBiNTIxZjlkMzBkYTI3YWZhYmY4OTQ0YTYyZi4uOGNiN2M1NTIwNjI0MWQzODdi
YjA1YWY0OTk1OWIxYjVlYWJiZDE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTA5LTIyICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBVc2UgWERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTcyNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgWERhbWFnZSB0byBxdWV1ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRpcmVjdGlu
ZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4gd2luZG93
LiBUaGlzIGFsbG93cyByZW1vdmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9hY2gsIGlt
cHJvdmVzCisgICAgICAgIHBlcmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5nIHRoaW5n
cyBncmVhdGx5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCB0aGUgWERhbWFnZSBD
RkxBR1MgYW5kIExJQlMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
KTogQ2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0CisgICAg
ICAgIHRvIGFjY2VwdCBhbiBlbnVtIHRoYXQgZXhwbGFpbnMgdGhlIGNvbXBvc2l0ZSBwdXJwb3Nl
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
R0wuY3BwOgorICAgICAgICAoV2ViS2l0OjpyZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNr
KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
Ojppbml0aWFsaXplKTogSGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlcmUKKyAgICAgICAgdGhlIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHJldHVybnMgYSBudWxsIHBvaW50ZXIuCisgICAgICAg
IChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJM
YXllcnNUb1dpbmRvdyk6IFJlbW92ZSB0aGUgY29kZSBoYW5kbGluZworICAgICAgICB0aGUgdXNh
YmxlIHNpemUgb2YgdGhlIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LiBUaGUgdXNhYmxlIHNp
emUgaXMgbm93IGFsd2F5cyBlcXVhbAorICAgICAgICB0byB0aGUgc2l6ZS4KKyAgICAgICAgKFdl
YktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0ZUxheWVyc1RvQ29u
dGV4dCk6IFdoZW4gZHJhd2luZyBmb3IgYQorICAgICAgICByZXNpemUsIGZpcnN0IGNsZWFyIHRo
ZSBlbnRpcmUgY29udGV4dC4gUmVtb3ZlIHRoZSBkb3VibGUgc3dhcC1idWZmZXIsIGFzIGl0J3Mg
bm8KKyAgICAgICAgbG9uZ2VyIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKTogSGFuZGxlIHRo
ZSBjYXNlIHRoYXQKKyAgICAgICAgdGhlIHJlZGlyZWN0ZWQgd2luZG93IGlzIG51bGwuCisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5
ZXIpOiBJbnN0ZWFkIG9mIGRvaW5nIGFub3RoZXIKKyAgICAgICAgaW1tZWRpYXRlIGxheWVyIGZs
dXNoLCBqdXN0IHJlY29tcG9zaXRlIHRoZSBjdXJyZW50IGxheWVyIHN0YXRlIGFuZCBzY2hlZHVs
ZSBhIG5ldworICAgICAgICBmbHVzaC4gVGhpcyBzaG91bGQgbWFrZSByZXNpemluZyBmYXN0ZXIu
CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaEFu
ZFJlbmRlckxheWVycyk6IFdlIG5vIGxvbmdlciBuZWVkIHRvCisgICAgICAgIHF1ZXVlIGEgcmVk
cmF3LCB1bmxlc3Mgd2Ugd2FudCB0byBmb3JjZSBvbmUuCisKIDIwMTItMDktMTkgIERhbmlsbyBD
ZXNhciBMZW1lcyBkZSBQYXVsYSAgPGRhbmlsby5jZXNhckBjb2xsYWJvcmEuY28udWs+CiAKICAg
ICAgICAgW2d0a10gYWRkIGVuYWJsZS1tZWRpYS1zdHJlYW0gdG8gd2Vic2V0dGluZ3MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCA1Yjc0OGRmOTU5ZmZmNTBjYmM3Yzk0ZjJkNGFlYTRlMmM4Y2I3ZWFiLi44NjMyOGJj
MDBkOTBmMzYwODkxZDgyYTdhMzE3NTJmMDRjMDA0YjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzMgQEAKKzIwMTItMDktMjIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFVzZSBYRGFtYWdlIHRvIHNpbXBsaWZ5IFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NzI2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVzZSBYRGFtYWdlIHRvIHF1ZXVlIHJlZHJhd3Mgb2YgdGhlIHdpZGdldCB3aGVuIHJlZGly
ZWN0aW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCisgICAgICAgIHRvIGFuIG9mZnNjcmVlbiB3
aW5kb3cuIFRoaXMgYWxsb3dzIHJlbW92aW5nIGEgZmluaWNreSB0aW1lci1iYXNlZCBhcHByb2Fj
aCwgaW1wcm92ZXMKKyAgICAgICAgcGVyZm9ybWFuY2UsIGFuZCBhbGxvd3Mgc2ltcGxpZnlpbmcg
dGhpbmdzIGdyZWF0bHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIHRoZSBYRGFt
YWdlIENGTEFHUyBhbmQgTElCUyB0byB0aGUgYXBwcm9wcmlhdGUgcGxhY2VzLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKF9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUpOiBSZW1vdmUgcmVhZHlUb1JlbmRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSZXN1bHRzIGFzCisgICAgICAgIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQpOiBIYW5kbGUgdGhlIHNpdHVhdGlvbiB3
aGVyZSB0aGUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cKKyAgICAgICAgaXMgbnVsbC4KKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdSZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyk6
IERpdHRvLgorICAgICAgICAocmVzaXplV2ViS2l0V2ViVmlld0Jhc2VGcm9tQWxsb2NhdGlvbik6
IERpdHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKTogRGl0dG8u
CisgICAgICAgIChyZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNrKTogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBSZW1vdmUgSW52YWxpZGF0ZVdpZGdldCBt
ZXNzYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcDogRGl0dG8u
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDogRGl0dG8uCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KTogTm8g
bG9uZ2VyIG5lZWQgdG8KKyAgICAgICAgdHJpZ2dlciB0aGUgaW52YWxpZGF0ZVdpbmRvdyBtZXNz
YWdlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6IERp
dHRvLgorCiAyMDEyLTA5LTIxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgRml4IHRoZSBMaW9uIGFuZCBTbm93IExlb3BhcmQgYnVpbGRzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCBjZmQzZjhmMTBlZTY5ODEwM2MzZjBmOTQxMmU5NTAwMzU0OTc0NzBlLi4wMzIyMTQ3
Y2ZlN2Q1OTA1NDNjNzkxYWM2Y2M1ZmYyZWM4MWI0ZmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtNjk0LDYgKzY5NCw3IEBAIGxpYldlYkNvcmVHdGtfbGFfQ1BQRkxBR1MgPSBcCiAJJChTUUxJ
VEUzX0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKIAkkKFhDT01QT1NJVEVfQ0ZMQUdT
KSBcCisJJChYREFNQUdFX0NGTEFHUykgXAogCSQoWFJFTkRFUl9DRkxBR1MpIFwKIAkkKFhUX0NG
TEFHUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKaW5kZXggMGQ3YmRiYTQzNjAzZTM3OTE1NjkwYzZl
MWY5YjQ4OGQzMDRjZjNmYy4uNWU2OWI0NDUwNGE4MWRlNTI1ZGI0NTVhYzIwYjNiYmViM2Q4NmQ0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0zMSwyOCArMzEsODcgQEAKICNpbmNsdWRlICJH
TENvbnRleHRHTFguaCIKICNpbmNsdWRlIDxHTC9nbHguaD4KICNpbmNsdWRlIDxYMTEvZXh0ZW5z
aW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgog
I2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2luY2x1ZGUg
PGdsaWIuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdyo+IFdpbmRvd0hhc2hNYXA7CitzdGF0aWMgV2luZG93SGFzaE1h
cCYgZ2V0V2luZG93SGFzaE1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dI
YXNoTWFwLCB3aW5kb3dIYXNoTWFwLCAoKSk7CisgICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Cit9
CisKK3N0YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKK3N0YXRpYyBHZGtGaWx0ZXJSZXR1cm4g
ZmlsdGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQs
IHZvaWQqKQoreworICAgIFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2Rr
WEV2ZW50KTsKKyAgICBpZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFt
YWdlTm90aWZ5KQorICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKworICAgIFhE
YW1hZ2VOb3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VO
b3RpZnlFdmVudCo+KHhFdmVudCk7CisgICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9
IGdldFdpbmRvd0hhc2hNYXAoKTsKKyAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2lu
ZG93SGFzaE1hcC5maW5kKGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7CisgICAgaWYgKGkgPT0gd2lu
ZG93SGFzaE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisK
KyAgICBpLT5zZWNvbmQtPmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOworICAgIFhEYW1hZ2VT
dWJ0cmFjdChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSwg
ZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7CisgICAgcmV0dXJuIEdES19GSUxURVJf
UkVNT1ZFOworfQorCitzdGF0aWMgYm9vbCBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKCkK
K3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29s
IGhhc0V4dGVuc2lvbnMgPSBmYWxzZTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAg
cmV0dXJuIGhhc0V4dGVuc2lvbnM7CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBp
bnQgZXJyb3JCYXNlOworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExB
WShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBpZiAoIVhEYW1hZ2VRdWVyeUV4dGVu
c2lvbihkaXNwbGF5LCAmZ0RhbWFnZUV2ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGludCBldmVudEJhc2U7CisgICAgaWYgKCFYQ29tcG9zaXRlUXVl
cnlFeHRlbnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFdlIG5lZWQgdG8gc3VwcG9ydCBYQ29tcG9zaXRlIHZlcnNp
b24gMC4yLgorICAgIGludCBtYWpvciwgbWlub3I7CisgICAgWENvbXBvc2l0ZVF1ZXJ5VmVyc2lv
bihkaXNwbGF5LCAmbWFqb3IsICZtaW5vcik7CisgICAgaWYgKG1ham9yIDwgMCB8fCAoIW1ham9y
ICYmIG1pbm9yIDwgMikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhc0V4dGVuc2lv
bnMgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCiBQYXNzT3duUHRyPFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93PiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdyhzaXplKSk7CisgICAgcmV0dXJuIHN1cHBvcnRzWERhbWFnZUFuZFhDb21w
b3NpdGUoKSA/IGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhzaXplKSkg
OiBudWxscHRyOwogfQogCiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fdXNhYmxlU2l6ZShz
aXplKQorICAgIDogbV9zaXplKHNpemUpCiAgICAgLCBtX3dpbmRvdygwKQogICAgICwgbV9wYXJl
bnRXaW5kb3coMCkKICAgICAsIG1fcGl4bWFwKDApCiAgICAgLCBtX3N1cmZhY2UoMCkKICAgICAs
IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKDApCiAgICAgLCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJS
ZXNpemUoZmFsc2UpCisgICAgLCBtX2RhbWFnZSgwKQorICAgICwgbV9kYW1hZ2VOb3RpZnlDYWxs
YmFjaygwKQorICAgICwgbV9kYW1hZ2VOb3RpZnlEYXRhKDApCiB7Ci0gICAgRGlzcGxheSogZGlz
cGxheSA9IEdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSgpOworICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKIAog
ICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gY29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9j
b21tb24vZ3B1L2ltYWdlX3RyYW5zcG9ydF9zdXJmYWNlX2xpbnV4LmNjCiAgICAgWFNldFdpbmRv
d0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKQEAgLTgxLDYgKzE0MCwxMCBAQCBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50
U2l6ZSYgc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0
ZXMpOwogICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOwogCisgICAgaWYgKGdldFdp
bmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcigw
LCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDAp
OworICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5kb3csIHRoaXMpOworCiAgICAgd2hp
bGUgKDEpIHsKICAgICAgICAgWEV2ZW50IGV2ZW50OwogICAgICAgICBYV2luZG93RXZlbnQoZGlz
cGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CkBAIC04OCw1NCAr
MTUxLDMwIEBAIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dpbmRvdywgTm9FdmVudE1hc2spOwotCiAgICAg
WENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fd2luZG93LCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7Ci0KLSAgICByZXNpemUoc2l6ZSk7CisgICAgbV9kYW1hZ2UgPSBYRGFtYWdl
Q3JlYXRlKGRpc3BsYXksIG1fd2luZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkpOwogfQogCiBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCkK
IHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7
Ci0gICAgaWYgKG1fd2luZG93KQotICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dp
bmRvdyk7Ci0gICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICBYRGVzdHJveVdpbmRvdyhk
aXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7Ci0gICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZh
Y2UoKTsKLQotICAgIGlmIChtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCkKLSAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsKLX0KKyAgICBBU1NFUlQobV9kYW1h
Z2UpOworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgQVNTRVJUKG1fcGFyZW50V2luZG93KTsK
IAotZ2Jvb2xlYW4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZUxhdGVyQ2FsbGJh
Y2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqIHdpbmRvdykKLXsKLSAgICB3aW5kb3ctPnJl
c2l6ZUxhdGVyKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQorICAgIGdldFdpbmRvd0hhc2hNYXAo
KS5yZW1vdmUobV93aW5kb3cpOworICAgIGlmIChnZXRXaW5kb3dIYXNoTWFwKCkuaXNFbXB0eSgp
KQorICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9maWx0ZXIoMCwgcmVpbnRlcnByZXRfY2FzdDxH
ZGtGaWx0ZXJGdW5jPihmaWx0ZXJYRGFtYWdlRXZlbnQpLCAwKTsKIAotdm9pZCBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXIoKQotewotICAgIG1fdXNhYmxlU2l6ZSA9IG1f
c2l6ZTsKLSAgICBtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCA9IDA7CisgICAgRGlzcGxheSogZGlz
cGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwor
ICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdlKTsKKyAgICBYRGVzdHJveVdpbmRv
dyhkaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9wYXJl
bnRXaW5kb3cpOworICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CiB9CiAKIHZv
aWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewotICAgIC8vIFdoZW4gZW5sYXJnaW5nIGEgcmVkaXJlY3RlZCB3aW5kb3csIGZvciB0aGUg
Zmlyc3QgcmVuZGVyLCB0aGUgbmV3bHkgZXhwb3NlZCBhcmVhcyBzZWVtCi0gICAgLy8gdG8gY29u
dGFpbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiBJbnRlbCBkcml2ZXJzLiBUbyBhdm9pZCByZW5k
ZXJpbmcgYXJ0aWZhY3RzIHdoaWxlCi0gICAgLy8gcmVzaXppbmcsIHdlIHdhaXQgdG8gcmVuZGVy
IHRob3NlIG5ldyBhcmVhcyB1bnRpbCBhZnRlciBhIHNob3J0IHRpbWVvdXQuIFRodXMsIHRoZQot
ICAgIC8vICJ1c2FibGUgc2l6ZSIgb2YgdGhlIHdpbmRvdyBpcyBzbWFsbGVyIHRoYW4gdGhlIGFj
dHVhbCBzaXplIG9mIHRoZSB3aW5kb3cgZm9yIHRoZSBmaXJzdAotICAgIC8vIHJlbmRlci4KLSAg
ICBtX3VzYWJsZVNpemUgPSBzaXplLnNocnVua1RvKG1fdXNhYmxlU2l6ZSk7Ci0gICAgaWYgKG1f
dXNhYmxlU2l6ZS53aWR0aCgpIDwgc2l6ZS53aWR0aCgpIHx8IG1fdXNhYmxlU2l6ZS5oZWlnaHQo
KSA8IHNpemUuaGVpZ2h0KCkpIHsgLy8gVGhlIHdpbmRvdyBpcyBncm93aW5nLgotICAgICAgICAv
LyBXZSdyZSBiZWluZyB2ZXJ5IGNvbnNlcnZhdGl2ZSBoZXJlLiBJbnN0ZWFkIG9mIHJpc2tpbmcg
ZHJhd2luZyBhcnRpZmFjdHMgd2hpbGUgZG9pbmcgY29udGludW91cwotICAgICAgICAvLyBvcGFx
dWUgcmVzaXppbmcsIHdlIGVyciBvbiB0aGUgc2lkZSBvZiBoYXZpbmcgbW9yZSB1bmRyYXduIGFy
ZWFzLgotICAgICAgICBpZiAobV9wZW5kaW5nUmVzaXplU291cmNlSWQpCi0gICAgICAgICAgICBn
X3NvdXJjZV9yZW1vdmUobV9wZW5kaW5nUmVzaXplU291cmNlSWQpOwotICAgICAgICBtX3BlbmRp
bmdSZXNpemVTb3VyY2VJZCA9IGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4ocmVzaXplTGF0ZXJDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKTsKKyAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQo
KSk7CiAgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKIAogICAgIFhGbHVzaChkaXNwbGF5KTsKQEAgLTIxNiw2ICsyNTUsMTIg
QEAgY2Fpcm9fc3VyZmFjZV90KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJm
YWNlRm9yV2lkZ2V0KEd0a1dpZGdldCogd2kKICAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOwog
fQogCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2Fs
bGJhY2soKQoreworICAgIGlmIChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQorICAgICAgICBtX2Rh
bWFnZU5vdGlmeUNhbGxiYWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCmluZGV4IGU1
ZGIwZmE3ZThhZDlhODI1ZTFiNjlmOWU2MmFlMzcwN2UyOWVmYTkuLjg2NWJlM2JjYzRlMjc0YjUw
YTZlNzhlYmUwNTdmOGZjYjljZjM5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCkBAIC0zNSw2ICszNSw4
IEBACiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7CiB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgV2luZG93OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKK3R5cGVkZWYgdm9pZCAo
KkRhbWFnZU5vdGlmeUNhbGxiYWNrKSh2b2lkKik7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDIsMjQgKzQ0LDI1IEBAIGNsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4g
Y3JlYXRlKGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIH5SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdygpOwotCi0gICAgY29uc3QgSW50U2l6ZSYgdXNhYmxlU2l6ZSgpIHsgcmV0dXJuIG1f
dXNhYmxlU2l6ZTsgfQogICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KIAogICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpOwogICAgIEdMQ29u
dGV4dCogY29udGV4dCgpOwogICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlRm9yV2lk
Z2V0KEd0a1dpZGdldCopOwogICAgIFdpbmRvdyB3aW5kb3dJZCgpIHsgcmV0dXJuIG1fd2luZG93
OyB9CisgICAgdm9pZCBjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsKKworICAgIHZvaWQgc2V0
RGFtYWdlTm90aWZ5Q2FsbGJhY2soRGFtYWdlTm90aWZ5Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQq
IGRhdGEpCisgICAgeworICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrID0gY2FsbGJhY2s7
CisgICAgICAgIG1fZGFtYWdlTm90aWZ5RGF0YSA9IGRhdGE7CisgICAgfQogCiBwcml2YXRlOgog
ICAgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmKTsKLQotICAgIHN0
YXRpYyBnYm9vbGVhbiByZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93Kik7Ci0gICAgdm9pZCByZXNpemVMYXRlcigpOwogICAgIHZvaWQgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKIAogICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNpemUgbV91
c2FibGVTaXplOwogICAgIFdpbmRvdyBtX3dpbmRvdzsKICAgICBXaW5kb3cgbV9wYXJlbnRXaW5k
b3c7CiAgICAgUGl4bWFwIG1fcGl4bWFwOwpAQCAtNjcsNiArNzAsMTAgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CiAgICAgdW5zaWduZWQgaW50IG1f
cGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOwogICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVz
aXplOworCisgICAgRGFtYWdlIG1fZGFtYWdlOworICAgIERhbWFnZU5vdGlmeUNhbGxiYWNrIG1f
ZGFtYWdlTm90aWZ5Q2FsbGJhY2s7CisgICAgdm9pZCogbV9kYW1hZ2VOb3RpZnlEYXRhOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBk
YjZjOWIwYmM0ZDAwYmRmZDg0NDE5NjE4YjVhMDhiZDU5MTIwY2Q3Li41YmU5ZWI1NDhlZTAyM2Qx
NDBhMzVkMTY2MjQzM2Q1ODFiYjcxYjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAt
NjYsNiArNjYsOCBAQCBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfQ1BQRgogCSQoTElCWFNMVF9DRkxBR1Mp
IFwKIAkkKFNRTElURTNfQ0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAorCSQoWENPTVBP
U0lURV9MSUJTKSBcCisJJChYREFNQUdFX0xJQlMpIFwKIAkkKFhUX0NGTEFHUykgXAogCSQoWkxJ
Ql9DRkxBR1MpCiAKQEAgLTEwMiw2ICsxMDQsNyBAQCBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19B
UElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCQQog
CSQoU1FMSVRFM19MSUJTKSBcCiAJJChVTklDT0RFX0xJQlMpIFwKIAkkKFhDT01QT1NJVEVfTElC
UykgXAorCSQoWERBTUFHRV9MSUJTKSBcCiAJJChYUkVOREVSX0xJQlMpIFwKIAkkKFhUX0xJQlMp
IFwKIAkkKFdJTk1NX0xJQlMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCmluZGV4
IDQ1ZWY0NzBiNmE3M2RhOTU3Yjc5Y2JlNmZiNDY3MTVhYjI0ZWNhYTIuLjkyNmIyMTlmYjkwZTAw
NzAyOTk5MTA2M2RjZDRmYTkwNzc1MjA1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQuaApAQCAtNjQsNyArNjQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG93UmVw
YWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwogCiAgICAg
dm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdm9pZCBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsK
KworICAgIGVudW0gQ29tcG9zaXRlUHVycG9zZSB7IEZvclJlc2l6ZSwgTm90Rm9yUmVzaXplIH07
CisgICAgdm9pZCBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoQ29tcG9zaXRlUHVycG9zZSA9IE5v
dEZvclJlc2l6ZSk7CisKICAgICB2b2lkIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CiAgICAgYm9v
bCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKICAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0
ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcAppbmRleCA5NWRhNjQ0ZTM2OGExZDc0YzAzMWQxNzI4YTUzNjg3YzhmMjM0Mjgz
Li40NTFjYTBmNGZiYzA3YmM5Y2YyMTc4YjQ3MjU5MDM5Y2FmM2JkZmJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtNjMsMTcgKzYzLDI2IEBAIHN0YXRpYyBJ
bnRTaXplIGdldFdlYlZpZXdTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJu
IEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwogfQogCit2b2lk
IHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJhY2sodm9pZCogZGF0YSkKK3sKKyAgICBndGtf
d2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChkYXRhKSk7Cit9CisKIHZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmluaXRpYWxpemUoKQogewogICAgIGlmIChtX3Jvb3RMYXll
cikKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50U2l6ZSBwYWdlU2l6ZSA9IGdldFdlYlZpZXdT
aXplKG1fd2ViVmlldyk7Ci0gICAgaWYgKCFtX3JlZGlyZWN0ZWRXaW5kb3cpCisgICAgaWYgKCFt
X3JlZGlyZWN0ZWRXaW5kb3cpIHsKICAgICAgICAgbV9yZWRpcmVjdGVkV2luZG93ID0gUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShwYWdlU2l6ZSk7Ci0gICAgZWxzZQorICAgICAg
ICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnNldERhbWFnZU5vdGlmeUNhbGxiYWNrKHJlZGlyZWN0ZWRX
aW5kb3dEYW1hZ2VkQ2FsbGJhY2ssIG1fd2ViVmlldyk7CisgICAgfSBlbHNlCiAgICAgICAgIG1f
cmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKHBhZ2VTaXplKTsKIAorICAgIGlmICghbV9yZWRpcmVj
dGVkV2luZG93KQorICAgICAgICByZXR1cm47CisKICAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZSh0aGlzKTsKICAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZh
bHNlKTsKICAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShwYWdlU2l6ZSk7CkBAIC0xMjAsNyArMTI5
LDcgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c3RvcEFueVBlbmRpbmdM
YXllckZsdXNoKCkKIAogYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxl
ZCgpCiB7Ci0gICAgcmV0dXJuIG1fcm9vdExheWVyICYmIG1fdGV4dHVyZU1hcHBlcjsKKyAgICBy
ZXR1cm4gbV9yZWRpcmVjdGVkV2luZG93ICYmIG1fcm9vdExheWVyICYmIG1fdGV4dHVyZU1hcHBl
cjsKIH0KIAogYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJz
VG9XaW5kb3coY2Fpcm9fdCogY3IsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQpAQCAtMTMwLDE5
ICsxMzksNiBAQCBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJMYXll
cnNUb1dpbmRvdyhjYWlyb190KiBjciwgY29uc3QgSW50UgogICAgIGlmICghZW5hYmxlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0byBwYWludCBh
IHdoaXRlIGJhY2tncm91bmQgKGlmIHRoZSBXZWJWaWV3IGlzbid0IHRyYW5zcGFyZW50KSwgYmVj
YXVzZSB3aGVuIGdyb3dpbmcKLSAgICAvLyB0aGUgcmVkaXJlY3RlZCB3aW5kb3csIHRoZSB1c2Fi
bGUgc2l6ZSBvZiB0aGUgd2luZG93IG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIGFsbG9jYXRpb24g
b2Ygb3VyIHdpZGdldC4KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNob3cgYXJ0aWZhY3RzIGlu
IHRoYXQgY2FzZS4KLSAgICBJbnRTaXplIHVzYWJsZVdpbmRvd1NpemUgPSBtX3JlZGlyZWN0ZWRX
aW5kb3ctPnVzYWJsZVNpemUoKTsKLSAgICBpZiAodXNhYmxlV2luZG93U2l6ZSAhPSBtX3JlZGly
ZWN0ZWRXaW5kb3ctPnNpemUoKSkgewotICAgICAgICBpZiAoIW1fd2ViVmlldy0+cHJpdi0+dHJh
bnNwYXJlbnQpIHsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAxLCAx
KTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3Is
IENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY3IpOwotICAgIH0K
LQogICAgIGNhaXJvX3N1cmZhY2VfdCogd2luZG93U3VyZmFjZSA9IG1fcmVkaXJlY3RlZFdpbmRv
dy0+Y2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CiAgICAgaWYg
KCF3aW5kb3dTdXJmYWNlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3Niw3ICsxNzIsNyBA
QCBHTENvbnRleHQqIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpwcmVwYXJlRm9yUmVu
ZGVyaW5nKCkKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCkKK3ZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQ
dXJwb3NlIHB1cnBvc2UpCiB7CiAgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gcHJlcGFyZUZvclJl
bmRlcmluZygpOwogICAgIGlmICghY29udGV4dCkKQEAgLTE4NSwyMSArMTgxLDE2IEBAIHZvaWQg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgp
CiAgICAgY29uc3QgSW50U2l6ZSYgd2luZG93U2l6ZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+c2l6
ZSgpOwogICAgIGdsVmlld3BvcnQoMCwgMCwgd2luZG93U2l6ZS53aWR0aCgpLCB3aW5kb3dTaXpl
LmhlaWdodCgpKTsKIAorICAgIGlmIChwdXJwb3NlID09IEZvclJlc2l6ZSkgeworICAgICAgICBn
bENsZWFyQ29sb3IoMSwgMSwgMSwgMCk7CisgICAgICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVS
X0JJVCk7CisgICAgfQorCiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CiAg
ICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5wYWludCgpOwogICAg
IG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKIAogICAgIGNvbnRleHQtPnN3YXBCdWZm
ZXJzKCk7Ci0KLSAgICAvLyBGSVhNRTogSXQgc2VlbXMgdGhhdCB3aGVuIHVzaW5nIGRvdWJsZS1i
dWZmZXJpbmcgKGFuZCBvbiBzb21lIGRyaXZlcnMgc2luZ2xlLWJ1ZmZlcmluZykKLSAgICAvLyBh
bmQgWENvbXBvc2l0ZSB3aW5kb3cgcmVkaXJlY3Rpb24sIHR3byBzd2FwIGJ1ZmZlcnMgYXJlIHJl
cXVpcmVkIHRvIGZvcmNlIHRoZSBwaXhtYXAKLSAgICAvLyB0byB1cGRhdGUuIFRoaXMgaXNuJ3Qg
YSBwcm9ibGVtIGR1cmluZyBhbmltYXRpb25zLCBiZWNhdXNlIHN3YXBCdWZmZXIgaXMgY29udGlu
dW91c2x5Ci0gICAgLy8gY2FsbGVkLiBGb3Igbm9uLWFuaW1hdGlvbiBzaXR1YXRpb25zIHdlIHVz
ZSB0aGlzIHRlcnJpYmxlIGhhY2sgdW50aWwgd2UgY2FuIGdldCB0byB0aGUKLSAgICAvLyBib3R0
b20gb2YgdGhlIGlzc3VlLgotICAgIGlmICghdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5
ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKSB7Ci0g
ICAgICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0gICAgICAgIGNvbnRleHQtPnN3YXBCdWZm
ZXJzKCk7Ci0gICAgfQogfQogCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpj
bGVhckV2ZXJ5d2hlcmUoKQpAQCAtMjM2LDcgKzIyNyw4IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdy
YXBoCiAgICAgICAgIHN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpOwogCiAgICAgICAgIC8vIFNo
cmluayB0aGUgb2Zmc2NyZWVuIHdpbmRvdyB0byBzYXZlIG1lbW9yeSB3aGlsZSBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBpcyB0dXJuZWQgb2ZmLgotICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3ct
PnJlc2l6ZShJbnRTaXplKDEsIDEpKTsKKyAgICAgICAgaWYgKG1fcmVkaXJlY3RlZFdpbmRvdykK
KyAgICAgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKEludFNpemUoMSwgMSkpOwog
ICAgICAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllciA9IG51bGxwdHI7CiAgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IG51bGxwdHI7
CkBAIC0yNDUsNiArMjM3LDkgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGgKIAogICAgIC8vIEFk
ZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCiAgICAgaW5pdGlhbGl6ZSgp
OworICAgIGlmICghbV9yZWRpcmVjdGVkV2luZG93KQorICAgICAgICByZXR1cm47CisKICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKIApAQCAt
Mjk1LDcgKzI5MCw4IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlc2l6
ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBuZXdTaXplKQogICAgICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6
ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5o
ZWlnaHQoKSkpOwogCiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBuZXdTaXplKSk7Ci0gICAgZmx1c2hBbmRS
ZW5kZXJMYXllcnMoKTsKKyAgICBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoRm9yUmVzaXplKTsK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAogdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKQEAgLTM1MSwxNCArMzQ3LDEz
IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5
ZXJzKCkKICAgICBtX2xhc3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgIGNvbXBvc2l0
ZUxheWVyc1RvQ29udGV4dCgpOwogCi0gICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURH
RVQobV93ZWJWaWV3KSk7Ci0KICAgICAvLyBJZiBpdCdzIGJlZW4gYSBsb25nIHRpbWUgc2luY2Ug
d2UndmUgYWN0dWFsbHkgcGFpbnRlZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVudHMgbWlnaHQKICAg
ICAvLyBiZSBzdGFydmluZyB0aGUgbWFpbiBsb29wLCB3ZSBzaG91bGQgZm9yY2UgYSBkcmF3IG5v
dy4gVGhpcyBzZWVtcyB0byBwcmV2ZW50IGRpc3BsYXkKICAgICAvLyBsYWcgb24gaHR0cDovLzIw
MTIuYmVlcmNhbXAuY29tLgotICAgIGlmIChtX3JlZHJhd1BlbmRpbmdUaW1lICYmIGN1cnJlbnRU
aW1lKCkgLSBtX3JlZHJhd1BlbmRpbmdUaW1lID4gZ1NjaGVkdWxlRGVsYXkpCisgICAgaWYgKG1f
cmVkcmF3UGVuZGluZ1RpbWUgJiYgY3VycmVudFRpbWUoKSAtIG1fcmVkcmF3UGVuZGluZ1RpbWUg
PiBnU2NoZWR1bGVEZWxheSkgeworICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJ
REdFVChtX3dlYlZpZXcpKTsKICAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMoZ3Rr
X3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSksIEZBTFNFKTsKLSAgICBl
bHNlIGlmICghbV9yZWRyYXdQZW5kaW5nVGltZSkKKyAgICB9IGVsc2UgaWYgKCFtX3JlZHJhd1Bl
bmRpbmdUaW1lKQogICAgICAgICBtX3JlZHJhd1BlbmRpbmdUaW1lID0gY3VycmVudFRpbWUoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBiYTBhYzY5NTUzMDE2ODU0MjMxNzNlYWM4OTk3
ZGNkZjhjNWQzZmE5Li5iMWE5ZjZkMmQzNmRlMDA4YjAwNmY3NDUxNGI5ZTk2ZDYyODkyNjFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTA5LDYgKzEwOSw3IEBAIGxpYndlYmtpdDJndGtfQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBf
bGFfQ1BQCiAJJChMSUJTT1VQX0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKIAkkKFhD
T01QT1NJVEVfQ0ZMQUdTKSBcCisJJChYREFNQUdFX0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdTKQog
CiBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtf
QVBJX01JTk9SX1ZFUlNJT05AX2xhX0NYWEZMQUdTID0gXApAQCAtMTgyLDYgKzE4Myw3IEBAIGxp
YndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElf
TUlOT1JfVkVSU0lPTkBfbGFfTElCCiAJJChVTklDT0RFX0xJQlMpIFwKIAkkKFhSRU5ERVJfTElC
UykgXAogCSQoWENPTVBPU0lURV9MSUJTKSBcCisJJChYREFNQUdFX0xJQlMpIFwKIAkkKFhUX0xJ
QlMpIFwKIAkkKFpMSUJfTElCUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDUzMzhlMmJkM2RkMDZjNzc0
MDhkYmYzYzk5MTVmZjI3YjlkYjU1ZTEuLmZhMDM3MmU4M2NkZGY5ZTM3NDI0YWI2YzNmZTdjMzQy
YWUxMjcxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTc1LDYgKzc1LDEwIEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiB0eXBlZGVmIEhhc2hNYXA8R3RrV2lkZ2V0KiwgSW50UmVjdD4gV2ViS2l0
V2ViVmlld0NoaWxkcmVuTWFwOwogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBy
ZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNrKHZvaWQqIGRhdGEpOworI2VuZGlmCisKIHN0
cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRy
ZW5NYXAgY2hpbGRyZW47CiAgICAgT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50OwpA
QCAtMTExLDcgKzExNSw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKIAog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICBPd25QdHI8UmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c+IHJlZGlyZWN0ZWRXaW5kb3c7Ci0gICAgYm9vbCByZWFkeVRvUmVuZGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHM7CiAjZW5kaWYKIH07CiAKQEAgLTM1MSw3ICszNTQsOCBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSkKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICBw
cml2LT5yZWRpcmVjdGVkV2luZG93ID0gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0
ZShJbnRTaXplKDEsIDEpKTsKLSAgICBwcml2LT5yZWFkeVRvUmVuZGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ1Jlc3VsdHMgPSBmYWxzZTsKKyAgICBpZiAocHJpdi0+cmVkaXJlY3RlZFdpbmRvdykK
KyAgICAgICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+c2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2so
cmVkaXJlY3RlZFdpbmRvd0RhbWFnZWRDYWxsYmFjaywgd2Via2l0V2ViVmlld0Jhc2UpOwogI2Vu
ZGlmCiB9CiAKQEAgLTM2NCwxMCArMzY4LDkgQEAgc3RhdGljIGJvb2wgd2Via2l0V2ViVmlld1Jl
bmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKFdlYktpdFdlYlZpZXdCYXNlKgogICAg
IC8vIFRvIGF2b2lkIGZsYXNoZXMgd2hlbiBpbml0aWFsaXppbmcgYWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcgZm9yIHRoZSBmaXJzdAogICAgIC8vIHRpbWUsIHdlIHdhaXQgdW50aWwgd2Uga25vdyB0
aGVyZSdzIGEgZnJhbWUgcmVhZHkgYmVmb3JlIHJlbmRlcmluZy4KICAgICBXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKLSAgICBpZiAoIXByaXYtPnJl
YWR5VG9SZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cykKKyAgICBpZiAoIXByaXYt
PnJlZGlyZWN0ZWRXaW5kb3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChw
cml2LT5yZWRpcmVjdGVkV2luZG93KTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIGNsaXBSZWN0
LT54LCBjbGlwUmVjdC0+eSwgY2xpcFJlY3QtPndpZHRoLCBjbGlwUmVjdC0+aGVpZ2h0KTsKICAg
ICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBwcml2LT5yZWRpcmVjdGVkV2luZG93LT5jYWly
b1N1cmZhY2VGb3JXaWRnZXQoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOwogICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShjciwgc3VyZmFjZSwgMCwgMCk7CkBAIC00MzAsNyArNDMzLDcgQEAg
c3RhdGljIHZvaWQgcmVzaXplV2ViS2l0V2ViVmlld0Jhc2VGcm9tQWxsb2NhdGlvbihXZWJLaXRX
ZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UKICAgICB9CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCi0gICAgaWYgKHNpemVDaGFuZ2VkKQorICAgIGlmIChzaXplQ2hhbmdlZCAmJiB3ZWJWaWV3
QmFzZS0+cHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKICAgICAgICAgd2ViVmlld0Jhc2UtPnByaXYt
PnJlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZSh2aWV3UmVjdC5zaXplKCkpOwogI2VuZGlmCiAKQEAg
LTgwMSw3ICs4MDQsOCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIFdLQ29udAogI2VuZGlmCiAKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgcHJpdi0+cGFnZVByb3h5LT5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nV2luZG93SWQocHJpdi0+cmVkaXJlY3RlZFdpbmRvdy0+d2luZG93SWQoKSk7
CisgICAgaWYgKHByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCisgICAgICAgIHByaXYtPnBhZ2VQcm94
eS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1dpbmRvd0lkKHByaXYtPnJlZGlyZWN0ZWRXaW5k
b3ctPndpbmRvd0lkKCkpOwogI2VuZGlmCiB9CiAKQEAgLTkyOCwzNyArOTMyLDkgQEAgR2RrRXZl
bnQqIHdlYmtpdFdlYlZpZXdCYXNlVGFrZUNvbnRleHRNZW51RXZlbnQoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYmtpdFdlYlZpZXcKIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLXN0YXRp
YyBnYm9vbGVhbiBxdWV1ZUFub3RoZXJEcmF3T2ZBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0
cyhncG9pbnRlciogd2ViVmlld0Jhc2VQb2ludGVyKQordm9pZCByZWRpcmVjdGVkV2luZG93RGFt
YWdlZENhbGxiYWNrKHZvaWQqIGRhdGEpCiB7Ci0gICAgLy8gVGhlIFdlYlZpZXdCYXNlIG1heSBo
YXZlIGJlZW4gZGVzdHJveWVkIGluIHRoZSB0aW1lIHNpbmNlIHdlIHF1ZXVlZCB0aGlzCi0gICAg
Ly8gZHJhdyBhbmQgdGhlIHRpbWUgd2UgYXJlIGFjdHVhbGx5IGV4ZWN1dGluZy4KLSAgICBpZiAo
ISp3ZWJWaWV3QmFzZVBvaW50ZXIpIHsKLSAgICAgICAgZmFzdEZyZWUod2ViVmlld0Jhc2VQb2lu
dGVyKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKCp3ZWJWaWV3QmFzZVBvaW50
ZXIpOwotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7
Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYtPnJlYWR5VG9SZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUmVzdWx0cyA9IHRydWU7Ci0KLSAgICBnX29iamVjdF9yZW1vdmVfd2Vha19wb2ludGVyKEdf
T0JKRUNUKHdlYlZpZXdCYXNlKSwgd2ViVmlld0Jhc2VQb2ludGVyKTsKLSAgICBmYXN0RnJlZSh3
ZWJWaWV3QmFzZVBvaW50ZXIpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lkIHdlYmtp
dFdlYlZpZXdCYXNlUXVldWVEcmF3T2ZBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyhXZWJL
aXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCi17Ci0gICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3
KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKLQotICAgIC8vIFJlZHJhdyBhZ2Fpbiwgb25lIGZy
YW1lIGxhdGVyLCBhcyBpdCBtaWdodCB0YWtlIHNvbWUgdGltZSBmb3IgdGhlIG5ldyBHTCBmcmFt
ZSB0byBiZSBhdmFpbGFibGUuCi0gICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgZGlzcGxheSBmcm9t
IGFsd2F5cyBiZWluZyBvbmUgZnJhbWUgYmVoaW5kIGluIHRoZSBjYXNlIEdMIGhhc24ndCB5ZXQg
ZmluaXNoZWQKLSAgICAvLyByZW5kZXJpbmcgdG8gdGhlIHdpbmRvdy4KLSAgICAvLyBUT0RPOiBB
ZGQgWERhbWFnZSBzdXBwb3J0IHRvIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHRvIGFjY29t
cGxpc2ggdGhpcy4KLSAgICBncG9pbnRlciogd2ViVmlld0Jhc2VQb2ludGVyID0gc3RhdGljX2Nh
c3Q8Z3BvaW50ZXIqPihmYXN0TWFsbG9jKHNpemVvZihncG9pbnRlcikpKTsKLSAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHdlYlZpZXdCYXNlKSwgd2ViVmlld0Jhc2VQb2lu
dGVyKTsKLSAgICAqd2ViVmlld0Jhc2VQb2ludGVyID0gd2ViVmlld0Jhc2U7Ci0gICAgZ190aW1l
b3V0X2FkZCgxMDAwIC8gNjAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHF1ZXVlQW5v
dGhlckRyYXdPZkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1bHRzKSwgd2ViVmlld0Jhc2VQb2lu
dGVyKTsKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChkYXRhKSk7CiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDI4YzVk
YTkwYWUxMDk0MjZmZjdjOWU2ZWEzNDNkZjBiNjI5ZDcyNWIuLjE1M2M0ZTM2Y2Y4YzdlZDhjZmE2
Zjg3ZWRkZTAwYWU2NjQ4ZDI5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKQEAgLTcxNSw3ICs3MTUsNiBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEspICYm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdXaW5kb3dJZCh1aW50NjRfdCBuYXRpdmVXaW5kb3dJZCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRl
V2lkZ2V0KCk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRl
cyhib29sIGZsYWcpIHsgbV9zdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzID0gZmxhZzsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5k
ZXggYTRhM2M1N2JmMmM5OTIyYTFmZTRlOWY5YjNmNDEzZDNlNzU2NzQzZC4uYzU0MWQyYzE0NDAz
ZGJmYmI1YzQxYjRkNTc3Zjg0ZGE0ZGM0MjM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xNzcsMTAgKzE3Nyw2IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgQmluZEFjY2Vzc2liaWxpdHlUcmVlKFdURjo6
U3RyaW5nIHBsdWdJRCkKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCi0gICAgSW52YWxpZGF0ZVdpZGdldCgpCi0jZW5kaWYKLQogICAgICMgQmFj
a0ZvcndhcmQgbWVzc2FnZXMKICAgICBCYWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlE
KQogICAgIEJhY2tGb3J3YXJkR29Ub0l0ZW0odWludDY0X3QgaXRlbUlEKSAtPiAoV2ViS2l0OjpT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCA4MDg4
MWJmZTcwYjlhM2QxMGQ1YjQyY2M1MDcxODVhMjIzNjdlNzgyLi42YjAxYmIwMjc4MDIxNWZkNDgz
MGIzMzE0ODg2ZDU5ZjdlYmZlYzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQodWludDY0X3QgbmF0aXZl
V2luZG93SWQpCiB7CiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQobmF0aXZlV2luZG93SWQpLCBtX3BhZ2VJRCk7
CiB9Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjppbnZhbGlkYXRlV2lkZ2V0KCkKLXsKLSAgICB3ZWJr
aXRXZWJWaWV3QmFzZVF1ZXVlRHJhd09mQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMoV0VC
S0lUX1dFQl9WSUVXX0JBU0Uoc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEltcGwqPihtX3BhZ2VDbGll
bnQpLT52aWV3V2lkZ2V0KCkpKTsKLX0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDc3NWI4
MjcwYTljMGUwNzQ5YTNlMzI3MTAzNTJiYTZlZmE4Yjc3ZWIuLjUyMzcxMjQyY2I5ZGI3Njg2MWZl
MzkyZmE4Mjk0MDgwNjVjNWJjYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaApAQCAtNDU5LDcgKzQ1OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRs
ZU1vdXNlUHJlc3NlZEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpOwog
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdXaW5kb3dJZChpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZSk7Ci0gICAgdm9pZCBpbnZh
bGlkYXRlV2lkZ2V0KCk7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcAppbmRl
eCAwOThhNGM3MTYzOGM5ZTc1M2E0NzE1Y2FhMjUwMjg4OWUxNTJlMWUzLi5iY2IyYmVmZGUzNGZh
MDBmZmI2ZTRlNmZlYjA2MTYwZTk1YjZlOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTMx
Nyw3ICszMTcsNiBAQCB2b2lkIExheWVyVHJlZUhvc3RHdGs6OmNvbXBvc2l0ZUxheWVyc1RvQ29u
dGV4dChDb21wb3NpdGVQdXJwb3NlIHB1cnBvc2UpCiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQ
YWludGluZygpOwogCiAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLSAgICBtX3dlYlBhZ2Ut
PmludmFsaWRhdGVXaWRnZXQoKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0R3RrOjpmbHVzaEFu
ZFJlbmRlckxheWVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCBkOWRkZTgxYTI1ZGI3NDQyNjZhNWU2N2E4ZmE5
YmE2OTlhMGFmZDVhLi5lMjhlNzRmMzk5OWJkODMxYTNiOGE4MDYwMDU2ZGExOGRlZjllMjUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFn
ZUd0ay5jcHAKQEAgLTE2MCwxMSArMTYwLDYgQEAgdm9pZCBXZWJQYWdlOjpzZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nV2luZG93SWQoaW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUpCiB7CiAgICAg
bV9uYXRpdmVXaW5kb3dIYW5kbGUgPSBuYXRpdmVXaW5kb3dIYW5kbGU7CiB9Ci0KLXZvaWQgV2Vi
UGFnZTo6aW52YWxpZGF0ZVdpZGdldCgpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpJbnZhbGlkYXRlV2lkZ2V0KCkpOwotfQogI2VuZGlmCiAKIGJvb2wgV2ViUGFnZTo6aGFu
ZGxlTW91c2VQcmVzc2VkRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1v
dXNlRXZlbnQpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggOGRjNTNm
NWM1OTk4ZjAwZTYzZmNmNTIyZTc4ODM0NmQxYjVkNGRmMC4uOGMyZTZlMGQ4MWE4NWU0NWFkZTE3
ZDMzNmM2ZDEwN2I5ODhhMjE2ZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA5LTIyICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2UgWERhbWFnZSB0byBzaW1wbGlmeSBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTcyNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgWERhbWFnZSB0byBxdWV1ZSByZWRyYXdzIG9mIHRoZSB3aWRn
ZXQgd2hlbiByZWRpcmVjdGluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICB0byBh
biBvZmZzY3JlZW4gd2luZG93LiBUaGlzIGFsbG93cyByZW1vdmluZyBhIGZpbmlja3kgdGltZXIt
YmFzZWQgYXBwcm9hY2gsIGltcHJvdmVzCisgICAgICAgIHBlcmZvcm1hbmNlLCBhbmQgYWxsb3dz
IHNpbXBsaWZ5aW5nIHRoaW5ncyBncmVhdGx5LgorCisgICAgICAgICogY29uZmlndXJlLmFjOiBB
ZGQgc3VwcG9ydCBmb3IgZmluZGluZyBYRGFtYWdlIHZpYSBwa2ctY29uZmlnLgorCiAyMDEyLTA5
LTIxICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSFRN
TE1lZGlhRWxlbWVudCBpc24ndCBnYXJiYWdlIGNvbGxlY3RlZCBiZXR3ZWVuIGRvY3VtZW50IHJl
bG9hZHMKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmMDE5
NmU5MmJmYjgzMzk3Y2NhOTk2N2I2ZDczMDdhYzhkYTQ2MWZmLi5jOGYxMTBkYzE0MDQzNTliYzM3
YmIyZjZjYzBmNmIxNGVhOTZkMDA2IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29u
ZmlndXJlLmFjCkBAIC01NjcsOCArNTY3LDExIEBAIEFDX01TR19SRVNVTFQoWyR3aXRoX2FjY2Vs
ZXJhdGlvbl9iYWNrZW5kXSkKIAogaWYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQi
ID0gIm9wZW5nbCI7IHRoZW4KICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4
Y29tcG9zaXRlXSk7CisgICAgUEtHX0NIRUNLX01PRFVMRVMoW1hEQU1BR0VdLCBbeGRhbWFnZV0p
OwogICAgIEFDX1NVQlNUKFhDT01QT1NJVEVfQ0ZMQUdTKQogICAgIEFDX1NVQlNUKFhDT01QT1NJ
VEVfTElCUykKKyAgICBBQ19TVUJTVChYREFNQUdFX0NGTEFHUykKKyAgICBBQ19TVUJTVChYREFN
QUdFX0xJQlMpCiBmaQogCiAjIE9wZW5HTCBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdCAoYWxvbmcg
d2l0aCBXZWJHTCBhbmQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcpLCBidXQgaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165264</attachid>
            <date>2012-09-22 08:48:16 -0700</date>
            <delta_ts>2012-09-26 09:03:17 -0700</delta_ts>
            <desc>Handle another situation where the creation of the RedirectedXCompositeWindow can fail</desc>
            <filename>bug-97267-20120922084739.patch</filename>
            <type>text/plain</type>
            <size>33762</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRjNTQ4YjUwMGFiYjYx
NjQzOWEyNzdkNjAwNmYwYmM1NTcxMTA0MS4uZjFmOTA0MmEzMTMyYTM1ZmNlOWNhMmNjYWJhMmVi
NTI1YTZmMjg0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTIyICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2Ug
WERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgWERhbWFnZSB0byBxdWV1
ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRpcmVjdGluZyBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4gd2luZG93LiBUaGlzIGFsbG93cyByZW1v
dmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9hY2gsIGltcHJvdmVzCisgICAgICAgIHBl
cmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5nIHRoaW5ncyBncmVhdGx5LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCB0aGUgWERhbWFnZSBDRkxBR1MgaW4gdGhlIGFw
cHJvcHJpYXRlIHBsYWNlLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRXaW5kb3dIYXNoTWFwKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJYRGFtYWdlRXZlbnQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUpOiBGYWlsIHRv
IGNyZWF0ZSB0aGUgd2luZG93IGlmCisgICAgICAgIHRoZSBYU2VydmVyIGRvZXNuJ3Qgc3VwcG9y
dCBYRGFtYWdlIGFuZCBYQ29tcG9zaXRlLgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KTogQWRkIFhEYW1hZ2Ug
c3VwcG9ydCBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSBtX3VzYWJsZSBzaXplIGRpc3RpbmN0aW9u
LiBBZGQgdGhlIHdpbmRvdyB0aGUgd2luZG93IEhhc2hNYXAgbm93LgorICAgICAgICAoV2ViQ29y
ZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyk6IFJlbW92ZSB0aGUgd2luZG93CisgICAgICAgIGZyb20gdGhlIHdpbmRvdyBIYXNoTWFwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZSk6IE5v
dyBqdXN0IGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgc2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpzZXREYW1hZ2VO
b3RpZnlDYWxsYmFjayk6IEFkZGVkLgorCiAyMDEyLTA5LTIyICBUaGllcnJ5IFJlZGluZyAgPHRo
aWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPgogCiAgICAgICAgIFtHVEtdIEJ1aWxkIGlz
IGJyb2tlbiB3aXRoIEdMaWIgVW5pY29kZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYzFh
ZmE1M2VkYzliNTBiNTIxZjlkMzBkYTI3YWZhYmY4OTQ0YTYyZi4uOGNiN2M1NTIwNjI0MWQzODdi
YjA1YWY0OTk1OWIxYjVlYWJiZDE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTA5LTIyICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBVc2UgWERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTcyNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgWERhbWFnZSB0byBxdWV1ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRpcmVjdGlu
ZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4gd2luZG93
LiBUaGlzIGFsbG93cyByZW1vdmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9hY2gsIGlt
cHJvdmVzCisgICAgICAgIHBlcmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5nIHRoaW5n
cyBncmVhdGx5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCB0aGUgWERhbWFnZSBD
RkxBR1MgYW5kIExJQlMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
KTogQ2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0CisgICAg
ICAgIHRvIGFjY2VwdCBhbiBlbnVtIHRoYXQgZXhwbGFpbnMgdGhlIGNvbXBvc2l0ZSBwdXJwb3Nl
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
R0wuY3BwOgorICAgICAgICAoV2ViS2l0OjpyZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNr
KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
Ojppbml0aWFsaXplKTogSGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlcmUKKyAgICAgICAgdGhlIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHJldHVybnMgYSBudWxsIHBvaW50ZXIuCisgICAgICAg
IChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJM
YXllcnNUb1dpbmRvdyk6IFJlbW92ZSB0aGUgY29kZSBoYW5kbGluZworICAgICAgICB0aGUgdXNh
YmxlIHNpemUgb2YgdGhlIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LiBUaGUgdXNhYmxlIHNp
emUgaXMgbm93IGFsd2F5cyBlcXVhbAorICAgICAgICB0byB0aGUgc2l6ZS4KKyAgICAgICAgKFdl
YktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0ZUxheWVyc1RvQ29u
dGV4dCk6IFdoZW4gZHJhd2luZyBmb3IgYQorICAgICAgICByZXNpemUsIGZpcnN0IGNsZWFyIHRo
ZSBlbnRpcmUgY29udGV4dC4gUmVtb3ZlIHRoZSBkb3VibGUgc3dhcC1idWZmZXIsIGFzIGl0J3Mg
bm8KKyAgICAgICAgbG9uZ2VyIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKTogSGFuZGxlIHRo
ZSBjYXNlIHRoYXQKKyAgICAgICAgdGhlIHJlZGlyZWN0ZWQgd2luZG93IGlzIG51bGwuCisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5
ZXIpOiBJbnN0ZWFkIG9mIGRvaW5nIGFub3RoZXIKKyAgICAgICAgaW1tZWRpYXRlIGxheWVyIGZs
dXNoLCBqdXN0IHJlY29tcG9zaXRlIHRoZSBjdXJyZW50IGxheWVyIHN0YXRlIGFuZCBzY2hlZHVs
ZSBhIG5ldworICAgICAgICBmbHVzaC4gVGhpcyBzaG91bGQgbWFrZSByZXNpemluZyBmYXN0ZXIu
CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaEFu
ZFJlbmRlckxheWVycyk6IFdlIG5vIGxvbmdlciBuZWVkIHRvCisgICAgICAgIHF1ZXVlIGEgcmVk
cmF3LCB1bmxlc3Mgd2Ugd2FudCB0byBmb3JjZSBvbmUuCisKIDIwMTItMDktMTkgIERhbmlsbyBD
ZXNhciBMZW1lcyBkZSBQYXVsYSAgPGRhbmlsby5jZXNhckBjb2xsYWJvcmEuY28udWs+CiAKICAg
ICAgICAgW2d0a10gYWRkIGVuYWJsZS1tZWRpYS1zdHJlYW0gdG8gd2Vic2V0dGluZ3MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCA1Yjc0OGRmOTU5ZmZmNTBjYmM3Yzk0ZjJkNGFlYTRlMmM4Y2I3ZWFiLi44NjMyOGJj
MDBkOTBmMzYwODkxZDgyYTdhMzE3NTJmMDRjMDA0YjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzMgQEAKKzIwMTItMDktMjIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFVzZSBYRGFtYWdlIHRvIHNpbXBsaWZ5IFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NzI2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVzZSBYRGFtYWdlIHRvIHF1ZXVlIHJlZHJhd3Mgb2YgdGhlIHdpZGdldCB3aGVuIHJlZGly
ZWN0aW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCisgICAgICAgIHRvIGFuIG9mZnNjcmVlbiB3
aW5kb3cuIFRoaXMgYWxsb3dzIHJlbW92aW5nIGEgZmluaWNreSB0aW1lci1iYXNlZCBhcHByb2Fj
aCwgaW1wcm92ZXMKKyAgICAgICAgcGVyZm9ybWFuY2UsIGFuZCBhbGxvd3Mgc2ltcGxpZnlpbmcg
dGhpbmdzIGdyZWF0bHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIHRoZSBYRGFt
YWdlIENGTEFHUyBhbmQgTElCUyB0byB0aGUgYXBwcm9wcmlhdGUgcGxhY2VzLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKF9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUpOiBSZW1vdmUgcmVhZHlUb1JlbmRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSZXN1bHRzIGFzCisgICAgICAgIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQpOiBIYW5kbGUgdGhlIHNpdHVhdGlvbiB3
aGVyZSB0aGUgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cKKyAgICAgICAgaXMgbnVsbC4KKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdSZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyk6
IERpdHRvLgorICAgICAgICAocmVzaXplV2ViS2l0V2ViVmlld0Jhc2VGcm9tQWxsb2NhdGlvbik6
IERpdHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKTogRGl0dG8u
CisgICAgICAgIChyZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNrKTogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBSZW1vdmUgSW52YWxpZGF0ZVdpZGdldCBt
ZXNzYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcDogRGl0dG8u
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDogRGl0dG8uCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KTogTm8g
bG9uZ2VyIG5lZWQgdG8KKyAgICAgICAgdHJpZ2dlciB0aGUgaW52YWxpZGF0ZVdpbmRvdyBtZXNz
YWdlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6IERp
dHRvLgorCiAyMDEyLTA5LTIxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgRml4IHRoZSBMaW9uIGFuZCBTbm93IExlb3BhcmQgYnVpbGRzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCBjZmQzZjhmMTBlZTY5ODEwM2MzZjBmOTQxMmU5NTAwMzU0OTc0NzBlLi4wMzIyMTQ3
Y2ZlN2Q1OTA1NDNjNzkxYWM2Y2M1ZmYyZWM4MWI0ZmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtNjk0LDYgKzY5NCw3IEBAIGxpYldlYkNvcmVHdGtfbGFfQ1BQRkxBR1MgPSBcCiAJJChTUUxJ
VEUzX0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKIAkkKFhDT01QT1NJVEVfQ0ZMQUdT
KSBcCisJJChYREFNQUdFX0NGTEFHUykgXAogCSQoWFJFTkRFUl9DRkxBR1MpIFwKIAkkKFhUX0NG
TEFHUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKaW5kZXggMGQ3YmRiYTQzNjAzZTM3OTE1NjkwYzZl
MWY5YjQ4OGQzMDRjZjNmYy4uNWU2OWI0NDUwNGE4MWRlNTI1ZGI0NTVhYzIwYjNiYmViM2Q4NmQ0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0zMSwyOCArMzEsODcgQEAKICNpbmNsdWRlICJH
TENvbnRleHRHTFguaCIKICNpbmNsdWRlIDxHTC9nbHguaD4KICNpbmNsdWRlIDxYMTEvZXh0ZW5z
aW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgog
I2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2luY2x1ZGUg
PGdsaWIuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdyo+IFdpbmRvd0hhc2hNYXA7CitzdGF0aWMgV2luZG93SGFzaE1h
cCYgZ2V0V2luZG93SGFzaE1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dI
YXNoTWFwLCB3aW5kb3dIYXNoTWFwLCAoKSk7CisgICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Cit9
CisKK3N0YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKK3N0YXRpYyBHZGtGaWx0ZXJSZXR1cm4g
ZmlsdGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQs
IHZvaWQqKQoreworICAgIFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2Rr
WEV2ZW50KTsKKyAgICBpZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFt
YWdlTm90aWZ5KQorICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKworICAgIFhE
YW1hZ2VOb3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VO
b3RpZnlFdmVudCo+KHhFdmVudCk7CisgICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9
IGdldFdpbmRvd0hhc2hNYXAoKTsKKyAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2lu
ZG93SGFzaE1hcC5maW5kKGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7CisgICAgaWYgKGkgPT0gd2lu
ZG93SGFzaE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisK
KyAgICBpLT5zZWNvbmQtPmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOworICAgIFhEYW1hZ2VT
dWJ0cmFjdChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSwg
ZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7CisgICAgcmV0dXJuIEdES19GSUxURVJf
UkVNT1ZFOworfQorCitzdGF0aWMgYm9vbCBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKCkK
K3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29s
IGhhc0V4dGVuc2lvbnMgPSBmYWxzZTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAg
cmV0dXJuIGhhc0V4dGVuc2lvbnM7CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBp
bnQgZXJyb3JCYXNlOworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExB
WShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBpZiAoIVhEYW1hZ2VRdWVyeUV4dGVu
c2lvbihkaXNwbGF5LCAmZ0RhbWFnZUV2ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGludCBldmVudEJhc2U7CisgICAgaWYgKCFYQ29tcG9zaXRlUXVl
cnlFeHRlbnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFdlIG5lZWQgdG8gc3VwcG9ydCBYQ29tcG9zaXRlIHZlcnNp
b24gMC4yLgorICAgIGludCBtYWpvciwgbWlub3I7CisgICAgWENvbXBvc2l0ZVF1ZXJ5VmVyc2lv
bihkaXNwbGF5LCAmbWFqb3IsICZtaW5vcik7CisgICAgaWYgKG1ham9yIDwgMCB8fCAoIW1ham9y
ICYmIG1pbm9yIDwgMikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhc0V4dGVuc2lv
bnMgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCiBQYXNzT3duUHRyPFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93PiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdyhzaXplKSk7CisgICAgcmV0dXJuIHN1cHBvcnRzWERhbWFnZUFuZFhDb21w
b3NpdGUoKSA/IGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhzaXplKSkg
OiBudWxscHRyOwogfQogCiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fdXNhYmxlU2l6ZShz
aXplKQorICAgIDogbV9zaXplKHNpemUpCiAgICAgLCBtX3dpbmRvdygwKQogICAgICwgbV9wYXJl
bnRXaW5kb3coMCkKICAgICAsIG1fcGl4bWFwKDApCiAgICAgLCBtX3N1cmZhY2UoMCkKICAgICAs
IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKDApCiAgICAgLCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJS
ZXNpemUoZmFsc2UpCisgICAgLCBtX2RhbWFnZSgwKQorICAgICwgbV9kYW1hZ2VOb3RpZnlDYWxs
YmFjaygwKQorICAgICwgbV9kYW1hZ2VOb3RpZnlEYXRhKDApCiB7Ci0gICAgRGlzcGxheSogZGlz
cGxheSA9IEdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSgpOworICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKIAog
ICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gY29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9j
b21tb24vZ3B1L2ltYWdlX3RyYW5zcG9ydF9zdXJmYWNlX2xpbnV4LmNjCiAgICAgWFNldFdpbmRv
d0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKQEAgLTgxLDYgKzE0MCwxMCBAQCBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50
U2l6ZSYgc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0
ZXMpOwogICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOwogCisgICAgaWYgKGdldFdp
bmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcigw
LCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDAp
OworICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5kb3csIHRoaXMpOworCiAgICAgd2hp
bGUgKDEpIHsKICAgICAgICAgWEV2ZW50IGV2ZW50OwogICAgICAgICBYV2luZG93RXZlbnQoZGlz
cGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CkBAIC04OCw1NCAr
MTUxLDMwIEBAIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dpbmRvdywgTm9FdmVudE1hc2spOwotCiAgICAg
WENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fd2luZG93LCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7Ci0KLSAgICByZXNpemUoc2l6ZSk7CisgICAgbV9kYW1hZ2UgPSBYRGFtYWdl
Q3JlYXRlKGRpc3BsYXksIG1fd2luZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkpOwogfQogCiBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCkK
IHsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7
Ci0gICAgaWYgKG1fd2luZG93KQotICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dp
bmRvdyk7Ci0gICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICBYRGVzdHJveVdpbmRvdyhk
aXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7Ci0gICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZh
Y2UoKTsKLQotICAgIGlmIChtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCkKLSAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsKLX0KKyAgICBBU1NFUlQobV9kYW1h
Z2UpOworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgQVNTRVJUKG1fcGFyZW50V2luZG93KTsK
IAotZ2Jvb2xlYW4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZUxhdGVyQ2FsbGJh
Y2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqIHdpbmRvdykKLXsKLSAgICB3aW5kb3ctPnJl
c2l6ZUxhdGVyKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQorICAgIGdldFdpbmRvd0hhc2hNYXAo
KS5yZW1vdmUobV93aW5kb3cpOworICAgIGlmIChnZXRXaW5kb3dIYXNoTWFwKCkuaXNFbXB0eSgp
KQorICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9maWx0ZXIoMCwgcmVpbnRlcnByZXRfY2FzdDxH
ZGtGaWx0ZXJGdW5jPihmaWx0ZXJYRGFtYWdlRXZlbnQpLCAwKTsKIAotdm9pZCBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXIoKQotewotICAgIG1fdXNhYmxlU2l6ZSA9IG1f
c2l6ZTsKLSAgICBtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCA9IDA7CisgICAgRGlzcGxheSogZGlz
cGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwor
ICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdlKTsKKyAgICBYRGVzdHJveVdpbmRv
dyhkaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9wYXJl
bnRXaW5kb3cpOworICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CiB9CiAKIHZv
aWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewotICAgIC8vIFdoZW4gZW5sYXJnaW5nIGEgcmVkaXJlY3RlZCB3aW5kb3csIGZvciB0aGUg
Zmlyc3QgcmVuZGVyLCB0aGUgbmV3bHkgZXhwb3NlZCBhcmVhcyBzZWVtCi0gICAgLy8gdG8gY29u
dGFpbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiBJbnRlbCBkcml2ZXJzLiBUbyBhdm9pZCByZW5k
ZXJpbmcgYXJ0aWZhY3RzIHdoaWxlCi0gICAgLy8gcmVzaXppbmcsIHdlIHdhaXQgdG8gcmVuZGVy
IHRob3NlIG5ldyBhcmVhcyB1bnRpbCBhZnRlciBhIHNob3J0IHRpbWVvdXQuIFRodXMsIHRoZQot
ICAgIC8vICJ1c2FibGUgc2l6ZSIgb2YgdGhlIHdpbmRvdyBpcyBzbWFsbGVyIHRoYW4gdGhlIGFj
dHVhbCBzaXplIG9mIHRoZSB3aW5kb3cgZm9yIHRoZSBmaXJzdAotICAgIC8vIHJlbmRlci4KLSAg
ICBtX3VzYWJsZVNpemUgPSBzaXplLnNocnVua1RvKG1fdXNhYmxlU2l6ZSk7Ci0gICAgaWYgKG1f
dXNhYmxlU2l6ZS53aWR0aCgpIDwgc2l6ZS53aWR0aCgpIHx8IG1fdXNhYmxlU2l6ZS5oZWlnaHQo
KSA8IHNpemUuaGVpZ2h0KCkpIHsgLy8gVGhlIHdpbmRvdyBpcyBncm93aW5nLgotICAgICAgICAv
LyBXZSdyZSBiZWluZyB2ZXJ5IGNvbnNlcnZhdGl2ZSBoZXJlLiBJbnN0ZWFkIG9mIHJpc2tpbmcg
ZHJhd2luZyBhcnRpZmFjdHMgd2hpbGUgZG9pbmcgY29udGludW91cwotICAgICAgICAvLyBvcGFx
dWUgcmVzaXppbmcsIHdlIGVyciBvbiB0aGUgc2lkZSBvZiBoYXZpbmcgbW9yZSB1bmRyYXduIGFy
ZWFzLgotICAgICAgICBpZiAobV9wZW5kaW5nUmVzaXplU291cmNlSWQpCi0gICAgICAgICAgICBn
X3NvdXJjZV9yZW1vdmUobV9wZW5kaW5nUmVzaXplU291cmNlSWQpOwotICAgICAgICBtX3BlbmRp
bmdSZXNpemVTb3VyY2VJZCA9IGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4ocmVzaXplTGF0ZXJDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKTsKKyAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQo
KSk7CiAgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKIAogICAgIFhGbHVzaChkaXNwbGF5KTsKQEAgLTIxNiw2ICsyNTUsMTIg
QEAgY2Fpcm9fc3VyZmFjZV90KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJm
YWNlRm9yV2lkZ2V0KEd0a1dpZGdldCogd2kKICAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOwog
fQogCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2Fs
bGJhY2soKQoreworICAgIGlmIChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQorICAgICAgICBtX2Rh
bWFnZU5vdGlmeUNhbGxiYWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCmluZGV4IGU1
ZGIwZmE3ZThhZDlhODI1ZTFiNjlmOWU2MmFlMzcwN2UyOWVmYTkuLjg2NWJlM2JjYzRlMjc0YjUw
YTZlNzhlYmUwNTdmOGZjYjljZjM5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCkBAIC0zNSw2ICszNSw4
IEBACiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7CiB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgV2luZG93OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKK3R5cGVkZWYgdm9pZCAo
KkRhbWFnZU5vdGlmeUNhbGxiYWNrKSh2b2lkKik7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDIsMjQgKzQ0LDI1IEBAIGNsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4g
Y3JlYXRlKGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIH5SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdygpOwotCi0gICAgY29uc3QgSW50U2l6ZSYgdXNhYmxlU2l6ZSgpIHsgcmV0dXJuIG1f
dXNhYmxlU2l6ZTsgfQogICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KIAogICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpOwogICAgIEdMQ29u
dGV4dCogY29udGV4dCgpOwogICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlRm9yV2lk
Z2V0KEd0a1dpZGdldCopOwogICAgIFdpbmRvdyB3aW5kb3dJZCgpIHsgcmV0dXJuIG1fd2luZG93
OyB9CisgICAgdm9pZCBjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsKKworICAgIHZvaWQgc2V0
RGFtYWdlTm90aWZ5Q2FsbGJhY2soRGFtYWdlTm90aWZ5Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQq
IGRhdGEpCisgICAgeworICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrID0gY2FsbGJhY2s7
CisgICAgICAgIG1fZGFtYWdlTm90aWZ5RGF0YSA9IGRhdGE7CisgICAgfQogCiBwcml2YXRlOgog
ICAgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmKTsKLQotICAgIHN0
YXRpYyBnYm9vbGVhbiByZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93Kik7Ci0gICAgdm9pZCByZXNpemVMYXRlcigpOwogICAgIHZvaWQgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKIAogICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNpemUgbV91
c2FibGVTaXplOwogICAgIFdpbmRvdyBtX3dpbmRvdzsKICAgICBXaW5kb3cgbV9wYXJlbnRXaW5k
b3c7CiAgICAgUGl4bWFwIG1fcGl4bWFwOwpAQCAtNjcsNiArNzAsMTAgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CiAgICAgdW5zaWduZWQgaW50IG1f
cGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOwogICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVz
aXplOworCisgICAgRGFtYWdlIG1fZGFtYWdlOworICAgIERhbWFnZU5vdGlmeUNhbGxiYWNrIG1f
ZGFtYWdlTm90aWZ5Q2FsbGJhY2s7CisgICAgdm9pZCogbV9kYW1hZ2VOb3RpZnlEYXRhOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBk
YjZjOWIwYmM0ZDAwYmRmZDg0NDE5NjE4YjVhMDhiZDU5MTIwY2Q3Li41YmU5ZWI1NDhlZTAyM2Qx
NDBhMzVkMTY2MjQzM2Q1ODFiYjcxYjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAt
NjYsNiArNjYsOCBAQCBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfQ1BQRgogCSQoTElCWFNMVF9DRkxBR1Mp
IFwKIAkkKFNRTElURTNfQ0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAorCSQoWENPTVBP
U0lURV9MSUJTKSBcCisJJChYREFNQUdFX0xJQlMpIFwKIAkkKFhUX0NGTEFHUykgXAogCSQoWkxJ
Ql9DRkxBR1MpCiAKQEAgLTEwMiw2ICsxMDQsNyBAQCBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19B
UElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCQQog
CSQoU1FMSVRFM19MSUJTKSBcCiAJJChVTklDT0RFX0xJQlMpIFwKIAkkKFhDT01QT1NJVEVfTElC
UykgXAorCSQoWERBTUFHRV9MSUJTKSBcCiAJJChYUkVOREVSX0xJQlMpIFwKIAkkKFhUX0xJQlMp
IFwKIAkkKFdJTk1NX0xJQlMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCmluZGV4
IDQ1ZWY0NzBiNmE3M2RhOTU3Yjc5Y2JlNmZiNDY3MTVhYjI0ZWNhYTIuLjkyNmIyMTlmYjkwZTAw
NzAyOTk5MTA2M2RjZDRmYTkwNzc1MjA1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQuaApAQCAtNjQsNyArNjQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG93UmVw
YWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwogCiAgICAg
dm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdm9pZCBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsK
KworICAgIGVudW0gQ29tcG9zaXRlUHVycG9zZSB7IEZvclJlc2l6ZSwgTm90Rm9yUmVzaXplIH07
CisgICAgdm9pZCBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoQ29tcG9zaXRlUHVycG9zZSA9IE5v
dEZvclJlc2l6ZSk7CisKICAgICB2b2lkIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CiAgICAgYm9v
bCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKICAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0
ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcAppbmRleCA5NWRhNjQ0ZTM2OGExZDc0YzAzMWQxNzI4YTUzNjg3YzhmMjM0Mjgz
Li5mMWIxMGI5Y2MwNDMyNzU3YzNhMWRlNWNjMTY4NjFmYmZhNmE0ZGRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtNjMsMTcgKzYzLDI2IEBAIHN0YXRpYyBJ
bnRTaXplIGdldFdlYlZpZXdTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJu
IEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwogfQogCit2b2lk
IHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJhY2sodm9pZCogZGF0YSkKK3sKKyAgICBndGtf
d2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChkYXRhKSk7Cit9CisKIHZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmluaXRpYWxpemUoKQogewogICAgIGlmIChtX3Jvb3RMYXll
cikKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50U2l6ZSBwYWdlU2l6ZSA9IGdldFdlYlZpZXdT
aXplKG1fd2ViVmlldyk7Ci0gICAgaWYgKCFtX3JlZGlyZWN0ZWRXaW5kb3cpCi0gICAgICAgIG1f
cmVkaXJlY3RlZFdpbmRvdyA9IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUocGFn
ZVNpemUpOwotICAgIGVsc2UKKyAgICBpZiAoIW1fcmVkaXJlY3RlZFdpbmRvdykgeworICAgICAg
ICBpZiAobV9yZWRpcmVjdGVkV2luZG93ID0gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNy
ZWF0ZShwYWdlU2l6ZSkpCisgICAgICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnNldERhbWFn
ZU5vdGlmeUNhbGxiYWNrKHJlZGlyZWN0ZWRXaW5kb3dEYW1hZ2VkQ2FsbGJhY2ssIG1fd2ViVmll
dyk7CisgICAgfSBlbHNlCiAgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKHBhZ2VT
aXplKTsKIAorICAgIGlmICghbV9yZWRpcmVjdGVkV2luZG93KQorICAgICAgICByZXR1cm47CisK
ICAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKICAgICBtX3Jv
b3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKICAgICBtX3Jvb3RMYXllci0+c2V0U2l6
ZShwYWdlU2l6ZSk7CkBAIC0xMjAsNyArMTI5LDcgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6c3RvcEFueVBlbmRpbmdMYXllckZsdXNoKCkKIAogYm9vbCBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fcm9vdExheWVy
ICYmIG1fdGV4dHVyZU1hcHBlcjsKKyAgICByZXR1cm4gbV9yZWRpcmVjdGVkV2luZG93ICYmIG1f
cm9vdExheWVyICYmIG1fdGV4dHVyZU1hcHBlcjsKIH0KIAogYm9vbCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY2Fpcm9fdCogY3IsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KQpAQCAtMTMwLDE5ICsxMzksNiBAQCBib29sIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiBjciwgY29uc3Qg
SW50UgogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAv
LyBJdCdzIGltcG9ydGFudCB0byBwYWludCBhIHdoaXRlIGJhY2tncm91bmQgKGlmIHRoZSBXZWJW
aWV3IGlzbid0IHRyYW5zcGFyZW50KSwgYmVjYXVzZSB3aGVuIGdyb3dpbmcKLSAgICAvLyB0aGUg
cmVkaXJlY3RlZCB3aW5kb3csIHRoZSB1c2FibGUgc2l6ZSBvZiB0aGUgd2luZG93IG1heSBiZSBz
bWFsbGVyIHRoYW4gdGhlIGFsbG9jYXRpb24gb2Ygb3VyIHdpZGdldC4KLSAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHNob3cgYXJ0aWZhY3RzIGluIHRoYXQgY2FzZS4KLSAgICBJbnRTaXplIHVzYWJs
ZVdpbmRvd1NpemUgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnVzYWJsZVNpemUoKTsKLSAgICBpZiAo
dXNhYmxlV2luZG93U2l6ZSAhPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnNpemUoKSkgewotICAgICAg
ICBpZiAoIW1fd2ViVmlldy0+cHJpdi0+dHJhbnNwYXJlbnQpIHsKLSAgICAgICAgICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiKGNyLCAxLCAxLCAxKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAgICAg
ICAgY2Fpcm9fcGFpbnQoY3IpOwotICAgIH0KLQogICAgIGNhaXJvX3N1cmZhY2VfdCogd2luZG93
U3VyZmFjZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEdUS19X
SURHRVQobV93ZWJWaWV3KSk7CiAgICAgaWYgKCF3aW5kb3dTdXJmYWNlKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTE3Niw3ICsxNzIsNyBAQCBHTENvbnRleHQqIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0OjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkKICAgICByZXR1cm4gY29udGV4dDsK
IH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJz
VG9Db250ZXh0KCkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0
ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlIHB1cnBvc2UpCiB7CiAgICAgR0xDb250
ZXh0KiBjb250ZXh0ID0gcHJlcGFyZUZvclJlbmRlcmluZygpOwogICAgIGlmICghY29udGV4dCkK
QEAgLTE4NSwyMSArMTgxLDE2IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpCiAgICAgY29uc3QgSW50U2l6ZSYgd2luZG93U2l6
ZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+c2l6ZSgpOwogICAgIGdsVmlld3BvcnQoMCwgMCwgd2lu
ZG93U2l6ZS53aWR0aCgpLCB3aW5kb3dTaXplLmhlaWdodCgpKTsKIAorICAgIGlmIChwdXJwb3Nl
ID09IEZvclJlc2l6ZSkgeworICAgICAgICBnbENsZWFyQ29sb3IoMSwgMSwgMSwgMCk7CisgICAg
ICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgfQorCiAgICAgbV90ZXh0dXJl
TWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CiAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290
TGF5ZXIuZ2V0KCkpLT5wYWludCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmco
KTsKIAogICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0KLSAgICAvLyBGSVhNRTogSXQgc2Vl
bXMgdGhhdCB3aGVuIHVzaW5nIGRvdWJsZS1idWZmZXJpbmcgKGFuZCBvbiBzb21lIGRyaXZlcnMg
c2luZ2xlLWJ1ZmZlcmluZykKLSAgICAvLyBhbmQgWENvbXBvc2l0ZSB3aW5kb3cgcmVkaXJlY3Rp
b24sIHR3byBzd2FwIGJ1ZmZlcnMgYXJlIHJlcXVpcmVkIHRvIGZvcmNlIHRoZSBwaXhtYXAKLSAg
ICAvLyB0byB1cGRhdGUuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIGR1cmluZyBhbmltYXRpb25zLCBi
ZWNhdXNlIHN3YXBCdWZmZXIgaXMgY29udGludW91c2x5Ci0gICAgLy8gY2FsbGVkLiBGb3Igbm9u
LWFuaW1hdGlvbiBzaXR1YXRpb25zIHdlIHVzZSB0aGlzIHRlcnJpYmxlIGhhY2sgdW50aWwgd2Ug
Y2FuIGdldCB0byB0aGUKLSAgICAvLyBib3R0b20gb2YgdGhlIGlzc3VlLgotICAgIGlmICghdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhh
dmVSdW5uaW5nQW5pbWF0aW9ucygpKSB7Ci0gICAgICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7
Ci0gICAgICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0gICAgfQogfQogCiB2b2lkIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpjbGVhckV2ZXJ5d2hlcmUoKQpAQCAtMjM2LDcgKzIy
Nyw4IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgICAgIHN0b3BBbnlQZW5kaW5nTGF5
ZXJGbHVzaCgpOwogCiAgICAgICAgIC8vIFNocmluayB0aGUgb2Zmc2NyZWVuIHdpbmRvdyB0byBz
YXZlIG1lbW9yeSB3aGlsZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyB0dXJuZWQgb2ZmLgot
ICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShJbnRTaXplKDEsIDEpKTsKKyAgICAg
ICAgaWYgKG1fcmVkaXJlY3RlZFdpbmRvdykKKyAgICAgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRv
dy0+cmVzaXplKEludFNpemUoMSwgMSkpOwogICAgICAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7
CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IG51bGxwdHI7CiAgICAgICAg
IG1fdGV4dHVyZU1hcHBlciA9IG51bGxwdHI7CkBAIC0yNDUsNiArMjM3LDkgQEAgdm9pZCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhp
Y3NMYXllciogZ3JhcGgKIAogICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBo
aWVyYXJjaHkuCiAgICAgaW5pdGlhbGl6ZSgpOworICAgIGlmICghbV9yZWRpcmVjdGVkV2luZG93
KQorICAgICAgICByZXR1cm47CisKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJl
bW92ZUFsbENoaWxkcmVuKCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRD
aGlsZChncmFwaGljc0xheWVyKTsKIApAQCAtMjk1LDcgKzI5MCw4IEBAIHZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlc2l6ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBuZXdT
aXplKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBu
ZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOwogCiAgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBuZXdTaXplKSk7Ci0gICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKyAgICBjb21wb3NpdGVM
YXllcnNUb0NvbnRleHQoRm9yUmVzaXplKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0K
IAogdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2Nyb2xsTm9uQ29tcG9zaXRl
ZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9s
bE9mZnNldCkKQEAgLTM1MSwxNCArMzQ3LDEzIEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKICAgICBtX2xhc3RGbHVzaFRpbWUgPSBj
dXJyZW50VGltZSgpOwogICAgIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOwogCi0gICAgZ3Rr
X3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0KICAgICAvLyBJZiBp
dCdzIGJlZW4gYSBsb25nIHRpbWUgc2luY2Ugd2UndmUgYWN0dWFsbHkgcGFpbnRlZCwgd2hpY2gg
bWVhbnMgdGhhdCBldmVudHMgbWlnaHQKICAgICAvLyBiZSBzdGFydmluZyB0aGUgbWFpbiBsb29w
LCB3ZSBzaG91bGQgZm9yY2UgYSBkcmF3IG5vdy4gVGhpcyBzZWVtcyB0byBwcmV2ZW50IGRpc3Bs
YXkKICAgICAvLyBsYWcgb24gaHR0cDovLzIwMTIuYmVlcmNhbXAuY29tLgotICAgIGlmIChtX3Jl
ZHJhd1BlbmRpbmdUaW1lICYmIGN1cnJlbnRUaW1lKCkgLSBtX3JlZHJhd1BlbmRpbmdUaW1lID4g
Z1NjaGVkdWxlRGVsYXkpCisgICAgaWYgKG1fcmVkcmF3UGVuZGluZ1RpbWUgJiYgY3VycmVudFRp
bWUoKSAtIG1fcmVkcmF3UGVuZGluZ1RpbWUgPiBnU2NoZWR1bGVEZWxheSkgeworICAgICAgICBn
dGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKICAgICAgICAgZ2Rr
X3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQo
bV93ZWJWaWV3KSksIEZBTFNFKTsKLSAgICBlbHNlIGlmICghbV9yZWRyYXdQZW5kaW5nVGltZSkK
KyAgICB9IGVsc2UgaWYgKCFtX3JlZHJhd1BlbmRpbmdUaW1lKQogICAgICAgICBtX3JlZHJhd1Bl
bmRpbmdUaW1lID0gY3VycmVudFRpbWUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBi
YTBhYzY5NTUzMDE2ODU0MjMxNzNlYWM4OTk3ZGNkZjhjNWQzZmE5Li5iMWE5ZjZkMmQzNmRlMDA4
YjAwNmY3NDUxNGI5ZTk2ZDYyODkyNjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtMTA5LDYg
KzEwOSw3IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfQ1BQCiAJJChMSUJTT1VQX0NGTEFHUykgXAog
CSQoVU5JQ09ERV9DRkxBR1MpIFwKIAkkKFhDT01QT1NJVEVfQ0ZMQUdTKSBcCisJJChYREFNQUdF
X0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdTKQogCiBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NYWEZMQUdT
ID0gXApAQCAtMTgyLDYgKzE4Myw3IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFK
T1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCCiAJJChVTklD
T0RFX0xJQlMpIFwKIAkkKFhSRU5ERVJfTElCUykgXAogCSQoWENPTVBPU0lURV9MSUJTKSBcCisJ
JChYREFNQUdFX0xJQlMpIFwKIAkkKFhUX0xJQlMpIFwKIAkkKFpMSUJfTElCUykKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCmluZGV4IDUzMzhlMmJkM2RkMDZjNzc0MDhkYmYzYzk5MTVmZjI3YjlkYjU1ZTEuLmZhMDM3
MmU4M2NkZGY5ZTM3NDI0YWI2YzNmZTdjMzQyYWUxMjcxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTc1
LDYgKzc1LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB0eXBlZGVmIEhhc2hNYXA8
R3RrV2lkZ2V0KiwgSW50UmVjdD4gV2ViS2l0V2ViVmlld0NoaWxkcmVuTWFwOwogCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCByZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNr
KHZvaWQqIGRhdGEpOworI2VuZGlmCisKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
IHsKICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW47CiAgICAgT3duUHRyPFBh
Z2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50OwpAQCAtMTExLDcgKzExNSw2IEBAIHN0cnVjdCBfV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICBPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IHJlZGlyZWN0ZWRXaW5kb3c7Ci0g
ICAgYm9vbCByZWFkeVRvUmVuZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHM7CiAjZW5k
aWYKIH07CiAKQEAgLTM1MSw3ICszNTQsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
YmFzZV9pbml0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIAogI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKICAgICBwcml2LT5yZWRpcmVjdGVkV2luZG93ID0gUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShJbnRTaXplKDEsIDEpKTsKLSAgICBwcml2LT5y
ZWFkeVRvUmVuZGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMgPSBmYWxzZTsKKyAgICBp
ZiAocHJpdi0+cmVkaXJlY3RlZFdpbmRvdykKKyAgICAgICAgcHJpdi0+cmVkaXJlY3RlZFdpbmRv
dy0+c2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2socmVkaXJlY3RlZFdpbmRvd0RhbWFnZWRDYWxsYmFj
aywgd2Via2l0V2ViVmlld0Jhc2UpOwogI2VuZGlmCiB9CiAKQEAgLTM2NCwxMCArMzY4LDkgQEAg
c3RhdGljIGJvb2wgd2Via2l0V2ViVmlld1JlbmRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSZXN1
bHRzKFdlYktpdFdlYlZpZXdCYXNlKgogICAgIC8vIFRvIGF2b2lkIGZsYXNoZXMgd2hlbiBpbml0
aWFsaXppbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZm9yIHRoZSBmaXJzdAogICAgIC8vIHRp
bWUsIHdlIHdhaXQgdW50aWwgd2Uga25vdyB0aGVyZSdzIGEgZnJhbWUgcmVhZHkgYmVmb3JlIHJl
bmRlcmluZy4KICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFz
ZS0+cHJpdjsKLSAgICBpZiAoIXByaXYtPnJlYWR5VG9SZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUmVzdWx0cykKKyAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRXaW5kb3cpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChwcml2LT5yZWRpcmVjdGVkV2luZG93KTsKICAgICBj
YWlyb19yZWN0YW5nbGUoY3IsIGNsaXBSZWN0LT54LCBjbGlwUmVjdC0+eSwgY2xpcFJlY3QtPndp
ZHRoLCBjbGlwUmVjdC0+aGVpZ2h0KTsKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBw
cml2LT5yZWRpcmVjdGVkV2luZG93LT5jYWlyb1N1cmZhY2VGb3JXaWRnZXQoR1RLX1dJREdFVCh3
ZWJWaWV3QmFzZSkpOwogICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgc3VyZmFjZSwg
MCwgMCk7CkBAIC00MzAsNyArNDMzLDcgQEAgc3RhdGljIHZvaWQgcmVzaXplV2ViS2l0V2ViVmll
d0Jhc2VGcm9tQWxsb2NhdGlvbihXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UKICAgICB9
CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKHNpemVDaGFuZ2VkKQorICAg
IGlmIChzaXplQ2hhbmdlZCAmJiB3ZWJWaWV3QmFzZS0+cHJpdi0+cmVkaXJlY3RlZFdpbmRvdykK
ICAgICAgICAgd2ViVmlld0Jhc2UtPnByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZSh2aWV3
UmVjdC5zaXplKCkpOwogI2VuZGlmCiAKQEAgLTgwMSw3ICs4MDQsOCBAQCB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UsIFdLQ29udAogI2VuZGlmCiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgcHJp
di0+cGFnZVByb3h5LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQocHJpdi0+cmVk
aXJlY3RlZFdpbmRvdy0+d2luZG93SWQoKSk7CisgICAgaWYgKHByaXYtPnJlZGlyZWN0ZWRXaW5k
b3cpCisgICAgICAgIHByaXYtPnBhZ2VQcm94eS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1dp
bmRvd0lkKHByaXYtPnJlZGlyZWN0ZWRXaW5kb3ctPndpbmRvd0lkKCkpOwogI2VuZGlmCiB9CiAK
QEAgLTkyOCwzNyArOTMyLDkgQEAgR2RrRXZlbnQqIHdlYmtpdFdlYlZpZXdCYXNlVGFrZUNvbnRl
eHRNZW51RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXcKIH0KIAogI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKLXN0YXRpYyBnYm9vbGVhbiBxdWV1ZUFub3RoZXJEcmF3T2ZB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyhncG9pbnRlciogd2ViVmlld0Jhc2VQb2ludGVy
KQordm9pZCByZWRpcmVjdGVkV2luZG93RGFtYWdlZENhbGxiYWNrKHZvaWQqIGRhdGEpCiB7Ci0g
ICAgLy8gVGhlIFdlYlZpZXdCYXNlIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkIGluIHRoZSB0aW1l
IHNpbmNlIHdlIHF1ZXVlZCB0aGlzCi0gICAgLy8gZHJhdyBhbmQgdGhlIHRpbWUgd2UgYXJlIGFj
dHVhbGx5IGV4ZWN1dGluZy4KLSAgICBpZiAoISp3ZWJWaWV3QmFzZVBvaW50ZXIpIHsKLSAgICAg
ICAgZmFzdEZyZWUod2ViVmlld0Jhc2VQb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgIH0KLQotICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJf
VklFV19CQVNFKCp3ZWJWaWV3QmFzZVBvaW50ZXIpOwotICAgIGd0a193aWRnZXRfcXVldWVfZHJh
dyhHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYtPnJlYWR5
VG9SZW5kZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nUmVzdWx0cyA9IHRydWU7Ci0KLSAgICBnX29i
amVjdF9yZW1vdmVfd2Vha19wb2ludGVyKEdfT0JKRUNUKHdlYlZpZXdCYXNlKSwgd2ViVmlld0Jh
c2VQb2ludGVyKTsKLSAgICBmYXN0RnJlZSh3ZWJWaWV3QmFzZVBvaW50ZXIpOwotCi0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi12b2lkIHdlYmtpdFdlYlZpZXdCYXNlUXVldWVEcmF3T2ZBY2NlbGVy
YXRlZENvbXBvc2l0aW5nUmVzdWx0cyhXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UpCi17
Ci0gICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsKLQot
ICAgIC8vIFJlZHJhdyBhZ2Fpbiwgb25lIGZyYW1lIGxhdGVyLCBhcyBpdCBtaWdodCB0YWtlIHNv
bWUgdGltZSBmb3IgdGhlIG5ldyBHTCBmcmFtZSB0byBiZSBhdmFpbGFibGUuCi0gICAgLy8gVGhp
cyBwcmV2ZW50cyB0aGUgZGlzcGxheSBmcm9tIGFsd2F5cyBiZWluZyBvbmUgZnJhbWUgYmVoaW5k
IGluIHRoZSBjYXNlIEdMIGhhc24ndCB5ZXQgZmluaXNoZWQKLSAgICAvLyByZW5kZXJpbmcgdG8g
dGhlIHdpbmRvdy4KLSAgICAvLyBUT0RPOiBBZGQgWERhbWFnZSBzdXBwb3J0IHRvIFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93IHRvIGFjY29tcGxpc2ggdGhpcy4KLSAgICBncG9pbnRlciogd2Vi
Vmlld0Jhc2VQb2ludGVyID0gc3RhdGljX2Nhc3Q8Z3BvaW50ZXIqPihmYXN0TWFsbG9jKHNpemVv
ZihncG9pbnRlcikpKTsKLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHdl
YlZpZXdCYXNlKSwgd2ViVmlld0Jhc2VQb2ludGVyKTsKLSAgICAqd2ViVmlld0Jhc2VQb2ludGVy
ID0gd2ViVmlld0Jhc2U7Ci0gICAgZ190aW1lb3V0X2FkZCgxMDAwIC8gNjAsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KHF1ZXVlQW5vdGhlckRyYXdPZkFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdSZXN1bHRzKSwgd2ViVmlld0Jhc2VQb2ludGVyKTsKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2Ry
YXcoR1RLX1dJREdFVChkYXRhKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCmluZGV4IDI4YzVkYTkwYWUxMDk0MjZmZjdjOWU2ZWEzNDNkZjBiNjI5
ZDcyNWIuLjE1M2M0ZTM2Y2Y4YzdlZDhjZmE2Zjg3ZWRkZTAwYWU2NjQ4ZDI5YTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTcxNSw3ICs3MTUsNiBAQCBwdWJs
aWM6CiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICB2
b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJZCh1aW50NjRfdCBuYXRpdmVXaW5k
b3dJZCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlV2lkZ2V0KCk7CiAjZW5kaWYKIAogICAgIHZvaWQg
c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhib29sIGZsYWcpIHsgbV9zdXBwcmVzc1Zpc2li
aWxpdHlVcGRhdGVzID0gZmxhZzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYTRhM2M1N2JmMmM5OTIyYTFmZTRlOWY5YjNm
NDEzZDNlNzU2NzQzZC4uYzU0MWQyYzE0NDAzZGJmYmI1YzQxYjRkNTc3Zjg0ZGE0ZGM0MjM4MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC0xNzcsMTAgKzE3Nyw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAg
QmluZEFjY2Vzc2liaWxpdHlUcmVlKFdURjo6U3RyaW5nIHBsdWdJRCkKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgSW52YWxpZGF0ZVdp
ZGdldCgpCi0jZW5kaWYKLQogICAgICMgQmFja0ZvcndhcmQgbWVzc2FnZXMKICAgICBCYWNrRm9y
d2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIEJhY2tGb3J3YXJkR29Ub0l0ZW0odWlu
dDY0X3QgaXRlbUlEKSAtPiAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
UGFnZVByb3h5R3RrLmNwcAppbmRleCA4MDg4MWJmZTcwYjlhM2QxMGQ1YjQyY2M1MDcxODVhMjIz
NjdlNzgyLi42YjAxYmIwMjc4MDIxNWZkNDgzMGIzMzE0ODg2ZDU5ZjdlYmZlYzkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCkBAIC0x
MTQsMTEgKzExNCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nV2luZG93SWQodWludDY0X3QgbmF0aXZlV2luZG93SWQpCiB7CiAgICAgcHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQo
bmF0aXZlV2luZG93SWQpLCBtX3BhZ2VJRCk7CiB9Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjppbnZh
bGlkYXRlV2lkZ2V0KCkKLXsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZVF1ZXVlRHJhd09mQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jlc3VsdHMoV0VCS0lUX1dFQl9WSUVXX0JBU0Uoc3RhdGljX2Nhc3Q8
UGFnZUNsaWVudEltcGwqPihtX3BhZ2VDbGllbnQpLT52aWV3V2lkZ2V0KCkpKTsKLX0KICNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCmluZGV4IDc3NWI4MjcwYTljMGUwNzQ5YTNlMzI3MTAzNTJiYTZlZmE4
Yjc3ZWIuLjUyMzcxMjQyY2I5ZGI3Njg2MWZlMzkyZmE4Mjk0MDgwNjVjNWJjYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNDU5LDcgKzQ1OSw2
IEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3NlZEV2ZW50KGNvbnN0IFdlYkNv
cmU6OlBsYXRmb3JtTW91c2VFdmVudCYpOwogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdXaW5kb3dJZChpbnQ2NF90IG5hdGl2ZVdp
bmRvd0hhbmRsZSk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlV2lkZ2V0KCk7CiAjZW5kaWYKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xh
eWVyVHJlZUhvc3RHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9MYXllclRyZWVIb3N0R3RrLmNwcAppbmRleCAwOThhNGM3MTYzOGM5ZTc1M2E0NzE1Y2FhMjUw
Mjg4OWUxNTJlMWUzLi5iY2IyYmVmZGUzNGZhMDBmZmI2ZTRlNmZlYjA2MTYwZTk1YjZlOTk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJl
ZUhvc3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
TGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTMxNyw3ICszMTcsNiBAQCB2b2lkIExheWVyVHJlZUhv
c3RHdGs6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlIHB1cnBvc2Up
CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwogCiAgICAgY29udGV4dC0+c3dh
cEJ1ZmZlcnMoKTsKLSAgICBtX3dlYlBhZ2UtPmludmFsaWRhdGVXaWRnZXQoKTsKIH0KIAogdm9p
ZCBMYXllclRyZWVIb3N0R3RrOjpmbHVzaEFuZFJlbmRlckxheWVycygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCBk
OWRkZTgxYTI1ZGI3NDQyNjZhNWU2N2E4ZmE5YmE2OTlhMGFmZDVhLi5lMjhlNzRmMzk5OWJkODMx
YTNiOGE4MDYwMDU2ZGExOGRlZjllMjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKQEAgLTE2MCwxMSArMTYwLDYgQEAg
dm9pZCBXZWJQYWdlOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nV2luZG93SWQoaW50NjRfdCBu
YXRpdmVXaW5kb3dIYW5kbGUpCiB7CiAgICAgbV9uYXRpdmVXaW5kb3dIYW5kbGUgPSBuYXRpdmVX
aW5kb3dIYW5kbGU7CiB9Ci0KLXZvaWQgV2ViUGFnZTo6aW52YWxpZGF0ZVdpZGdldCgpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnZhbGlkYXRlV2lkZ2V0KCkpOwotfQog
I2VuZGlmCiAKIGJvb2wgV2ViUGFnZTo6aGFuZGxlTW91c2VQcmVzc2VkRXZlbnQoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdXNlRXZlbnQpCmRpZmYgLS1naXQgYS9DaGFuZ2VM
b2cgYi9DaGFuZ2VMb2cKaW5kZXggOGRjNTNmNWM1OTk4ZjAwZTYzZmNmNTIyZTc4ODM0NmQxYjVk
NGRmMC4uOGMyZTZlMGQ4MWE4NWU0NWFkZTE3ZDMzNmM2ZDEwN2I5ODhhMjE2ZSAxMDA2NDQKLS0t
IGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA5LTIy
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBVc2UgWERhbWFnZSB0byBzaW1wbGlmeSBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyNjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgWERhbWFnZSB0
byBxdWV1ZSByZWRyYXdzIG9mIHRoZSB3aWRnZXQgd2hlbiByZWRpcmVjdGluZyBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZworICAgICAgICB0byBhbiBvZmZzY3JlZW4gd2luZG93LiBUaGlzIGFsbG93
cyByZW1vdmluZyBhIGZpbmlja3kgdGltZXItYmFzZWQgYXBwcm9hY2gsIGltcHJvdmVzCisgICAg
ICAgIHBlcmZvcm1hbmNlLCBhbmQgYWxsb3dzIHNpbXBsaWZ5aW5nIHRoaW5ncyBncmVhdGx5Lgor
CisgICAgICAgICogY29uZmlndXJlLmFjOiBBZGQgc3VwcG9ydCBmb3IgZmluZGluZyBYRGFtYWdl
IHZpYSBwa2ctY29uZmlnLgorCiAyMDEyLTA5LTIxICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgSFRNTE1lZGlhRWxlbWVudCBpc24ndCBnYXJiYWdlIGNv
bGxlY3RlZCBiZXR3ZWVuIGRvY3VtZW50IHJlbG9hZHMKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5h
YyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmMDE5NmU5MmJmYjgzMzk3Y2NhOTk2N2I2ZDczMDdhYzhk
YTQ2MWZmLi5jOGYxMTBkYzE0MDQzNTliYzM3YmIyZjZjYzBmNmIxNGVhOTZkMDA2IDEwMDY0NAot
LS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC01NjcsOCArNTY3LDExIEBA
IEFDX01TR19SRVNVTFQoWyR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kXSkKIAogaWYgdGVzdCAi
JHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9wZW5nbCI7IHRoZW4KICAgICBQS0dfQ0hF
Q0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4Y29tcG9zaXRlXSk7CisgICAgUEtHX0NIRUNLX01P
RFVMRVMoW1hEQU1BR0VdLCBbeGRhbWFnZV0pOwogICAgIEFDX1NVQlNUKFhDT01QT1NJVEVfQ0ZM
QUdTKQogICAgIEFDX1NVQlNUKFhDT01QT1NJVEVfTElCUykKKyAgICBBQ19TVUJTVChYREFNQUdF
X0NGTEFHUykKKyAgICBBQ19TVUJTVChYREFNQUdFX0xJQlMpCiBmaQogCiAjIE9wZW5HTCBpcyB0
dXJuZWQgb24gYnkgZGVmYXVsdCAoYWxvbmcgd2l0aCBXZWJHTCBhbmQgYWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcpLCBidXQgaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>