<?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>130027</bug_id>
          
          <creation_ts>2014-03-10 10:12:10 -0700</creation_ts>
          <short_desc>[GLIB] Add GMainLoopSource class to wrap idle and timeout sources</short_desc>
          <delta_ts>2014-03-20 00:57:13 -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>Web Template Framework</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>130078</blocked>
    
    <blocked>130080</blocked>
    
    <blocked>130081</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>agomez</cc>
    
    <cc>benjamin</cc>
    
    <cc>bunhere</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>988930</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-10 10:12:10 -0700</bug_when>
    <thetext>GLib main loop sources like idle and timeouts are sometimes unconvenient to use and it&apos;s very common to forget canceling the source when the object is destroyed or reset the source ID in the callback when called. We could add a wrapper class to make it easier to handle sources and also to avoid those typical mistakes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988945</commentid>
    <comment_count>1</comment_count>
      <attachid>226318</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-10 10:38:45 -0700</bug_when>
    <thetext>Created attachment 226318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988946</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-10 10:39:57 -0700</bug_when>
    <thetext>Attachment 226318 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:374:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:378:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:388:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:392:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:532:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:551:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:588:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:608:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:649:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:682:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:88:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:96:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:104:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:126:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:135:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:144:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:153:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:77:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:78:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/gtk/webkit/webkitwebview.cpp:5337:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:539:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:547:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:689:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:719:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:748:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:218:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/gtk/RunLoopGtk.cpp:118:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:110:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:117:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 38 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988951</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-10 10:53:19 -0700</bug_when>
    <thetext>It seems the style checker doesn&apos;t like std::function and lambdas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988957</commentid>
    <comment_count>4</comment_count>
      <attachid>226318</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-03-10 11:08:56 -0700</bug_when>
    <thetext>Comment on attachment 226318
Patch

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

Very cool patch! I have a couple questions. I haven&apos;t looked at the GStreamer bits. I guess philn would be the best person for that. This is a big patch and we need to watch the bots closely when we land it. I&apos;d prefer to have it split across a few patches that transition the source code in pieces to GMainLoopSource, but I&apos;m sensitive to how annoying that is. Still, if it&apos;s possible, please consider it.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:46
&gt; +GMainLoopSource::GMainLoopSource(bool deleteOnDestroy)
&gt; +    : m_deleteOnDestroy(deleteOnDestroy)
&gt; +{
&gt; +}

You probably want to use an enum here instead of a boolean.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:60
&gt; +        // Canceling the cancellable will make the source callback to be called
&gt; +        // so the source is destroyed when it returns

So does this cause the source callback to be called? Not sure I understand the comment.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:270
&gt; +    // We need a different source for this to not cancel the previous one.
&gt; +    GMainLoopSource::create().scheduleAfterDelay(&quot;[WebKit] layerFlushTimer&quot;, std::bind(&amp;AcceleratedCompositingContext::flushAndRenderLayers, this),
&gt; +        std::chrono::milliseconds(500), GDK_PRIORITY_EVENTS);

This is a bit different because stopAnyPendingLayerFlush no longer cancels this. To be honest, I can&apos;t recall any longer whether we really want to replace any existing source or not.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5338
&gt; +        GList* copiedList = g_list_copy(subResources);
&gt; +        GMainLoopSource::create().scheduleAfterDelay(&quot;[WebKit] cleanupTemporarilyCachedSubresources&quot;,
&gt; +            [copiedList]() { g_list_free_full(copiedList, g_object_unref); }, std::chrono::seconds(1));
&gt; +    }

Aren&apos;t we leaking subResources now since the original list is not freed?

&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:99
&gt; +    m_socketEventSource.schedule(&quot;[WebKit] WorkQueue::SocketEventHandler&quot;, [function, closeFunction](GIOCondition condition) {
&gt; +        if (condition &amp; G_IO_HUP || condition &amp; G_IO_ERR) {
&gt; +            closeFunction();
&gt; +            return GMainLoopSource::Stop;
&gt; +        }
&gt; +        if (condition &amp; G_IO_IN) {
&gt; +            function();
&gt; +            return GMainLoopSource::Continue;
&gt; +        }
&gt; +        // EventSource has been cancelled, return false to destroy the source.
&gt; +        return GMainLoopSource::Stop;
&gt; +        }, socket.get(), G_IO_IN,
&gt; +        [this]() { deref(); },
&gt; +        m_eventContext.get());
&gt;  }

Nice! I think we can add some newlines to this though.

&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:108
&gt; +    ref();

Probably want to mention where the corresponding deref is.

&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:115
&gt; +    ref();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988969</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-10 11:27:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 226318 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226318&amp;action=review
&gt; 
&gt; Very cool patch! I have a couple questions. I haven&apos;t looked at the GStreamer bits. I guess philn would be the best person for that. This is a big patch and we need to watch the bots closely when we land it. I&apos;d prefer to have it split across a few patches that transition the source code in pieces to GMainLoopSource, but I&apos;m sensitive to how annoying that is. Still, if it&apos;s possible, please consider it.

Thanks, it&apos;s actually split :-P I left the Tools dir out. Anyway, I guess I can add patches for WTF, WebCore, WEbKit and WebKit2, for example?

&gt; &gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:46
&gt; &gt; +GMainLoopSource::GMainLoopSource(bool deleteOnDestroy)
&gt; &gt; +    : m_deleteOnDestroy(deleteOnDestroy)
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; You probably want to use an enum here instead of a boolean.

Well, this is private and only used here, but I will changed it.

&gt; &gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:60
&gt; &gt; +        // Canceling the cancellable will make the source callback to be called
&gt; &gt; +        // so the source is destroyed when it returns
&gt; 
&gt; So does this cause the source callback to be called? Not sure I understand the comment.

Yes, this is specific to socket sources that use a cancellable. This can be called from any thread, so when the source is cancelled using the cancellable, we wait for the callback to be called with a 0 condition, that makes the function return FALSE and the source is destroyed.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:270
&gt; &gt; +    // We need a different source for this to not cancel the previous one.
&gt; &gt; +    GMainLoopSource::create().scheduleAfterDelay(&quot;[WebKit] layerFlushTimer&quot;, std::bind(&amp;AcceleratedCompositingContext::flushAndRenderLayers, this),
&gt; &gt; +        std::chrono::milliseconds(500), GDK_PRIORITY_EVENTS);
&gt; 
&gt; This is a bit different because stopAnyPendingLayerFlush no longer cancels this. To be honest, I can&apos;t recall any longer whether we really want to replace any existing source or not.

I didn&apos;t know what to do here because the thing is a bit confusing to me, current code uses the same member to handle both sources. scheduleLayerFlush schedules a new source, and this once was scheduled without checking if there was a previous one, but using the same member, so the previous one is &quot;leaked&quot;.

&gt; &gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5338
&gt; &gt; +        GList* copiedList = g_list_copy(subResources);
&gt; &gt; +        GMainLoopSource::create().scheduleAfterDelay(&quot;[WebKit] cleanupTemporarilyCachedSubresources&quot;,
&gt; &gt; +            [copiedList]() { g_list_free_full(copiedList, g_object_unref); }, std::chrono::seconds(1));
&gt; &gt; +    }
&gt; 
&gt; Aren&apos;t we leaking subResources now since the original list is not freed?

The function doesn&apos;t have documentation, I assumed the return value is transfer container, so the user frees the returned list. This is doing the same than the current code, it copies the list (the container) and frees everything in an idle.

&gt; &gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:99
&gt; &gt; +    m_socketEventSource.schedule(&quot;[WebKit] WorkQueue::SocketEventHandler&quot;, [function, closeFunction](GIOCondition condition) {
&gt; &gt; +        if (condition &amp; G_IO_HUP || condition &amp; G_IO_ERR) {
&gt; &gt; +            closeFunction();
&gt; &gt; +            return GMainLoopSource::Stop;
&gt; &gt; +        }
&gt; &gt; +        if (condition &amp; G_IO_IN) {
&gt; &gt; +            function();
&gt; &gt; +            return GMainLoopSource::Continue;
&gt; &gt; +        }
&gt; &gt; +        // EventSource has been cancelled, return false to destroy the source.
&gt; &gt; +        return GMainLoopSource::Stop;
&gt; &gt; +        }, socket.get(), G_IO_IN,
&gt; &gt; +        [this]() { deref(); },
&gt; &gt; +        m_eventContext.get());
&gt; &gt;  }
&gt; 
&gt; Nice! I think we can add some newlines to this though.
&gt; 
&gt; &gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:108
&gt; &gt; +    ref();
&gt; 
&gt; Probably want to mention where the corresponding deref is.

Really? it&apos;s in the next line :-)

&gt; &gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:115
&gt; &gt; +    ref();
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988976</commentid>
    <comment_count>6</comment_count>
      <attachid>226318</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-03-10 11:38:03 -0700</bug_when>
    <thetext>Comment on attachment 226318
Patch

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

&gt;&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5338
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Aren&apos;t we leaking subResources now since the original list is not freed?
&gt; 
&gt; The function doesn&apos;t have documentation, I assumed the return value is transfer container, so the user frees the returned list. This is doing the same than the current code, it copies the list (the container) and frees everything in an idle.

Well in the old code g_list_free is called on the subResources returned. In this version, the contents of the original list are freed, but not the actual list itself.

&gt;&gt;&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:115
&gt;&gt;&gt; +    ref();
&gt;&gt; 
&gt;&gt; Ditto.
&gt; 
&gt; 

Oh, sorry. I missed the pairs! I don&apos;t think it&apos;s necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988997</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-10 12:07:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 226318 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226318&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5338
&gt; &gt;&gt;&gt; +    }
&gt; &gt;&gt; 
&gt; &gt;&gt; Aren&apos;t we leaking subResources now since the original list is not freed?
&gt; &gt; 
&gt; &gt; The function doesn&apos;t have documentation, I assumed the return value is transfer container, so the user frees the returned list. This is doing the same than the current code, it copies the list (the container) and frees everything in an idle.
&gt; 
&gt; Well in the old code g_list_free is called on the subResources returned. In this version, the contents of the original list are freed, but not the actual list itself.

Where does that happen?

&gt; &gt;&gt;&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:115
&gt; &gt;&gt;&gt; +    ref();
&gt; &gt;&gt; 
&gt; &gt;&gt; Ditto.
&gt; &gt; 
&gt; &gt; 
&gt; 
&gt; Oh, sorry. I missed the pairs! I don&apos;t think it&apos;s necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989001</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-10 12:11:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 226318 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226318&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5338
&gt; &gt; &gt;&gt;&gt; +    }
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Aren&apos;t we leaking subResources now since the original list is not freed?
&gt; &gt; &gt; 
&gt; &gt; &gt; The function doesn&apos;t have documentation, I assumed the return value is transfer container, so the user frees the returned list. This is doing the same than the current code, it copies the list (the container) and frees everything in an idle.
&gt; &gt; 
&gt; &gt; Well in the old code g_list_free is called on the subResources returned. In this version, the contents of the original list are freed, but not the actual list itself.
&gt; 
&gt; Where does that happen?

If you mean the g_list_free(subResources); in line 5324, that&apos;s not the returned list, but the copied list passed to the callback. This patch does the same but using g_list_free_full instead of g_list_foreach + g_list_free</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989006</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-03-10 12:20:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 226318 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226318&amp;action=review
&gt; &gt; 
&gt; &gt; Very cool patch! I have a couple questions. I haven&apos;t looked at the GStreamer bits. I guess philn would be the best person for that. This is a big patch and we need to watch the bots closely when we land it. I&apos;d prefer to have it split across a few patches that transition the source code in pieces to GMainLoopSource, but I&apos;m sensitive to how annoying that is. Still, if it&apos;s possible, please consider it.
&gt; 
&gt; Thanks, it&apos;s actually split :-P I left the Tools dir out. Anyway, I guess I can add patches for WTF, WebCore, WEbKit and WebKit2, for example?
&gt; 

SGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989008</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-03-10 12:22:36 -0700</bug_when>
    <thetext>Neat stuff btw!

I wonder if it&apos;d be hard to make the style bot detect future bare g_timeout_ and friends calls so it could warn the patch author?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989285</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-11 00:53:53 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Neat stuff btw!
&gt; 
&gt; I wonder if it&apos;d be hard to make the style bot detect future bare g_timeout_ and friends calls so it could warn the patch author?

This is a great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989289</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-11 01:11:27 -0700</bug_when>
    <thetext>I don&apos;t understand EFL build failures, could it be the compiler version of the EWS bots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989312</commentid>
    <comment_count>13</comment_count>
      <attachid>226403</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-11 02:29:45 -0700</bug_when>
    <thetext>Created attachment 226403
Patch

Patch with the WTF changes only and with review comments addressed. I&apos;ll file new bug reports for the rest of the original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989315</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-11 02:31:48 -0700</bug_when>
    <thetext>Attachment 226403 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:78:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gtk/RunLoopGtk.cpp:118:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:88:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:96:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:104:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:126:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:135:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:144:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:153:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 19 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989342</commentid>
    <comment_count>15</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2014-03-11 03:53:11 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I don&apos;t understand EFL build failures, could it be the compiler version of the EWS bots?

Looks like you&apos;re right. I don&apos;t know which GCC version is installed on the bots, but the following snippet works with GCC 4.8.2 and fails with GCC 4.6.3:

  #include &lt;functional&gt;
  void f(std::function&lt;void()&gt;) {}
  void f(std::function&lt;bool()&gt;) {}
  void g(int) {}
  void h() {
      f(std::bind(g, 42));
  }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989346</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-11 03:59:18 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #12)
&gt; &gt; I don&apos;t understand EFL build failures, could it be the compiler version of the EWS bots?
&gt; 
&gt; Looks like you&apos;re right. I don&apos;t know which GCC version is installed on the bots, but the following snippet works with GCC 4.8.2 and fails with GCC 4.6.3:
&gt; 
&gt;   #include &lt;functional&gt;
&gt;   void f(std::function&lt;void()&gt;) {}
&gt;   void f(std::function&lt;bool()&gt;) {}
&gt;   void g(int) {}
&gt;   void h() {
&gt;       f(std::bind(g, 42));
&gt;   }

Thanks for testing, I assume the EFL bots (not EWS) have a recent enough GCC. I&apos;ll keep watching your bots when these patches land to roll them out if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989354</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-03-11 04:28:21 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #12)
&gt; &gt; I don&apos;t understand EFL build failures, could it be the compiler version of the EWS bots?
&gt; 
&gt; Looks like you&apos;re right. I don&apos;t know which GCC version is installed on the bots, but the following snippet works with GCC 4.8.2 and fails with GCC 4.6.3:
&gt; 
&gt;   #include &lt;functional&gt;
&gt;   void f(std::function&lt;void()&gt;) {}
&gt;   void f(std::function&lt;bool()&gt;) {}
&gt;   void g(int) {}
&gt;   void h() {
&gt;       f(std::bind(g, 42));
&gt;   }

This snippet failed for me too with GCC 4.7.2 (default GCC on Ubuntu 12.10):
$ g++ 1.cpp -std=gnu++0x
1.cpp: In function ‘void h()’:
1.cpp:6:23: error: call of overloaded ‘f(std::_Bind_helper&lt;false, void (&amp;)(int), int&gt;::type)’ is ambiguous
1.cpp:6:23: note: candidates are:
1.cpp:2:6: note: void f(std::function&lt;void()&gt;)
1.cpp:3:6: note: void f(std::function&lt;bool()&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989361</commentid>
    <comment_count>18</comment_count>
      <attachid>226403</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-03-11 05:05:44 -0700</bug_when>
    <thetext>Comment on attachment 226403
Patch

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

&gt; Source/WTF/wtf/gobject/GMainLoopSource.h:56
&gt; +    void scheduleAfterDelay(const char* name, std::function&lt;void ()&gt;, std::chrono::milliseconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; +    void scheduleAfterDelay(const char* name, std::function&lt;bool ()&gt;, std::chrono::milliseconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; +    void scheduleAfterDelay(const char* name, std::function&lt;void ()&gt;, std::chrono::seconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; +    void scheduleAfterDelay(const char* name, std::function&lt;bool ()&gt;, std::chrono::seconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);

Can we simplify these into just two separate functions, differing in the type of the callback but both taking in std::chrono::milliseconds?

std::chrono::duration object should use the implicit constructor to convert between durations, so you could call sheduleAfterDelay() with std::chrono::seconds which would then get converted into milliseconds.

&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:102
&gt; +    GMainLoopSource::create().schedule(&quot;[WebKit] RunLoop work&quot;, std::bind(&amp;RunLoop::performWork, this));

Consider using a C++11 lambda, but remember to protect the RunLoop object through the reference counting mechanism:

    ref();
    GMainLoopSource::create().schedule(..., [this] {
        performWork();
        deref();
    });

&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:118
&gt; +    m_timerSource.scheduleAfterDelay(&quot;[WebKit] RunLoop::Timer&quot;, static_cast&lt;std::function&lt;bool ()&gt;&gt;([this, repeat]() { fired(); return repeat; }),

Consider simply using the std::function&lt;bool ()&gt; constructor instead of the static_cast to that type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989364</commentid>
    <comment_count>19</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-03-11 05:12:51 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #12)
&gt; &gt; I don&apos;t understand EFL build failures, could it be the compiler version of the EWS bots?
&gt; 
&gt; Looks like you&apos;re right. I don&apos;t know which GCC version is installed on the bots, but the following snippet works with GCC 4.8.2 and fails with GCC 4.6.3:
&gt; 
&gt;   #include &lt;functional&gt;
&gt;   void f(std::function&lt;void()&gt;) {}
&gt;   void f(std::function&lt;bool()&gt;) {}
&gt;   void g(int) {}
&gt;   void h() {
&gt;       f(std::bind(g, 42));
&gt;   }

As a note, WebKit bumped the minimum required GCC version to 4.7, even if that obviously doesn&apos;t avoid bumping into such issues.

As a second note, Clang successfully compiles this code, so no issue there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989370</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-11 06:07:21 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 226403 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226403&amp;action=review

Thanks for the comments.

&gt; &gt; Source/WTF/wtf/gobject/GMainLoopSource.h:56
&gt; &gt; +    void scheduleAfterDelay(const char* name, std::function&lt;void ()&gt;, std::chrono::milliseconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; &gt; +    void scheduleAfterDelay(const char* name, std::function&lt;bool ()&gt;, std::chrono::milliseconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; &gt; +    void scheduleAfterDelay(const char* name, std::function&lt;void ()&gt;, std::chrono::seconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; &gt; +    void scheduleAfterDelay(const char* name, std::function&lt;bool ()&gt;, std::chrono::seconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; 
&gt; Can we simplify these into just two separate functions, differing in the type of the callback but both taking in std::chrono::milliseconds?

The implementation is not the same, when we receive milliseconds, we use g_timeout_source_new, and when we receive seconds we use g_timeout_source_new_seconds. They are different sources.

&gt; std::chrono::duration object should use the implicit constructor to convert between durations, so you could call sheduleAfterDelay() with std::chrono::seconds which would then get converted into milliseconds.
&gt; 
&gt; &gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:102
&gt; &gt; +    GMainLoopSource::create().schedule(&quot;[WebKit] RunLoop work&quot;, std::bind(&amp;RunLoop::performWork, this));
&gt; 
&gt; Consider using a C++11 lambda, but remember to protect the RunLoop object through the reference counting mechanism:
&gt; 
&gt;     ref();
&gt;     GMainLoopSource::create().schedule(..., [this] {
&gt;         performWork();
&gt;         deref();
&gt;     });

We were not getting a ref before, I&apos;m trying to do what current code does (unless it&apos;s wrong of course). We can improve it later.

&gt; &gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:118
&gt; &gt; +    m_timerSource.scheduleAfterDelay(&quot;[WebKit] RunLoop::Timer&quot;, static_cast&lt;std::function&lt;bool ()&gt;&gt;([this, repeat]() { fired(); return repeat; }),
&gt; 
&gt; Consider simply using the std::function&lt;bool ()&gt; constructor instead of the static_cast to that type.

That would be something like std::function&lt;bool ()&gt;(lambda); ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989382</commentid>
    <comment_count>21</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-03-11 07:15:53 -0700</bug_when>
    <thetext>What about WTF::callOnMainThread? I think actually that a lot of code in WebCore could use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989388</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-11 07:45:59 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; What about WTF::callOnMainThread? I think actually that a lot of code in WebCore could use it.

Well, I don&apos;t know how that exactly works, but it uses a functions queue protected by a mutex that ends up using a GMainLoopSource in the end. It seems to me that adds complexity that our GMainLoop already does for us. So, for non cross platform code, I think it&apos;s better to schedule sources directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989416</commentid>
    <comment_count>23</comment_count>
      <attachid>226403</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-03-11 09:33:37 -0700</bug_when>
    <thetext>Comment on attachment 226403
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.h:56
&gt;&gt;&gt; +    void scheduleAfterDelay(const char* name, std::function&lt;bool ()&gt;, std::chrono::seconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt;&gt; 
&gt;&gt; Can we simplify these into just two separate functions, differing in the type of the callback but both taking in std::chrono::milliseconds?
&gt;&gt; 
&gt;&gt; std::chrono::duration object should use the implicit constructor to convert between durations, so you could call sheduleAfterDelay() with std::chrono::seconds which would then get converted into milliseconds.
&gt; 
&gt; The implementation is not the same, when we receive milliseconds, we use g_timeout_source_new, and when we receive seconds we use g_timeout_source_new_seconds. They are different sources.

Can we afford to only use g_timeout_source_new? Looking at the GLib code, the only difference g_timeout_source_new_seconds adds is a conditional branch in g_timeout_set_expiration that slightly modifies the expiration time of the source.

&gt;&gt;&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:102
&gt;&gt;&gt; +    GMainLoopSource::create().schedule(&quot;[WebKit] RunLoop work&quot;, std::bind(&amp;RunLoop::performWork, this));
&gt;&gt; 
&gt;&gt; Consider using a C++11 lambda, but remember to protect the RunLoop object through the reference counting mechanism:
&gt;&gt; 
&gt;&gt;     ref();
&gt;&gt;     GMainLoopSource::create().schedule(..., [this] {
&gt;&gt;         performWork();
&gt;&gt;         deref();
&gt;&gt;     });
&gt; 
&gt; We were not getting a ref before, I&apos;m trying to do what current code does (unless it&apos;s wrong of course). We can improve it later.

The current code doesn&apos;t guarantee (though ref-counting) that the RunLoop object will exist when the callback will be eventually fired.

&gt;&gt;&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:118
&gt;&gt;&gt; +    m_timerSource.scheduleAfterDelay(&quot;[WebKit] RunLoop::Timer&quot;, static_cast&lt;std::function&lt;bool ()&gt;&gt;([this, repeat]() { fired(); return repeat; }),
&gt;&gt; 
&gt;&gt; Consider simply using the std::function&lt;bool ()&gt; constructor instead of the static_cast to that type.
&gt; 
&gt; That would be something like std::function&lt;bool ()&gt;(lambda); ?

Exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989421</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-11 09:51:13 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 226403 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226403&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.h:56
&gt; &gt;&gt;&gt; +    void scheduleAfterDelay(const char* name, std::function&lt;bool ()&gt;, std::chrono::seconds, int priority = G_PRIORITY_DEFAULT, std::function&lt;void ()&gt; destroyFunction = nullptr, GMainContext* = nullptr);
&gt; &gt;&gt; 
&gt; &gt;&gt; Can we simplify these into just two separate functions, differing in the type of the callback but both taking in std::chrono::milliseconds?
&gt; &gt;&gt; 
&gt; &gt;&gt; std::chrono::duration object should use the implicit constructor to convert between durations, so you could call sheduleAfterDelay() with std::chrono::seconds which would then get converted into milliseconds.
&gt; &gt; 
&gt; &gt; The implementation is not the same, when we receive milliseconds, we use g_timeout_source_new, and when we receive seconds we use g_timeout_source_new_seconds. They are different sources.
&gt; 
&gt; Can we afford to only use g_timeout_source_new? Looking at the GLib code, the only difference g_timeout_source_new_seconds adds is a conditional branch in g_timeout_set_expiration that slightly modifies the expiration time of the source.

It&apos;s not exactly the same, with timeout_seconds the sources a grouped and dispatched together which is less accurate, but more efficient. See the documentation of g_timeout_add_seconds_full(). I added this, because we were using g_timeout_add_seconds somewhere, and I assumed it was used for this reason and not to avoid the conversion to milliseconds.

&gt; &gt;&gt;&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:102
&gt; &gt;&gt;&gt; +    GMainLoopSource::create().schedule(&quot;[WebKit] RunLoop work&quot;, std::bind(&amp;RunLoop::performWork, this));
&gt; &gt;&gt; 
&gt; &gt;&gt; Consider using a C++11 lambda, but remember to protect the RunLoop object through the reference counting mechanism:
&gt; &gt;&gt; 
&gt; &gt;&gt;     ref();
&gt; &gt;&gt;     GMainLoopSource::create().schedule(..., [this] {
&gt; &gt;&gt;         performWork();
&gt; &gt;&gt;         deref();
&gt; &gt;&gt;     });
&gt; &gt; 
&gt; &gt; We were not getting a ref before, I&apos;m trying to do what current code does (unless it&apos;s wrong of course). We can improve it later.
&gt; 
&gt; The current code doesn&apos;t guarantee (though ref-counting) that the RunLoop object will exist when the callback will be eventually fired.

So, it&apos;s a different bug.

&gt; &gt;&gt;&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:118
&gt; &gt;&gt;&gt; +    m_timerSource.scheduleAfterDelay(&quot;[WebKit] RunLoop::Timer&quot;, static_cast&lt;std::function&lt;bool ()&gt;&gt;([this, repeat]() { fired(); return repeat; }),
&gt; &gt;&gt; 
&gt; &gt;&gt; Consider simply using the std::function&lt;bool ()&gt; constructor instead of the static_cast to that type.
&gt; &gt; 
&gt; &gt; That would be something like std::function&lt;bool ()&gt;(lambda); ?
&gt; 
&gt; Exactly.

I&apos;ll try that way, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990380</commentid>
    <comment_count>25</comment_count>
      <attachid>226675</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-14 03:32:15 -0700</bug_when>
    <thetext>Created attachment 226675
Updated patch

Addresses all review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990381</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-14 03:33:25 -0700</bug_when>
    <thetext>Attachment 226675 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:78:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gtk/RunLoopGtk.cpp:120:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:88:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:96:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:104:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:126:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:135:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:144:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:153:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 19 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990423</commentid>
    <comment_count>27</comment_count>
      <attachid>226675</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-03-14 05:32:26 -0700</bug_when>
    <thetext>Comment on attachment 226675
Updated patch

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

&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:104
&gt; +        G_PRIORITY_DEFAULT, [this]() { deref(); });

Nit: you can omit the () parentheses: &apos;[this] { deref(); }&apos;

&gt; Source/WTF/wtf/gtk/RunLoopGtk.cpp:120
&gt; +    m_timerSource.scheduleAfterDelay(&quot;[WebKit] RunLoop::Timer&quot;, std::function&lt;bool ()&gt;([this, repeat]() { fired(); return repeat; }),

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990919</commentid>
    <comment_count>28</comment_count>
      <attachid>226675</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-03-15 20:32:16 -0700</bug_when>
    <thetext>Comment on attachment 226675
Updated patch

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

Looks good for landing with Zan&apos;s suggestions.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:46
&gt; +GMainLoopSource&amp; GMainLoopSource::create()
&gt; +{
&gt; +    return *new GMainLoopSource(DeleteOnDestroy);
&gt; +}
&gt; +
&gt; +GMainLoopSource::GMainLoopSource()
&gt; +    : m_deleteOnDestroy(DoNotDeleteOnDestroy)
&gt; +{
&gt; +}
&gt; +
&gt; +GMainLoopSource::GMainLoopSource(DeleteOnDestroyType deleteOnDestroy)
&gt; +    : m_deleteOnDestroy(deleteOnDestroy)
&gt; +{
&gt; +}

This is quite clever.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:194
&gt; +    bool retval = m_socketCallback(condition);
&gt; +    if (!retval &amp;&amp; source == m_source.get())
&gt; +        destroy();

Nit: I think you should use returnValue instead of retval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990920</commentid>
    <comment_count>29</comment_count>
      <attachid>226675</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-03-15 21:16:43 -0700</bug_when>
    <thetext>Comment on attachment 226675
Updated patch

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

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:46
&gt;&gt; +}
&gt; 
&gt; This is quite clever.

Just thinking about this, the ::create thing is a bit confusing, because it doesn&apos;t actually return something that you are supposed to delete (like other create methods). I wonder if you can just make static versions of the schedule methods that take care of creating the source? So when you call it, it would look something like:

GMainLoopSource::schedule(&quot;[WebKit] RunLoop work&quot;, std::bind(&amp;RunLoop::performWork, this), G_PRIORITY_DEFAULT, [this]() { deref(); });

One issue with this is that &quot;schedule&quot; cannot be both static and an instance method, so we&apos;d need to pick one name for the static version and one for the instance version.

I think another option would be to rename &quot;create&quot; to something else that makes it clear that this isn&apos;t a traditional factory method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991154</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-17 02:20:49 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 226675 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226675&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:46
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; This is quite clever.
&gt; 
&gt; Just thinking about this, the ::create thing is a bit confusing, because it doesn&apos;t actually return something that you are supposed to delete (like other create methods).

hmm, this is a good point.

&gt; I wonder if you can just make static versions of the schedule methods that take care of creating the source? So when you call it, it would look something like:
&gt; 
&gt; GMainLoopSource::schedule(&quot;[WebKit] RunLoop work&quot;, std::bind(&amp;RunLoop::performWork, this), G_PRIORITY_DEFAULT, [this]() { deref(); });
&gt; 
&gt; One issue with this is that &quot;schedule&quot; cannot be both static and an instance method, so we&apos;d need to pick one name for the static version and one for the instance version.

I think this is a good idea, the problem is indeed choosing good names :-) scheduleAndDeleteOnDestroy? scheduleDeletingOnDestroy? ...

&gt; I think another option would be to rename &quot;create&quot; to something else that makes it clear that this isn&apos;t a traditional factory method.

Well, I agree this is not consistent with other cases where we use create(), but we are actually creating a new object, so I can&apos;t think of a better name. createdAutoDeleted? ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991650</commentid>
    <comment_count>31</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-18 07:17:56 -0700</bug_when>
    <thetext>I think it will be easier and simpler if I rename the create static method instead of duplicate all schedule methods with a static variant and a different name. What do you think about createAndDeleteOnDestroy()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991663</commentid>
    <comment_count>32</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-03-18 07:50:25 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; I think it will be easier and simpler if I rename the create static method instead of duplicate all schedule methods with a static variant and a different name. What do you think about createAndDeleteOnDestroy()?

Sounds good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992089</commentid>
    <comment_count>33</comment_count>
      <attachid>227177</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-19 06:46:04 -0700</bug_when>
    <thetext>Created attachment 227177
New patch for landing

I&apos;ve updated the patch because I&apos;ve noticed some issues in edge cases while porting WebCore. The current patch prevents cancel from being called twice when the destroy function cancels the source. Also handles the case where the destroy function deletes the source. And I&apos;ve noticed that in some cases we want to know if the source is scheduled, but in other we want to know if it&apos;s active (for example for boolean sources that are dispatched several times). So, I have added an internal status and exposed both isScheduled() and isActive().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992091</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-19 06:51:24 -0700</bug_when>
    <thetext>Attachment 227177 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:83:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:85:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:86:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gtk/RunLoopGtk.cpp:120:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:110:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:118:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:146:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:155:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:164:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:173:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 19 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992433</commentid>
    <comment_count>35</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-20 00:57:13 -0700</bug_when>
    <thetext>Committed r165952: &lt;http://trac.webkit.org/changeset/165952&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226318</attachid>
            <date>2014-03-10 10:38:45 -0700</date>
            <delta_ts>2014-03-11 02:29:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-g-main-loop-source.diff</filename>
            <type>text/plain</type>
            <size>122428</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZGU5NjllYy4uZDAyNDA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxNC0wMy0xMCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dM
SUJdIEFkZCBHTWFpbkxvb3BTb3VyY2UgY2xhc3MgdG8gd3JhcCBpZGxlIGFuZCB0aW1lb3V0IHNv
dXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
MDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR0xp
YiBtYWluIGxvb3Agc291cmNlcyBsaWtlIGlkbGUgYW5kIHRpbWVvdXRzIGFyZSBzb21ldGltZXMK
KyAgICAgICAgdW5jb252ZW5pZW50IHRvIHVzZSBhbmQgaXQncyB2ZXJ5IGNvbW1vbiB0byBmb3Jn
ZXQgY2FuY2VsaW5nIHRoZQorICAgICAgICBzb3VyY2Ugd2hlbiB0aGUgb2JqZWN0IGlzIGRlc3Ry
b3llZCBvciByZXNldCB0aGUgc291cmNlIElEIGluIHRoZQorICAgICAgICBjYWxsYmFjayB3aGVu
IGNhbGxlZC4gR01haW5Mb29wU291cmNlIGlzIGEgd3JhcHBlciBjbGFzcyB0byBtYWtlIGl0Cisg
ICAgICAgIGVhc2llciB0byBoYW5kbGUgc291cmNlcyBhbmQgYWxzbyB0byBhdm9pZCB0aG9zZSB0
eXBpY2FsIG1pc3Rha2VzLgorICAgICAgICBJdCBmb3JjZXMgdG8gY3JlYXRlIHNvdXJjZXMgd2l0
aCBhIG5hbWUgYW5kIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZQorICAgICAgICB0byBkZWFsIHdpdGgg
dGhlIHNvdXJjZSBJRCBhbnltb3JlLiBUaGUgc291cmNlIGlzIGNhbmNlbGxlZCB3aGVuCisgICAg
ICAgIHRoZSBvYmplY3QgaXMgZGVsZXRlZCBvciB3aGVuIGEgbmV3IHNvdXJjZSBpcyBzY2hlZHVs
ZWQuIEl0IHVzZXMKKyAgICAgICAgc3RkOjpmdW5jdGlvbiBmb3IgY2FsbGJhY2tzIHNvIHRoYXQg
d2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdXNlIHRoZQorICAgICAgICAicHJveHkiIHN0YXRpYyBjYWxs
YmFja3MgZWl0aGVyLiBXZSBjYW4gdXNlIHN0ZDo6YmluZCB0byB1c2UgYQorICAgICAgICBmdW5j
dGlvbiBwb2ludGVyIG9yIGEgbWVtYmVyIG9yIGV2ZW4gbGFtYmRhIGZ1bmN0aW9ucy4gSXQgYWxz
byBoYW5kbGVzCisgICAgICAgIHJlcGVhdGluZyBzb3VyY2VzIGF1dG9tYXRpY2FsbHkgZGVwZW5k
aW5nIG9uIHdoZXRoZXIgdGhlIGdpdmVuCisgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgYSBib29s
IG9yIG5vdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogd3Rm
L1BsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUdUSy5jbWFrZToKKyAg
ICAgICAgKiB3dGYvUnVuTG9vcC5oOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKToKKyAgICAg
ICAgKFdURjo6R01haW5Mb29wU291cmNlOjp+R01haW5Mb29wU291cmNlKToKKyAgICAgICAgKFdU
Rjo6R01haW5Mb29wU291cmNlOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OnJlc2V0KToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUlkbGVT
b3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKToKKyAgICAg
ICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UpOgorICAgICAg
ICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheSk6CisgICAgICAgIChX
VEY6OkdNYWluTG9vcFNvdXJjZTo6dm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5M
b29wU291cmNlOjpib29sQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6
OnNvY2tldENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpkZXN0cm95
KToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjp2b2lkU291cmNlQ2FsbGJhY2spOgor
ICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmJvb2xTb3VyY2VDYWxsYmFjayk6CisgICAg
ICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c29ja2V0U291cmNlQ2FsbGJhY2spOgorICAgICAg
ICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
R01haW5Mb29wU291cmNlOjppc1NjaGVkdWxlZCk6CisgICAgICAgICogd3RmL2d0ay9NYWluVGhy
ZWFkR3RrLmNwcDoKKyAgICAgICAgKFdURjo6c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFp
blRocmVhZCk6CisgICAgICAgICogd3RmL2d0ay9SdW5Mb29wR3RrLmNwcDoKKyAgICAgICAgKFdU
Rjo6UnVuTG9vcDo6d2FrZVVwKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpU
aW1lckJhc2UpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAg
ICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdURjo6UnVu
TG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisKIDIwMTQtMDMtMDcgIHBlYXZvQG91dGxvb2su
Y29tICA8cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW1dpbjY0XSBDb21waWxlIGVycm9y
IGFmdGVyIHIxNjUxMjguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3Qu
YW0gYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNjc2YTMwMi4uZDRhZGZl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjEyLDYgKzIxMiw4IEBAIHd0Zl9zb3VyY2Vz
ICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3N0cnRvZC5jYyBcCiAgICAgU291cmNlL1dU
Ri93dGYvZHRvYS9zdHJ0b2QuaCBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS91dGlscy5oIFwK
KyAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAgXAorICAgIFNv
dXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmggXAogICAgIFNvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3Qv
R1JlZlB0ci5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYjRlMjEwYS4uZDI2M2RhZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTQsNiArNCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgZWZsL1JlZlB0ckVmbC5jcHAKICAgICBlZmwvUnVuTG9vcEVmbC5jcHAKIAorICAgIGdvYmpl
Y3QvR01haW5Mb29wU291cmNlLmNwcAogICAgIGdvYmplY3QvR1JlZlB0ci5jcHAKICkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA3MDI2MmYzLi5kNzJkNzA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtMSw0ICsxLDUgQEAKIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCisg
ICAgZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCiAgICAgZ29iamVjdC9HUmVmUHRyLmNwcAog
ICAgIGdvYmplY3QvR2xpYlV0aWxpdGllcy5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUnVuTG9vcC5oIGIvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCmluZGV4IDVlZDZhZDEuLjhi
ZTU2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9SdW5Mb29wLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKICNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKEVGTCkKQEAgLTk4LDExICs5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgRWNvcmVf
VGltZXIqIG1fdGltZXI7CiAgICAgICAgIGJvb2wgbV9pc1JlcGVhdGluZzsKICNlbGlmIFVTRShH
TElCKQotICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gdGltZXJGaXJlZENhbGxiYWNrKFJ1bkxvb3A6
OlRpbWVyQmFzZSopOwotICAgICAgICBnYm9vbGVhbiBpc1JlcGVhdGluZygpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZXBlYXRpbmc7IH0KLSAgICAgICAgdm9pZCBjbGVhclRpbWVyU291cmNlKCk7Ci0g
ICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gbV90aW1lclNvdXJjZTsKLSAgICAgICAgZ2Jvb2xlYW4g
bV9pc1JlcGVhdGluZzsKKyAgICAgICAgR01haW5Mb29wU291cmNlIG1fdGltZXJTb3VyY2U7CiAj
ZW5kaWYKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWlu
TG9vcFNvdXJjZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkNzkxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcApAQCAt
MCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR01haW5Mb29wU291cmNlLmgi
CisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitHTWFpbkxvb3BT
b3VyY2UmIEdNYWluTG9vcFNvdXJjZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gKm5ldyBHTWFp
bkxvb3BTb3VyY2UodHJ1ZSk7Cit9CisKK0dNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNl
KCkKKyAgICA6IG1fZGVsZXRlT25EZXN0cm95KGZhbHNlKQoreworfQorCitHTWFpbkxvb3BTb3Vy
Y2U6OkdNYWluTG9vcFNvdXJjZShib29sIGRlbGV0ZU9uRGVzdHJveSkKKyAgICA6IG1fZGVsZXRl
T25EZXN0cm95KGRlbGV0ZU9uRGVzdHJveSkKK3sKK30KKworR01haW5Mb29wU291cmNlOjp+R01h
aW5Mb29wU291cmNlKCkKK3sKKyAgICBjYW5jZWwoKTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3Vy
Y2U6OmNhbmNlbCgpCit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgLy8gQ2FuY2VsaW5nIHRoZSBjYW5jZWxs
YWJsZSB3aWxsIG1ha2UgdGhlIHNvdXJjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQKKyAgICAgICAg
Ly8gc28gdGhlIHNvdXJjZSBpcyBkZXN0cm95ZWQgd2hlbiBpdCByZXR1cm5zCisgICAgICAgIGdf
Y2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CisgICAgcmVz
ZXQoKTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnJlc2V0KCkKK3sKKyAgICBtX3NvdXJj
ZSA9IG51bGxwdHI7CisgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgbV92b2lkQ2Fs
bGJhY2sgPSBudWxscHRyOworICAgIG1fYm9vbENhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBtX2Rl
c3Ryb3lDYWxsYmFjayA9IG51bGxwdHI7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMgc291cmNlRnVuY3Rp
b24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIG1fc291cmNl
ID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOworICAgIGdfc291cmNlX3NldF9uYW1l
KG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9E
RUZBVUxUX0lETEUpCisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQo
KSwgcHJpb3JpdHkpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwg
c291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX3Nv
dXJjZS5nZXQoKSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQg
cHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCit7CisgICAgY2FuY2VsKCk7CisgICAgbV92b2lkQ2FsbGJhY2sgPSBz
dGQ6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRl
c3Ryb3lGdW5jdGlvbik7CisgICAgc2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0
KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUs
IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBjYW5jZWwoKTsKKyAgICBtX2Jvb2xDYWxsYmFjayA9IHN0ZDo6bW92ZShmdW5jdGlvbik7
CisgICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBzdGQ6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAg
ICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
Ym9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWlu
TG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29s
IChHSU9Db25kaXRpb24pPiBmdW5jdGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24g
Y29uZGl0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5D
b250ZXh0KiBjb250ZXh0KQoreworICAgIGNhbmNlbCgpOworICAgIG1fc29ja2V0Q2FsbGJhY2sg
PSBzdGQ6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3Zl
KGRlc3Ryb3lGdW5jdGlvbik7CisgICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNl
bGxhYmxlX25ldygpKTsKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVf
c291cmNlKHNvY2tldCwgY29uZGl0aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7CisgICAgZ19z
b3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc29j
a2V0U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2go
bV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2No
ZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1
bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NF
UlQobV9zb3VyY2UpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1l
KTsKKyAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUKQorICAgICAgICBnX3Nv
dXJjZV9zZXRfcHJpb3JpdHkobV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxs
cHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworfQor
Cit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95
RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBt
X3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgpKSk7
CisgICAgbV92b2lkQ2FsbGJhY2sgPSBzdGQ6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJv
eUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgc2NoZWR1bGVUaW1l
b3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VD
YWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6
OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wg
KCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3Jp
dHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgY2FuY2VsKCk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190
aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXkuY291bnQoKSkpOworICAgIG1fYm9vbENhbGxiYWNrID0g
c3RkOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IHN0ZDo6bW92ZShk
ZXN0cm95RnVuY3Rpb24pOworICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVy
cHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29u
dGV4dCk7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29u
c3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJv
bm86OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBk
ZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsK
KyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRl
bGF5LmNvdW50KCkpKTsKKyAgICBtX3ZvaWRDYWxsYmFjayA9IHN0ZDo6bW92ZShmdW5jdGlvbik7
CisgICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBzdGQ6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAg
ICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lkIEdN
YWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBp
bnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFp
bkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgY2FuY2VsKCk7CisgICAgbV9zb3VyY2UgPSBhZG9w
dEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7CisgICAg
bV9ib29sQ2FsbGJhY2sgPSBzdGQ6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxi
YWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgc2NoZWR1bGVUaW1lb3V0U291
cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFj
ayksIHByaW9yaXR5LCBjb250ZXh0KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnZvaWRD
YWxsYmFjaygpCit7CisgICAgQVNTRVJUKG1fdm9pZENhbGxiYWNrKTsKKworICAgIEdTb3VyY2Uq
IHNvdXJjZSA9IG1fc291cmNlLmdldCgpOworICAgIG1fdm9pZENhbGxiYWNrKCk7CisgICAgaWYg
KHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKKyAgICAgICAgZGVzdHJveSgpOworfQorCitib29s
IEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQobV9ib29sQ2Fs
bGJhY2spOworCisgICAgR1NvdXJjZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7CisgICAgYm9v
bCByZXR2YWwgPSBtX2Jvb2xDYWxsYmFjaygpOworICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9
PSBtX3NvdXJjZS5nZXQoKSkKKyAgICAgICAgZGVzdHJveSgpOworCisgICAgcmV0dXJuIHJldHZh
bDsKK30KKworYm9vbCBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlv
biBjb25kaXRpb24pCit7CisgICAgQVNTRVJUKG1fc29ja2V0Q2FsbGJhY2spOworCisgICAgaWYg
KGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKG1fY2FuY2VsbGFibGUuZ2V0KCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5nZXQoKTsK
KyAgICBib29sIHJldHZhbCA9IG1fc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKKyAgICBpZiAo
IXJldHZhbCAmJiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkpCisgICAgICAgIGRlc3Ryb3koKTsK
KworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95
KCkKK3sKKyAgICBpZiAobV9kZXN0cm95Q2FsbGJhY2spCisgICAgICAgIG1fZGVzdHJveUNhbGxi
YWNrKCk7CisgICAgcmVzZXQoKTsKKworICAgIGlmICghbV9kZWxldGVPbkRlc3Ryb3kpCisgICAg
ICAgIHJldHVybjsKKworICAgIGRlbGV0ZSB0aGlzOworfQorCitnYm9vbGVhbiBHTWFpbkxvb3BT
b3VyY2U6OnZvaWRTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3VyY2UqIHNvdXJjZSkKK3sKKyAg
ICBzb3VyY2UtPnZvaWRDYWxsYmFjaygpOworICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Cit9
CisKK2dib29sZWFuIEdNYWluTG9vcFNvdXJjZTo6Ym9vbFNvdXJjZUNhbGxiYWNrKEdNYWluTG9v
cFNvdXJjZSogc291cmNlKQoreworICAgIHJldHVybiBzb3VyY2UtPmJvb2xDYWxsYmFjaygpID09
IENvbnRpbnVlOworfQorCitnYm9vbGVhbiBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldFNvdXJjZUNh
bGxiYWNrKEdTb2NrZXQqLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBHTWFpbkxvb3BTb3VyY2Uq
IHNvdXJjZSkKK3sKKyAgICByZXR1cm4gc291cmNlLT5zb2NrZXRDYWxsYmFjayhjb25kaXRpb24p
ID09IENvbnRpbnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaCBiL1NvdXJjZS9XVEYvd3RmL2dv
YmplY3QvR01haW5Mb29wU291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNzcwYjI0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01h
aW5Mb29wU291cmNlLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdNYWluTG9vcFNvdXJjZV9oCisjZGVm
aW5lIEdNYWluTG9vcFNvdXJjZV9oCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit0eXBl
ZGVmIHN0cnVjdCBfR1NvY2tldCBHU29ja2V0OworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3Mg
R01haW5Mb29wU291cmNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTWFpbkxvb3BTb3Vy
Y2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBH
TWFpbkxvb3BTb3VyY2UmIGNyZWF0ZSgpOworCisgICAgR01haW5Mb29wU291cmNlKCk7CisgICAg
fkdNYWluTG9vcFNvdXJjZSgpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgU3RvcCA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdCBib29sIENvbnRpbnVlID0gdHJ1ZTsKKworICAgIGJvb2wgaXNT
Y2hlZHVsZWQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIHZvaWQgc2NoZWR1bGUo
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiwgaW50IHByaW9yaXR5ID0g
R19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlv
biA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVkdWxl
KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4sIGludCBwcmlvcml0eSA9
IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rp
b24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hlZHVs
ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0NvbmRpdGlvbik+LCBH
U29ja2V0KiwgR0lPQ29uZGl0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5j
dGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVk
dWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFV
TFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01h
aW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQgc2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0
IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0
cik7CisgICAgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiwgc3RkOjpjaHJvbm86OnNlY29uZHMsIGludCBwcmlvcml0eSA9IEdf
UFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24g
PSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hlZHVsZUFm
dGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiwgc3RkOjpj
aHJvbm86OnNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQq
ID0gbnVsbHB0cik7CisgICAgdm9pZCBjYW5jZWwoKTsKKworcHJpdmF0ZToKKyAgICBHTWFpbkxv
b3BTb3VyY2UoYm9vbCBkZXRlbGVPbkRlc3Ryb3kpOworCisgICAgdm9pZCByZXNldCgpOworICAg
IHZvaWQgc2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBp
bnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOworICAgIHZvaWQgc2NoZWR1bGVUaW1lb3V0U291
cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWluQ29u
dGV4dCopOworICAgIHZvaWQgdm9pZENhbGxiYWNrKCk7CisgICAgYm9vbCBib29sQ2FsbGJhY2so
KTsKKyAgICBib29sIHNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbik7CisgICAgdm9pZCBkZXN0
cm95KCk7CisgICAgc3RhdGljIGdib29sZWFuIHZvaWRTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BT
b3VyY2UqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gYm9vbFNvdXJjZUNhbGxiYWNrKEdNYWluTG9v
cFNvdXJjZSopOworICAgIHN0YXRpYyBnYm9vbGVhbiBzb2NrZXRTb3VyY2VDYWxsYmFjayhHU29j
a2V0KiwgR0lPQ29uZGl0aW9uLCBHTWFpbkxvb3BTb3VyY2UqKTsKKworICAgIGJvb2wgbV9kZWxl
dGVPbkRlc3Ryb3k7CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKKyAgICBHUmVmUHRy
PEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
IG1fdm9pZENhbGxiYWNrOworICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gbV9ib29sQ2FsbGJh
Y2s7CisgICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25kaXRpb24pPiBtX3NvY2tldENhbGxi
YWNrOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV9kZXN0cm95Q2FsbGJhY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpHTWFpbkxvb3BTb3VyY2U7CisKKyNl
bmRpZiAvLyBHTWFpbkxvb3BTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3Rr
L01haW5UaHJlYWRHdGsuY3BwIGIvU291cmNlL1dURi93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3Bw
CmluZGV4IGMwNTdlYTcuLjVlMmI5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2d0ay9N
YWluVGhyZWFkR3RrLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWlu
VGhyZWFkLmgiCiAKLSNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01h
aW5Mb29wU291cmNlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zOCwxNSArMzgsOSBAQCB2
b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQogewogfQogCi1zdGF0aWMgZ2Jvb2xl
YW4gdGltZW91dEZpcmVkKGdwb2ludGVyKQotewotICAgIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1h
aW5UaHJlYWQoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KIHZvaWQgc2NoZWR1bGVEaXNwYXRj
aEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCiB7Ci0gICAgZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJ
VFlfREVGQVVMVCwgdGltZW91dEZpcmVkLCAwLCAwKTsKKyAgICBHTWFpbkxvb3BTb3VyY2U6OmNy
ZWF0ZSgpLnNjaGVkdWxlKCJbV2ViS2l0XSBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFk
IiwgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BHdGsuY3BwIGIvU291
cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BHdGsuY3BwCmluZGV4IDhhMmVhMjIuLmExZTcwZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2d0ay9SdW5Mb29wR3RrLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9ndGsvUnVuTG9vcEd0ay5jcHAKQEAgLTk3LDI1ICs5NywxNCBAQCB2b2lkIFJ1bkxv
b3A6OnN0b3AoKQogICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxhc3RNYWluTG9vcC5nZXQoKSk7
CiB9CiAKLWdib29sZWFuIFJ1bkxvb3A6OnF1ZXVlV29yayhSdW5Mb29wKiBydW5Mb29wKQotewot
ICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCiB2b2lk
IFJ1bkxvb3A6Ondha2VVcCgpCiB7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBzb3VyY2UgPSBhZG9w
dEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7Ci0gICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KHNv
dXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJh
Y2soc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6
cXVldWVXb3JrKSwgdGhpcywgMCk7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKHNvdXJjZS5nZXQoKSwg
bV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7Ci0KKyAgICBHTWFpbkxvb3BTb3VyY2U6OmNyZWF0ZSgp
LnNjaGVkdWxlKCJbV2ViS2l0XSBSdW5Mb29wIHdvcmsiLCBbdGhpc10oKSB7IHBlcmZvcm1Xb3Jr
KCk7IH0pOwogICAgIGdfbWFpbl9jb250ZXh0X3dha2V1cChtX3J1bkxvb3BDb250ZXh0LmdldCgp
KTsKIH0KIAogUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2UoUnVuTG9vcCogcnVuTG9vcCkK
ICAgICA6IG1fcnVuTG9vcChydW5Mb29wKQotICAgICwgbV90aW1lclNvdXJjZSgwKQogewogfQog
CkBAIC0xMjQsNDYgKzExMywyMCBAQCBSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UoKQog
ICAgIHN0b3AoKTsKIH0KIAotdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OmNsZWFyVGltZXJTb3Vy
Y2UoKQotewotICAgIG1fdGltZXJTb3VyY2UgPSAwOwotfQotCi1nYm9vbGVhbiBSdW5Mb29wOjpU
aW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayhSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyKQot
ewotICAgIEdTb3VyY2UqIGN1cnJlbnRUaW1lclNvdXJjZSA9IHRpbWVyLT5tX3RpbWVyU291cmNl
LmdldCgpOwotICAgIGJvb2wgaXNSZXBlYXRpbmcgPSB0aW1lci0+aXNSZXBlYXRpbmcoKTsKLSAg
ICAvLyBUaGlzIGNhbiBjaGFuZ2UgdGhlIHRpbWVyU291cmNlIGJ5IHN0YXJ0aW5nIGEgbmV3IHRp
bWVyIHdpdGhpbiB0aGUgY2FsbGJhY2suCi0gICAgaWYgKCFpc1JlcGVhdGluZyAmJiBjdXJyZW50
VGltZXJTb3VyY2UgPT0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCkpCi0gICAgICAgIHRpbWVy
LT5jbGVhclRpbWVyU291cmNlKCk7Ci0KLSAgICB0aW1lci0+ZmlyZWQoKTsKLSAgICByZXR1cm4g
aXNSZXBlYXRpbmc7Ci19Ci0KIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUg
ZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKIHsKLSAgICBpZiAobV90aW1lclNvdXJjZSkKLSAg
ICAgICAgc3RvcCgpOwotCi0gICAgbV90aW1lclNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRf
c291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZmlyZUludGVydmFsICogMTAwMCkpKTsKLSAg
ICBtX2lzUmVwZWF0aW5nID0gcmVwZWF0OwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3Rp
bWVyU291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6
VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9h
dHRhY2gobV90aW1lclNvdXJjZS5nZXQoKSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0Lmdl
dCgpKTsKKyAgICBtX3RpbWVyU291cmNlLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gUnVu
TG9vcDo6VGltZXIgd29yayIsIHN0YXRpY19jYXN0PHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4+KFt0
aGlzLCByZXBlYXRdKCkgeyBmaXJlZCgpOyByZXR1cm4gcmVwZWF0OyB9KSwKKyAgICAgICAgc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpj
aHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oZmlyZUludGVydmFsKSkpOwogfQogCiB2b2lkIFJ1bkxv
b3A6OlRpbWVyQmFzZTo6c3RvcCgpCiB7Ci0gICAgaWYgKCFtX3RpbWVyU291cmNlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXJTb3VyY2UuZ2V0KCkpOwot
ICAgIGNsZWFyVGltZXJTb3VyY2UoKTsKKyAgICBtX3RpbWVyU291cmNlLmNhbmNlbCgpOwogfQog
CiBib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVy
biBtX3RpbWVyU291cmNlOworICAgIHJldHVybiBtX3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDc1YzIyMDAuLjg1MWFkNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5OSBAQAorMjAxNC0wMy0xMCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dMSUJdIEFkZCBHTWFpbkxv
b3BTb3VyY2UgY2xhc3MgdG8gd3JhcCBpZGxlIGFuZCB0aW1lb3V0IHNvdXJjZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMDI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIEdNYWluTG9vcFNvdXJj
ZSBmb3IgaWRsZSBhbmQgdGltZW91dCBzb3VyY2VzLgorCisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVNhbXBsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzdHJlYW1DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRy
YWNrT2ZTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBl
bGluZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dmlkZW9DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2Fwcyk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5v
dGlmeVBsYXllck9mQXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6On5NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5
UGxheWVyT2ZNdXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6Om11dGVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyOjphY3RpdmVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OnRhZ3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYmtpdFZpZGVvU2lua1RpbWVvdXRDYWxsYmFj
ayk6CisgICAgICAgICh3ZWJraXRWaWRlb1NpbmtSZW5kZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAg
ICAgICh3ZWJraXRfbWVkaWFfc3JjX2luaXQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNGaW5h
bGl6ZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcCk6CisgICAgICAgICh3ZWJL
aXRNZWRpYUF1ZGlvU3JjU3RvcCk6CisgICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3JjU3RhcnQp
OgorICAgICAgICAod2ViS2l0TWVkaWFBdWRpb1NyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdE1l
ZGlhU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRh
TWFpbkNiKToKKyAgICAgICAgKHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YU1haW5DYik6Cisg
ICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3JjTmVlZERhdGFDYik6CisgICAgICAgICh3ZWJLaXRN
ZWRpYUF1ZGlvU3JjTmVlZERhdGFDYik6CisgICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3JjRW5v
dWdoRGF0YU1haW5DYik6CisgICAgICAgICh3ZWJLaXRNZWRpYUF1ZGlvU3JjRW5vdWdoRGF0YU1h
aW5DYik6CisgICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YUNiKToKKyAgICAg
ICAgKHdlYktpdE1lZGlhQXVkaW9TcmNFbm91Z2hEYXRhQ2IpOgorICAgICAgICAod2ViS2l0TWVk
aWFWaWRlb1NyY1NlZWtNYWluQ2IpOgorICAgICAgICAod2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtN
YWluQ2IpOgorICAgICAgICAod2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtEYXRhQ2IpOgorICAgICAg
ICAod2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtEYXRhQ2IpOgorICAgICAgICAoTWVkaWFTb3VyY2VD
bGllbnRHc3RyZWFtZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
d2Via2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6Cisg
ICAgICAgIChyZW1vdmVUaW1lb3V0U291cmNlcyk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9w
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0No
YW5nZVN0YXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKToKKyAgICAg
ICAgKHdlYktpdFdlYlNyY05lZWREYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5vdWdo
RGF0YU1haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IpOgorICAgICAg
ICAod2ViS2l0V2ViU3JjU2Vla01haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrRGF0
YUNiKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlUmVzcG9uc2VSZWNlaXZlZCk6
CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZURhdGFSZWNlaXZlZCk6CisgICAgICAg
IChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZU5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Rr
RHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1NoYXJlZFRpbWVyR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVJbnRl
cnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpzdG9wU2hhcmVkVGltZXIpOgorCiAyMDE0LTAzLTEw
ICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZW1v
dmUgdW51c2VkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KCkgZnJvbSBTdG9yYWdlQXJlYVN5bmMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Zp
bGVSZWFkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKaW5kZXggZTY4N2U1Ny4uZjBlNDg5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKQEAgLTI3LDE0ICsy
NywxNCBAQAogCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBw
c2luay5oPgorI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgogI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CiAjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlx
dWVQdHIuaD4KIAotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEF1ZGlvRmlsZVJlYWRlciB7CkBAIC0xMDgsMTMgKzEwOCw2IEBAIHN0
YXRpYyB2b2lkIG9uR1N0cmVhbWVyRGVjb2RlYmluUGFkQWRkZWRDYWxsYmFjayhHc3RFbGVtZW50
KiwgR3N0UGFkKiBwYWQsIEF1ZGlvCiAgICAgcmVhZGVyLT5wbHVnRGVpbnRlcmxlYXZlKHBhZCk7
CiB9CiAKLWdib29sZWFuIGVudGVyZWRNYWluTG9vcENhbGxiYWNrKGdwb2ludGVyIHVzZXJEYXRh
KQotewotICAgIEF1ZGlvRmlsZVJlYWRlciogcmVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxBdWRp
b0ZpbGVSZWFkZXIqPih1c2VyRGF0YSk7Ci0gICAgcmVhZGVyLT5kZWNvZGVBdWRpb0ZvckJ1c0Ny
ZWF0aW9uKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCiBBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlv
RmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0aCkKICAgICA6IG1fZGF0YSgwKQogICAgICwg
bV9kYXRhU2l6ZSgwKQpAQCAtMzQxLDkgKzMzNCw4IEBAIFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1
ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25v
CiAgICAgbV9sb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhjb250ZXh0LmdldCgpLCBG
QUxTRSkpOwogCiAgICAgLy8gU3RhcnQgdGhlIHBpcGVsaW5lIHByb2Nlc3NpbmcganVzdCBhZnRl
ciB0aGUgbG9vcCBpcyBzdGFydGVkLgotICAgIEdSZWZQdHI8R1NvdXJjZT4gdGltZW91dFNvdXJj
ZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldygwKSk7Ci0gICAgZ19zb3VyY2VfYXR0
YWNoKHRpbWVvdXRTb3VyY2UuZ2V0KCksIGNvbnRleHQuZ2V0KCkpOwotICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayh0aW1lb3V0U291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihlbnRlcmVkTWFpbkxvb3BDYWxsYmFjayksIHRoaXMsIDApOworICAgIEdNYWluTG9vcFNv
dXJjZSBzb3VyY2U7CisgICAgc291cmNlLnNjaGVkdWxlKCJbV2ViS2l0XSBBdWRpb0ZpbGVSZWFk
ZXI6OmRlY29kZUF1ZGlvRm9yQnVzQ3JlYXRpb24iLCBzdGQ6OmJpbmQoJkF1ZGlvRmlsZVJlYWRl
cjo6ZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbiwgdGhpcyksIEdfUFJJT1JJVFlfREVGQVVMVCwg
bnVsbHB0ciwgY29udGV4dC5nZXQoKSk7CiAKICAgICBnX21haW5fbG9vcF9ydW4obV9sb29wLmdl
dCgpKTsKICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQoY29udGV4dC5nZXQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKaW5kZXggYmVkMTBmYS4uNDIyMWY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNTIsMjIgKzUyLDggQEAgc3Rh
dGljIEdzdFBhZFByb2JlUmV0dXJuIHRleHRUcmFja1ByaXZhdGVFdmVudENhbGxiYWNrKEdzdFBh
ZCosIEdzdFBhZFByb2JlSW5mbyoKICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKIH0KIAot
c3RhdGljIGdib29sZWFuIHRleHRUcmFja1ByaXZhdGVTYW1wbGVUaW1lb3V0Q2FsbGJhY2soSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lciogdHJhY2spCi17Ci0gICAgdHJhY2stPm5vdGlm
eVRyYWNrT2ZTYW1wbGUoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biB0ZXh0VHJhY2tQcml2YXRlU3RyZWFtVGltZW91dENhbGxiYWNrKEluYmFuZFRleHRUcmFja1By
aXZhdGVHU3RyZWFtZXIqIHRyYWNrKQotewotICAgIHRyYWNrLT5ub3RpZnlUcmFja09mU3RyZWFt
Q2hhbmdlZCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihnaW50IGluZGV4LCBH
UmVmUHRyPEdzdFBhZD4gcGFkKQogICAgIDogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZShXZWJWVFQp
LCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBwYWQpCi0gICAgLCBtX3Nh
bXBsZVRpbWVySGFuZGxlcigwKQotICAgICwgbV9zdHJlYW1UaW1lckhhbmRsZXIoMCkKIHsKICAg
ICBtX2V2ZW50UHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZShtX3BhZC5nZXQoKSwgR1NUX1BBRF9Q
Uk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
UGFkUHJvYmVDYWxsYmFjaz4odGV4dFRyYWNrUHJpdmF0ZUV2ZW50Q2FsbGJhY2spLCB0aGlzLCAw
KTsKQEAgLTgyLDM2ICs2OCwyOCBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OmRpc2Nvbm5lY3QoKQogCiAgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUobV9wYWQuZ2V0KCks
IG1fZXZlbnRQcm9iZSk7CiAKLSAgICBpZiAobV9zdHJlYW1UaW1lckhhbmRsZXIpCi0gICAgICAg
IGdfc291cmNlX3JlbW92ZShtX3N0cmVhbVRpbWVySGFuZGxlcik7CisgICAgbV9zdHJlYW1UaW1l
ckhhbmRsZXIuY2FuY2VsKCk7CiAKICAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpkaXNj
b25uZWN0KCk7CiB9CiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6aGFu
ZGxlU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUpCiB7Ci0gICAgaWYgKG1fc2FtcGxl
VGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9zYW1wbGVUaW1lckhhbmRs
ZXIpOworICAgIG1fc2FtcGxlVGltZXJIYW5kbGVyLmNhbmNlbCgpOwogICAgIHsKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX3NhbXBsZU11dGV4KTsKICAgICAgICAgbV9wZW5kaW5nU2FtcGxl
cy5hcHBlbmQoc2FtcGxlKTsKICAgICB9Ci0gICAgbV9zYW1wbGVUaW1lckhhbmRsZXIgPSBnX3Rp
bWVvdXRfYWRkKDAsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHRleHRU
cmFja1ByaXZhdGVTYW1wbGVUaW1lb3V0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBtX3NhbXBsZVRp
bWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lcjo6bm90aWZ5VHJhY2tPZlNhbXBsZSIsIHN0ZDo6YmluZCgmSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlNhbXBsZSwgdGhpcykpOwogfQogCiB2b2lkIElu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OnN0cmVhbUNoYW5nZWQoKQogewotICAgIGlm
IChtX3N0cmVhbVRpbWVySGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fc3RyZWFt
VGltZXJIYW5kbGVyKTsKLSAgICBtX3N0cmVhbVRpbWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQo
MCwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odGV4dFRyYWNrUHJpdmF0
ZVN0cmVhbVRpbWVvdXRDYWxsYmFjayksIHRoaXMpOworICAgIG1fc3RyZWFtVGltZXJIYW5kbGVy
LnNjaGVkdWxlKCJbV2ViS2l0XSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3Rp
ZnlUcmFja09mU3RyZWFtQ2hhbmdlZCIsIHN0ZDo6YmluZCgmSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQsIHRoaXMpKTsKIH0KIAogdm9p
ZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mU2FtcGxlKCkK
IHsKLSAgICBtX3NhbXBsZVRpbWVySGFuZGxlciA9IDA7Ci0KICAgICBWZWN0b3I8R1JlZlB0cjxH
c3RTYW1wbGU+ID4gc2FtcGxlczsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9z
YW1wbGVNdXRleCk7CkBAIC0xNDIsOCArMTIwLDYgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mU2FtcGxlKCkKIAogdm9pZCBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mU3RyZWFtQ2hhbmdlZCgpCiB7Ci0gICAg
bV9zdHJlYW1UaW1lckhhbmRsZXIgPSAwOwotCiAgICAgR1JlZlB0cjxHc3RFdmVudD4gZXZlbnQg
PSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KG1fcGFkLmdldCgpLAogICAgICAg
ICBHU1RfRVZFTlRfU1RSRUFNX1NUQVJULCAwKSk7CiAgICAgaWYgKCFldmVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDI4NWNk
ODYuLmFmMDBhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFt
ZXIuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9v
cFNvdXJjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDggKzYyLDggQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyKGdpbnQg
aW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7CiAKLSAgICBndWludCBtX3NhbXBsZVRpbWVySGFuZGxl
cjsKLSAgICBndWludCBtX3N0cmVhbVRpbWVySGFuZGxlcjsKKyAgICBHTWFpbkxvb3BTb3VyY2Ug
bV9zYW1wbGVUaW1lckhhbmRsZXI7CisgICAgR01haW5Mb29wU291cmNlIG1fc3RyZWFtVGltZXJI
YW5kbGVyOwogICAgIGd1bG9uZyBtX2V2ZW50UHJvYmU7CiAgICAgVmVjdG9yPEdSZWZQdHI8R3N0
U2FtcGxlPiA+IG1fcGVuZGluZ1NhbXBsZXM7CiAgICAgU3RyaW5nIG1fc3RyZWFtSWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDBjNGVk
YmUuLjRhYjYyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwCkBAIC01OCw3ICs1OCw3IEBACiAKIC8vIE1heCBpbnRlcnZhbCBpbiBzZWNvbmRz
IHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbAogLy8gc3RhdGUgY2hhbmdlIHJl
cXVlc3RzLgotc3RhdGljIGNvbnN0IGd1aW50IGdSZWFkeVN0YXRlVGltZXJJbnRlcnZhbCA9IDYw
Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdSZWFkeVN0YXRlVGltZXJJbnRlcnZhbCA9IDYwOwog
CiBHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOwog
I2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZwpAQCAtOTIs
NDYgKzkyLDE4IEBAIHN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENh
bGxiYWNrKEdPYmplY3QqLCBNZWRpYVBsYXllclByaXZhdGVHCiAgICAgcGxheWVyLT5hdWRpb0No
YW5nZWQoKTsKIH0KIAotc3RhdGljIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hh
bmdlVGltZW91dENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQot
ewotICAgIC8vIFRoaXMgaXMgdGhlIGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJjZSBjcmVh
dGVkIGluIDo6YXVkaW9DaGFuZ2VkLgotICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZBdWRpbygp
OwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogc3RhdGljIHZvaWQgc2V0QXVkaW9TdHJlYW1Qcm9w
ZXJ0aWVzQ2FsbGJhY2soR3N0Q2hpbGRQcm94eSosIEdPYmplY3QqIG9iamVjdCwgZ2NoYXIqLAog
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewogICAgIHBsYXllci0+
c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzKG9iamVjdCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBt
ZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZVRpbWVvdXRDYWxsYmFjayhNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICAvLyBUaGlzIGlzIHRoZSBjYWxsYmFjayBv
ZiB0aGUgdGltZW91dCBzb3VyY2UgY3JlYXRlZCBpbiA6OnZpZGVvQ2hhbmdlZC4KLSAgICBwbGF5
ZXItPm5vdGlmeVBsYXllck9mVmlkZW8oKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVWaWRlb0NhcHNDaGFuZ2VUaW1lb3V0Q2FsbGJh
Y2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBp
cyB0aGUgY2FsbGJhY2sgb2YgdGhlIHRpbWVvdXQgc291cmNlIGNyZWF0ZWQgaW4gOjp2aWRlb0Nh
cHNDaGFuZ2VkLgotICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKTsKLSAgICBy
ZXR1cm4gRkFMU0U7Ci19Ci0KICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiBzdGF0aWMgdm9pZCBt
ZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKICAgICBwbGF5ZXItPnRleHRDaGFuZ2VkKCk7
CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlVGltZW91
dENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIC8v
IFRoaXMgaXMgdGhlIGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJjZSBjcmVhdGVkIGluIDo6
dGV4dENoYW5nZWQuCi0gICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlRleHQoKTsKLSAgICByZXR1
cm4gRkFMU0U7Ci19Ci0KIHN0YXRpYyBHc3RGbG93UmV0dXJuIG1lZGlhUGxheWVyUHJpdmF0ZU5l
d1RleHRTYW1wbGVDYWxsYmFjayhHT2JqZWN0KiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KiBwbGF5ZXIpCiB7CiAgICAgcGxheWVyLT5uZXdUZXh0U2FtcGxlKCk7CkBAIC0xMzksMTQgKzEx
MSw2IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIG1lZGlhUGxheWVyUHJpdmF0ZU5ld1RleHRTYW1w
bGVDYWxsYmFjayhHT2JqZWN0KiwgTWVkaWFQbGF5CiB9CiAjZW5kaWYKIAotc3RhdGljIGdib29s
ZWFuIG1lZGlhUGxheWVyUHJpdmF0ZVJlYWR5U3RhdGVUaW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyB0aGUgY2FsbGJh
Y2sgb2YgdGhlIHRpbWVvdXQgc291cmNlIGNyZWF0ZWQgaW4gOjpjaGFuZ2VQaXBlbGluZVN0YXRl
LgotICAgIC8vIFJlc2V0IHBpcGVsaW5lIGlmIHdlIGFyZSBzaXR0aW5nIG9uIFJFQURZIHN0YXRl
IHdoZW4gdGltZW91dCBpcyByZWFjaGVkCi0gICAgcGxheWVyLT5jaGFuZ2VQaXBlbGluZVN0YXRl
KEdTVF9TVEFURV9OVUxMKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KIHN0YXRpYyB2b2lkIG1l
ZGlhUGxheWVyUHJpdmF0ZVBsdWdpbkluc3RhbGxlclJlc3VsdEZ1bmN0aW9uKEdzdEluc3RhbGxQ
bHVnaW5zUmV0dXJuIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCiB7CiAgICAgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKQEAgLTI0OSwxMSArMjEzLDYgQEAgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQ
bGF5ZXIqIHBsYXllcikKICAgICAsIG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKGZhbHNlKQog
ICAgICwgbV9oYXNWaWRlbyhmYWxzZSkKICAgICAsIG1faGFzQXVkaW8oZmFsc2UpCi0gICAgLCBt
X2F1ZGlvVGltZXJIYW5kbGVyKDApCi0gICAgLCBtX3RleHRUaW1lckhhbmRsZXIoMCkKLSAgICAs
IG1fdmlkZW9UaW1lckhhbmRsZXIoMCkKLSAgICAsIG1fdmlkZW9DYXBzVGltZXJIYW5kbGVyKDAp
Ci0gICAgLCBtX3JlYWR5VGltZXJIYW5kbGVyKDApCiAgICAgLCBtX3RvdGFsQnl0ZXMoLTEpCiAg
ICAgLCBtX3ByZXNlcnZlc1BpdGNoKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0ZWRTdGF0ZShHU1Rf
U1RBVEVfVk9JRF9QRU5ESU5HKQpAQCAtMjg1LDggKzI0NCw3IEBAIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChtX2F1dG9BdWRpb1Npbmsu
Z2V0KCkpLAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oc2V0QXVkaW9T
dHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2spLCB0aGlzKTsKIAotICAgIGlmIChtX3JlYWR5VGltZXJI
YW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9yZWFkeVRpbWVySGFuZGxlcik7Cisg
ICAgbV9yZWFkeVRpbWVySGFuZGxlci5jYW5jZWwoKTsKIAogICAgIGlmIChtX3BsYXlCaW4pIHsK
ICAgICAgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0
X2J1cyhHU1RfUElQRUxJTkUobV9wbGF5QmluLmdldCgpKSkpOwpAQCAtMzA4LDE4ICsyNjYsNiBA
QCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIoKQogCiAgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1BhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgInNpbmsiKSk7
CiAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHZpZGVvU2lua1BhZC5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9T
aW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotCi0gICAgaWYgKG1fdmlkZW9UaW1lckhh
bmRsZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZpZGVvVGltZXJIYW5kbGVyKTsKLQot
ICAgIGlmIChtX2F1ZGlvVGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9h
dWRpb1RpbWVySGFuZGxlcik7Ci0KLSAgICBpZiAobV90ZXh0VGltZXJIYW5kbGVyKQotICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV90ZXh0VGltZXJIYW5kbGVyKTsKLQotICAgIGlmIChtX3ZpZGVv
Q2Fwc1RpbWVySGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdmlkZW9DYXBzVGlt
ZXJIYW5kbGVyKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQo
Y29uc3QgU3RyaW5nJiB1cmwpCkBAIC00NDMsMTIgKzM4OSwxMSBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkK
ICAgICAvLyBpZiB3ZSBzdGF5IGZvciB0b28gbG9uZyBvbiBSRUFEWS4KICAgICAvLyBBbHNvIGxl
dHMgcmVtb3ZlIHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkg
c3RhdGUgb3RoZXIgdGhhbiBSRUFEWS4KICAgICAvLyBTZWUgYWxzbyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzU0Ci0gICAgaWYgKG5ld1N0YXRlID09IEdTVF9T
VEFURV9SRUFEWSAmJiAhbV9yZWFkeVRpbWVySGFuZGxlcikgewotICAgICAgICBtX3JlYWR5VGlt
ZXJIYW5kbGVyID0gZ190aW1lb3V0X2FkZF9zZWNvbmRzKGdSZWFkeVN0YXRlVGltZXJJbnRlcnZh
bCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obWVkaWFQbGF5ZXJQcml2YXRlUmVhZHlT
dGF0ZVRpbWVvdXRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NvdXJjZV9zZXRfbmFtZV9i
eV9pZChtX3JlYWR5VGltZXJIYW5kbGVyLCAiW1dlYktpdF0gbWVkaWFQbGF5ZXJQcml2YXRlUmVh
ZHlTdGF0ZVRpbWVvdXRDYWxsYmFjayIpOwotICAgIH0gZWxzZSBpZiAobmV3U3RhdGUgIT0gR1NU
X1NUQVRFX1JFQURZICYmIG1fcmVhZHlUaW1lckhhbmRsZXIpIHsKLSAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKG1fcmVhZHlUaW1lckhhbmRsZXIpOwotICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVy
ID0gMDsKKyAgICBpZiAobmV3U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZICYmICFtX3JlYWR5VGlt
ZXJIYW5kbGVyLmlzU2NoZWR1bGVkKCkpIHsKKyAgICAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5z
Y2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIG1lZGlhUGxheWVyUHJpdmF0ZVJlYWR5U3RhdGVU
aW1lb3V0Q2FsbGJhY2siLCBbdGhpc10oKSB7IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRF
X05VTEwpOyB9LAorICAgICAgICAgICAgc3RkOjpjaHJvbm86OnNlY29uZHMoZ1JlYWR5U3RhdGVU
aW1lckludGVydmFsKSk7CisgICAgfSBlbHNlIGlmIChuZXdTdGF0ZSAhPSBHU1RfU1RBVEVfUkVB
RFkgJiYgbV9yZWFkeVRpbWVySGFuZGxlci5pc1NjaGVkdWxlZCgpKSB7CisgICAgICAgIG1fcmVh
ZHlUaW1lckhhbmRsZXIuY2FuY2VsKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC02
NjksMjQgKzYxNCwxNiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vla2lu
ZygpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5n
ZWQoKQogewotICAgIGlmIChtX3ZpZGVvVGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUobV92aWRlb1RpbWVySGFuZGxlcik7Ci0gICAgbV92aWRlb1RpbWVySGFuZGxlciA9IGdf
aWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlVGltZW91dENhbGxiYWNrKSwgdGhp
cywgMCk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQobV92aWRlb1RpbWVySGFuZGxlciwg
IltXZWJLaXRdIG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlVGltZW91dENhbGxiYWNrIik7
CisgICAgbV92aWRlb1RpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQiLCBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbywgdGhpcykpOwogfQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCgpCiB7Ci0gICAgaWYg
KG1fdmlkZW9DYXBzVGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92aWRl
b0NhcHNUaW1lckhhbmRsZXIpOwotICAgIG1fdmlkZW9DYXBzVGltZXJIYW5kbGVyID0gZ190aW1l
b3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZh
dGVWaWRlb0NhcHNDaGFuZ2VUaW1lb3V0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NvdXJjZV9z
ZXRfbmFtZV9ieV9pZChtX3ZpZGVvQ2Fwc1RpbWVySGFuZGxlciwgIltXZWJLaXRdIG1lZGlhUGxh
eWVyUHJpdmF0ZVZpZGVvQ2Fwc0NoYW5nZVRpbWVvdXRDYWxsYmFjayIpOworICAgIG1fdmlkZW9D
YXBzVGltZXJIYW5kbGVyLnNjaGVkdWxlKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnZpZGVvQ2Fwc0NoYW5nZWQiLCBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMsIHRoaXMpKTsKIH0KIAogdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogewotICAgIG1f
dmlkZW9UaW1lckhhbmRsZXIgPSAwOwotCiAgICAgZ2ludCBudW1UcmFja3MgPSAwOwogICAgIGlm
IChtX3BsYXlCaW4pCiAgICAgICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4uZ2V0KCksICJuLXZp
ZGVvIiwgJm51bVRyYWNrcywgTlVMTCk7CkBAIC03MjQsMjMgKzY2MSwxNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpCiB7Ci0g
ICAgbV92aWRlb0NhcHNUaW1lckhhbmRsZXIgPSAwOwogICAgIG1fdmlkZW9TaXplID0gSW50U2l6
ZSgpOwogICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckVuZ2lu
ZVVwZGF0ZWQobV9wbGF5ZXIpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6YXVkaW9DaGFuZ2VkKCkKIHsKLSAgICBpZiAobV9hdWRpb1RpbWVySGFuZGxlcikKLSAgICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKG1fYXVkaW9UaW1lckhhbmRsZXIpOwotICAgIG1fYXVkaW9UaW1l
ckhhbmRsZXIgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZVRpbWVvdXRD
YWxsYmFjayksIHRoaXMsIDApOwotICAgIGdfc291cmNlX3NldF9uYW1lX2J5X2lkKG1fYXVkaW9U
aW1lckhhbmRsZXIsICJbV2ViS2l0XSBtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZVRpbWVv
dXRDYWxsYmFjayIpOworICAgIG1fYXVkaW9UaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRd
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9DaGFuZ2VkIiwgc3RkOjpiaW5kKCZN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8sIHRoaXMpKTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVk
aW8oKQogewotICAgIG1fYXVkaW9UaW1lckhhbmRsZXIgPSAwOwotCiAgICAgZ2ludCBudW1UcmFj
a3MgPSAwOwogICAgIGlmIChtX3BsYXlCaW4pCiAgICAgICAgIGdfb2JqZWN0X2dldChtX3BsYXlC
aW4uZ2V0KCksICJuLWF1ZGlvIiwgJm51bVRyYWNrcywgTlVMTCk7CkBAIC03NzksMTYgKzcxMCwx
MSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRp
bygpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnRleHRDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV90ZXh0VGltZXJIYW5kbGVyKQotICAg
ICAgICBnX3NvdXJjZV9yZW1vdmUobV90ZXh0VGltZXJIYW5kbGVyKTsKLSAgICBtX3RleHRUaW1l
ckhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KG1lZGlhUGxheWVyUHJpdmF0ZVRleHRDaGFuZ2VUaW1lb3V0Q2FsbGJhY2spLCB0aGlzKTsKLSAg
ICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9pZChtX3RleHRUaW1lckhhbmRsZXIsICJbV2ViS2l0XSBt
ZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlVGltZW91dENhbGxiYWNrIik7CisgICAgbV90ZXh0
VGltZXJIYW5kbGVyLnNjaGVkdWxlKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnRleHRDaGFuZ2VkIiwgc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mVGV4dCwgdGhpcykpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKIHsKLSAgICBtX3RleHRUaW1lckhhbmRs
ZXIgPSAwOwotCiAgICAgZ2ludCBudW1UcmFja3MgPSAwOwogICAgIGlmIChtX3BsYXlCaW4pCiAg
ICAgICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4uZ2V0KCksICJuLXRleHQiLCAmbnVtVHJhY2tz
LCBOVUxMKTsKQEAgLTE2NDAsMTAgKzE1NjYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQog
ICAgIH0KIAogICAgIC8vIExvYWRpbmcgZmFpbGVkLCByZW1vdmUgcmVhZHkgdGltZXIuCi0gICAg
aWYgKG1fcmVhZHlUaW1lckhhbmRsZXIpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcmVh
ZHlUaW1lckhhbmRsZXIpOwotICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVyID0gMDsKLSAgICB9
CisgICAgbV9yZWFkeVRpbWVySGFuZGxlci5jYW5jZWwoKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8
U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaAppbmRleCBhMzcwZGEzLi5jM2NmZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2luc3RhbGwtcGx1Z2lucy5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29w
U291cmNlLmg+CiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogI2luY2x1ZGUgIk1lZGlhU291
cmNlR1N0cmVhbWVyLmgiCkBAIC0xODksMTEgKzE5MCwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQ7CiAgICAgYm9vbCBtX2hhc1ZpZGVvOwogICAgIGJv
b2wgbV9oYXNBdWRpbzsKLSAgICBndWludCBtX2F1ZGlvVGltZXJIYW5kbGVyOwotICAgIGd1aW50
IG1fdGV4dFRpbWVySGFuZGxlcjsKLSAgICBndWludCBtX3ZpZGVvVGltZXJIYW5kbGVyOwotICAg
IGd1aW50IG1fdmlkZW9DYXBzVGltZXJIYW5kbGVyOwotICAgIGd1aW50IG1fcmVhZHlUaW1lckhh
bmRsZXI7CisgICAgR01haW5Mb29wU291cmNlIG1fYXVkaW9UaW1lckhhbmRsZXI7CisgICAgR01h
aW5Mb29wU291cmNlIG1fdGV4dFRpbWVySGFuZGxlcjsKKyAgICBHTWFpbkxvb3BTb3VyY2UgbV92
aWRlb1RpbWVySGFuZGxlcjsKKyAgICBHTWFpbkxvb3BTb3VyY2UgbV92aWRlb0NhcHNUaW1lckhh
bmRsZXI7CisgICAgR01haW5Mb29wU291cmNlIG1fcmVhZHlUaW1lckhhbmRsZXI7CiAgICAgbXV0
YWJsZSBsb25nIG1fdG90YWxCeXRlczsKICAgICBVUkwgbV91cmw7CiAgICAgYm9vbCBtX3ByZXNl
cnZlc1BpdGNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UuY3BwCmluZGV4IDg1Y2MzMTUuLjE1YTU4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKQEAgLTcyLDI2ICs3Miwx
MiBAQCBzdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2so
R09iamVjdCosIEdQYXJhbVNwZWMqLCBNZWRpYQogICAgIHBsYXllci0+dm9sdW1lQ2hhbmdlZCgp
OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlVGlt
ZW91dENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLXsK
LSAgICAvLyBUaGlzIGlzIHRoZSBjYWxsYmFjayBvZiB0aGUgdGltZW91dCBzb3VyY2UgY3JlYXRl
ZCBpbiA6OnZvbHVtZUNoYW5nZWQuCi0gICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlZvbHVtZUNo
YW5nZSgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQ
cml2YXRlTXV0ZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKIHsKICAgICAvLyBUaGlzIGlzIGNhbGxl
ZCB3aGVuIG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5OjptdXRlIHNpZ25hbC4K
ICAgICBwbGF5ZXItPm11dGVDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBtZWRpYVBs
YXllclByaXZhdGVNdXRlQ2hhbmdlVGltZW91dENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UqIHBsYXllcikKLXsKLSAgICAvLyBUaGlzIGlzIHRoZSBjYWxsYmFjayBvZiB0
aGUgdGltZW91dCBzb3VyY2UgY3JlYXRlZCBpbiA6Om11dGVDaGFuZ2VkLgotICAgIHBsYXllci0+
bm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCiBzdGF0aWMgdm9p
ZCBtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0
QnVmZmVyICpidWZmZXIsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllclBy
aXZhdGUpCiB7CiAgICAgcGxheWVyUHJpdmF0ZS0+dHJpZ2dlclJlcGFpbnQoYnVmZmVyKTsKQEAg
LTEwMyw4ICs4OSw2IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQbGF5ZXIqIHBsCiAgICAgLCBtX3JlYWR5U3Rh
dGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQogICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQ
bGF5ZXI6OkVtcHR5KQogICAgICwgbV9idWZmZXIoMCkKLSAgICAsIG1fdm9sdW1lVGltZXJIYW5k
bGVyKDApCi0gICAgLCBtX211dGVUaW1lckhhbmRsZXIoMCkKICAgICAsIG1fcmVwYWludEhhbmRs
ZXIoMCkKICAgICAsIG1fdm9sdW1lU2lnbmFsSGFuZGxlcigwKQogICAgICwgbV9tdXRlU2lnbmFs
SGFuZGxlcigwKQpAQCAtMTM0LDEyICsxMTgsNiBAQCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgpCiAKICAgICBtX3BsYXll
ciA9IDA7CiAKLSAgICBpZiAobV9tdXRlVGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUobV9tdXRlVGltZXJIYW5kbGVyKTsKLQotICAgIGlmIChtX3ZvbHVtZVRpbWVySGFuZGxl
cikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdm9sdW1lVGltZXJIYW5kbGVyKTsKLQogICAg
IGlmIChtX3ZvbHVtZVNpZ25hbEhhbmRsZXIpIHsKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgbV92b2x1bWVTaWduYWxIYW5kbGVyKTsK
ICAgICAgICAgbV92b2x1bWVTaWduYWxIYW5kbGVyID0gMDsKQEAgLTIzMSw4ICsyMDksNiBAQCBm
bG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2b2x1bWUoKSBjb25zdAogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBsYXllck9mVm9sdW1l
Q2hhbmdlKCkKIHsKLSAgICBtX3ZvbHVtZVRpbWVySGFuZGxlciA9IDA7Ci0KICAgICBpZiAoIW1f
cGxheWVyIHx8ICFtX3ZvbHVtZUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBkb3VibGUg
dm9sdW1lOwpAQCAtMjQ2LDEwICsyMjIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6Om5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCkKIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjp2b2x1bWVDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV92b2x1
bWVUaW1lckhhbmRsZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZVRpbWVySGFu
ZGxlcik7Ci0gICAgbV92b2x1bWVUaW1lckhhbmRsZXIgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklP
UklUWV9ERUZBVUxULCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclBy
aXZhdGVWb2x1bWVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJj
ZV9zZXRfbmFtZV9ieV9pZChtX3ZvbHVtZVRpbWVySGFuZGxlciwgIltXZWJLaXRdIG1lZGlhUGxh
eWVyUHJpdmF0ZVZvbHVtZUNoYW5nZVRpbWVvdXRDYWxsYmFjayIpOworICAgIG1fdm9sdW1lVGlt
ZXJIYW5kbGVyLnNjaGVkdWxlKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjp2b2x1bWVDaGFuZ2VkIiwgc3RkOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSwgdGhpcykpOwogfQogCiBNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdv
cmtTdGF0ZSgpIGNvbnN0CkBAIC0yODcsOCArMjYwLDYgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjptdXRlZCgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKIHsKLSAgICBtX211dGVUaW1lckhh
bmRsZXIgPSAwOwotCiAgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWVFbGVtZW50KQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI5OSwxMyArMjcwLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZk11dGUoKQogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV9tdXRlVGlt
ZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9tdXRlVGltZXJIYW5kbGVyKTsK
LSAgICBtX211dGVUaW1lckhhbmRsZXIgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZB
VUxULCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZhdGVNdXRl
Q2hhbmdlVGltZW91dENhbGxiYWNrKSwgdGhpcywgMCk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVf
YnlfaWQobV9tdXRlVGltZXJIYW5kbGVyLCAiW1dlYktpdF0gbWVkaWFQbGF5ZXJQcml2YXRlTXV0
ZUNoYW5nZVRpbWVvdXRDYWxsYmFjayIpOworICAgIG1fbXV0ZVRpbWVySGFuZGxlci5zY2hlZHVs
ZSgiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZUNoYW5nZWQi
LCBzdGQ6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBsYXll
ck9mTXV0ZSwgdGhpcykpOwogfQogCi0KICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnVwZGF0ZVRleHR1cmUoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5oCmluZGV4IDdjMzhiZDguLjEzY2E2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgPGdsaWIuaD4KIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIuaCIKQEAgLTExOSw4ICsxMjAsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
SW50U2l6ZSBtX3NpemU7CiAgICAgR011dGV4KiBtX2J1ZmZlck11dGV4OwogICAgIEdzdEJ1ZmZl
ciogbV9idWZmZXI7Ci0gICAgdW5zaWduZWQgbG9uZyBtX3ZvbHVtZVRpbWVySGFuZGxlcjsKLSAg
ICB1bnNpZ25lZCBsb25nIG1fbXV0ZVRpbWVySGFuZGxlcjsKKyAgICBHTWFpbkxvb3BTb3VyY2Ug
bV92b2x1bWVUaW1lckhhbmRsZXI7CisgICAgR01haW5Mb29wU291cmNlIG1fbXV0ZVRpbWVySGFu
ZGxlcjsKICAgICB1bnNpZ25lZCBsb25nIG1fcmVwYWludEhhbmRsZXI7CiAgICAgdW5zaWduZWQg
bG9uZyBtX3ZvbHVtZVNpZ25hbEhhbmRsZXI7CiAgICAgdW5zaWduZWQgbG9uZyBtX211dGVTaWdu
YWxIYW5kbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3Bw
CmluZGV4IDE2YmQ0OTQuLmVhYmQ4NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lci5jcHAKQEAgLTUxLDI0ICs1MSwxMCBAQCBzdGF0aWMgdm9pZCB0cmFja1By
aXZhdGVUYWdzQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgVHJhY2tQcml2
YXRlQgogICAgIHRyYWNrLT50YWdzQ2hhbmdlZCgpOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gdHJh
Y2tQcml2YXRlQWN0aXZlQ2hhbmdlVGltZW91dENhbGxiYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3Ry
ZWFtZXIqIHRyYWNrKQotewotICAgIHRyYWNrLT5ub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgp
OwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRyYWNrUHJpdmF0ZVRh
Z3NDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lciogdHJhY2sp
Ci17Ci0gICAgdHJhY2stPm5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCgpOwotICAgIHJldHVybiBG
QUxTRTsKLX0KLQogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQ
YWQ+IHBhZCkKICAgICA6IG1faW5kZXgoaW5kZXgpCiAgICAgLCBtX3BhZChwYWQpCiAgICAgLCBt
X293bmVyKG93bmVyKQotICAgICwgbV9hY3RpdmVUaW1lckhhbmRsZXIoMCkKLSAgICAsIG1fdGFn
VGltZXJIYW5kbGVyKDApCiB7CiAgICAgQVNTRVJUKG1fcGFkKTsKIApAQCAtOTUsMTMgKzgxLDgg
QEAgdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9wYWQuZ2V0KCksCiAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHRyYWNrUHJpdmF0ZVRhZ3NDaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKIAotICAgIGlmIChtX2FjdGl2ZVRpbWVySGFuZGxlcikKLSAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKG1fYWN0aXZlVGltZXJIYW5kbGVyKTsKLSAgICBtX2FjdGl2ZVRpbWVySGFuZGxl
ciA9IDA7Ci0KLSAgICBpZiAobV90YWdUaW1lckhhbmRsZXIpCi0gICAgICAgIGdfc291cmNlX3Jl
bW92ZShtX3RhZ1RpbWVySGFuZGxlcik7Ci0gICAgbV90YWdUaW1lckhhbmRsZXIgPSAwOworICAg
IG1fYWN0aXZlVGltZXJIYW5kbGVyLmNhbmNlbCgpOworICAgIG1fdGFnVGltZXJIYW5kbGVyLmNh
bmNlbCgpOwogCiAgICAgbV9wYWQuY2xlYXIoKTsKICAgICBtX3RhZ3MuY2xlYXIoKTsKQEAgLTEw
OSwxNyArOTAsMTIgQEAgdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpkaXNjb25uZWN0
KCkKIAogdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjphY3RpdmVDaGFuZ2VkKCkKIHsK
LSAgICBpZiAobV9hY3RpdmVUaW1lckhhbmRsZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZSht
X2FjdGl2ZVRpbWVySGFuZGxlcik7Ci0gICAgbV9hY3RpdmVUaW1lckhhbmRsZXIgPSBnX3RpbWVv
dXRfYWRkKDAsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHRyYWNrUHJp
dmF0ZUFjdGl2ZUNoYW5nZVRpbWVvdXRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc291cmNlX3Nl
dF9uYW1lX2J5X2lkKG1fYWN0aXZlVGltZXJIYW5kbGVyLCAiW1dlYktpdF0gdHJhY2tQcml2YXRl
QWN0aXZlQ2hhbmdlVGltZW91dENhbGxiYWNrIik7CisgICAgbV9hY3RpdmVUaW1lckhhbmRsZXIu
c2NoZWR1bGUoIltXZWJLaXRdIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNr
T2ZBY3RpdmVDaGFuZ2VkIiwgc3RkOjpiaW5kKCZUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpu
b3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCwgdGhpcykpOwogfQogCiB2b2lkIFRyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXI6OnRhZ3NDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV90YWdUaW1lckhhbmRs
ZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3RhZ1RpbWVySGFuZGxlcik7CisgICAgbV90
YWdUaW1lckhhbmRsZXIuY2FuY2VsKCk7CiAKICAgICBHUmVmUHRyPEdzdFRhZ0xpc3Q+IHRhZ3M7
CiAgICAgZ19vYmplY3RfZ2V0KG1fcGFkLmdldCgpLCAidGFncyIsICZ0YWdzLm91dFB0cigpLCBO
VUxMKTsKQEAgLTEyOCwxNCArMTA0LDExIEBAIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cjo6dGFnc0NoYW5nZWQoKQogICAgICAgICBtX3RhZ3Muc3dhcCh0YWdzKTsKICAgICB9CiAKLSAg
ICBtX3RhZ1RpbWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwKLSAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxHU291cmNlRnVuYz4odHJhY2tQcml2YXRlVGFnc0NoYW5nZVRpbWVvdXRDYWxsYmFj
ayksIHRoaXMpOwotICAgIGdfc291cmNlX3NldF9uYW1lX2J5X2lkKG1fdGFnVGltZXJIYW5kbGVy
LCAiW1dlYktpdF0gdHJhY2tQcml2YXRlVGFnc0NoYW5nZVRpbWVvdXRDYWxsYmFjayIpOworICAg
IG1fdGFnVGltZXJIYW5kbGVyLnNjaGVkdWxlKCJbV2ViS2l0XSBUcmFja1ByaXZhdGVCYXNlR1N0
cmVhbWVyOjpub3RpZnlUcmFja09mVGFnc0NoYW5nZWQiLCBzdGQ6OmJpbmQoJlRyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCwgdGhpcykpOwogfQogCiB2
b2lkIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2Vk
KCkKIHsKLSAgICBtX2FjdGl2ZVRpbWVySGFuZGxlciA9IDA7CiAgICAgaWYgKCFtX3BhZCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xNTksNyArMTMyLDYgQEAgYm9vbCBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpnZXRUYWcoR3N0VGFnTGlzdCogdGFncywgY29uc3QgZ2NoYXIqIHRhZ05hbWUs
IFMKIAogdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mVGFnc0No
YW5nZWQoKQogewotICAgIG1fdGFnVGltZXJIYW5kbGVyID0gMDsKICAgICBpZiAoIW1fcGFkKQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
ci5oCmluZGV4IDFlM2I4YzguLjMwM2VkMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXIuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiR1JlZlB0ckdT
dHJlYW1lci5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDggKzY3LDggQEAgcHJpdmF0
ZToKICAgICBib29sIGdldFRhZyhHc3RUYWdMaXN0KiB0YWdzLCBjb25zdCBnY2hhciogdGFnTmFt
ZSwgU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBUcmFja1ByaXZhdGVCYXNlKiBtX293bmVyOwotICAg
IGd1aW50IG1fYWN0aXZlVGltZXJIYW5kbGVyOwotICAgIGd1aW50IG1fdGFnVGltZXJIYW5kbGVy
OworICAgIEdNYWluTG9vcFNvdXJjZSBtX2FjdGl2ZVRpbWVySGFuZGxlcjsKKyAgICBHTWFpbkxv
b3BTb3VyY2UgbV90YWdUaW1lckhhbmRsZXI7CiAKICAgICBNdXRleCBtX3RhZ011dGV4OwogICAg
IEdSZWZQdHI8R3N0VGFnTGlzdD4gbV90YWdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcAppbmRleCAxN2QwYWVmLi5kODEwNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRl
IDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dNdXRleExvY2tlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTc0LDcg
Kzc1LDcgQEAgc3RhdGljIGd1aW50IHdlYmtpdFZpZGVvU2lua1NpZ25hbHNbTEFTVF9TSUdOQUxd
ID0geyAwLCB9OwogCiBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZhdGUgewogICAgIEdzdEJ1
ZmZlciogYnVmZmVyOwotICAgIGd1aW50IHRpbWVvdXRJZDsKKyAgICBHTWFpbkxvb3BTb3VyY2Ug
dGltZW91dFNvdXJjZTsKICAgICBHTXV0ZXgqIGJ1ZmZlck11dGV4OwogICAgIEdDb25kKiBkYXRh
Q29uZGl0aW9uOwogCkBAIC0xMTMsMjYgKzExNCwyMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfdmlk
ZW9fc2lua19pbml0KFdlYktpdFZpZGVvU2luayogc2luaykKICAgICBnc3RfdmlkZW9faW5mb19p
bml0KCZzaW5rLT5wcml2LT5pbmZvKTsKIH0KIAotc3RhdGljIGdib29sZWFuIHdlYmtpdFZpZGVv
U2lua1RpbWVvdXRDYWxsYmFjayhncG9pbnRlciBkYXRhKQorc3RhdGljIHZvaWQgd2Via2l0Vmlk
ZW9TaW5rVGltZW91dENhbGxiYWNrKFdlYktpdFZpZGVvU2luayogc2luaykKIHsKLSAgICBXZWJL
aXRWaWRlb1NpbmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdlYktpdFZpZGVvU2luayo+KGRh
dGEpOwogICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OwogCiAg
ICAgR011dGV4TG9ja2VyIGxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwogICAgIEdzdEJ1ZmZlciog
YnVmZmVyID0gcHJpdi0+YnVmZmVyOwogICAgIHByaXYtPmJ1ZmZlciA9IDA7Ci0gICAgcHJpdi0+
dGltZW91dElkID0gMDsKIAogICAgIGlmICghYnVmZmVyIHx8IHByaXYtPnVubG9ja2VkIHx8IFVO
TElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7CiAgICAgICAgIGdfY29uZF9zaWduYWwo
cHJpdi0+ZGF0YUNvbmRpdGlvbik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGdfc2lnbmFsX2VtaXQoc2luaywgd2Via2l0VmlkZW9TaW5rU2ln
bmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0sIDAsIGJ1ZmZlcik7CiAgICAgZ3N0X2J1ZmZlcl91bnJl
ZihidWZmZXIpOwogICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YUNvbmRpdGlvbik7Ci0KLSAg
ICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdFZpZGVvU2lu
a1JlbmRlcihHc3RCYXNlU2luayogYmFzZVNpbmssIEdzdEJ1ZmZlciogYnVmZmVyKQpAQCAtMjE2
LDkgKzIxMyw5IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdFZpZGVvU2lua1JlbmRlcihH
c3RCYXNlU2luayogYmFzZVNpbmssIEdzdEJ1ZmZlciogYnVmCiAgICAgLy8gVGhpcyBzaG91bGQg
bGlrZWx5IHVzZSBhIGxvd2VyIHByaW9yaXR5LCBidXQgZ2xpYiBjdXJyZW50bHkgc3RhcnZlcwog
ICAgIC8vIGxvd2VyIHByaW9yaXR5IHNvdXJjZXMuCiAgICAgLy8gU2VlOiBodHRwczovL2J1Z3pp
bGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwODMwLgotICAgIHByaXYtPnRpbWVvdXRJ
ZCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIHdlYmtpdFZpZGVv
U2lua1RpbWVvdXRDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdzdF9vYmplY3RfcmVmKHNpbmspLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQocHJp
di0+dGltZW91dElkLCAiW1dlYktpdF0gd2Via2l0VmlkZW9TaW5rVGltZW91dENhbGxiYWNrIik7
CisgICAgZ3N0X29iamVjdF9yZWYoc2luayk7CisgICAgcHJpdi0+dGltZW91dFNvdXJjZS5zY2hl
ZHVsZSgiW1dlYktpdF0gd2Via2l0VmlkZW9TaW5rVGltZW91dENhbGxiYWNrIiwgc3RkOjpiaW5k
KHdlYmtpdFZpZGVvU2lua1RpbWVvdXRDYWxsYmFjaywgc2luayksIEdfUFJJT1JJVFlfREVGQVVM
VCwKKyAgICAgICAgW3NpbmtdKCkgeyBnc3Rfb2JqZWN0X3VucmVmKHNpbmspOyB9KTsKIAogICAg
IGdfY29uZF93YWl0KHByaXYtPmRhdGFDb25kaXRpb24sIHByaXYtPmJ1ZmZlck11dGV4KTsKICAg
ICByZXR1cm4gR1NUX0ZMT1dfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmNwcAppbmRleCA4M2IxMzdmLi42NGZhNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRl
IDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
TWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00MywxMSArNDQsMTEgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX1NvdXJjZSB7CiAgICAgZ3VpbnQ2NCBzaXplOwogICAgIGdib29sZWFuIHBhdXNl
ZDsKIAotICAgIGd1aW50IHN0YXJ0SWQ7Ci0gICAgZ3VpbnQgc3RvcElkOwotICAgIGd1aW50IG5l
ZWREYXRhSWQ7Ci0gICAgZ3VpbnQgZW5vdWdoRGF0YUlkOwotICAgIGd1aW50IHNlZWtJZDsKKyAg
ICBHTWFpbkxvb3BTb3VyY2Ugc3RhcnQ7CisgICAgR01haW5Mb29wU291cmNlIHN0b3A7CisgICAg
R01haW5Mb29wU291cmNlIG5lZWREYXRhOworICAgIEdNYWluTG9vcFNvdXJjZSBlbm91Z2hEYXRh
OworICAgIEdNYWluTG9vcFNvdXJjZSBzZWVrOwogCiAgICAgZ3VpbnQ2NCByZXF1ZXN0ZWRPZmZz
ZXQ7CiB9IFNvdXJjZTsKQEAgLTE3Miw2ICsxNzMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfc3JjX2luaXQoV2ViS2l0TWVkaWFTcmMqIHNyYykKIHsKICAgICBXZWJLaXRNZWRpYVNyY1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfU1JDX0dFVF9QUklWQVRFKHNyYyk7CiAgICAgc3Jj
LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOwog
CiAgICAgcHJpdi0+c291cmNlVmlkZW8uYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJhcHBzcmMiLCAidmlkZW9hcHBzcmMiKTsKICAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tz
KEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZVZpZGVvLmFwcHNyYyksICZhcHBzcmNDYWxsYmFja3NW
aWRlbywgc3JjLCAwKTsKQEAgLTE4OCw2ICsxOTAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRp
YVNyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUq
IHByaXYgPSBzcmMtPnByaXY7CiAKICAgICBnX2ZyZWUocHJpdi0+dXJpKTsKKyAgICBwcml2LT5+
V2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1Rf
Q0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CkBAIC0yMjMsMzUgKzIyNiwyMyBAQCBzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcElkLCBHVmFsdWUqIHZhbAogfQogCiAvLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVh
ZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVZp
ZGVvU3JjU3RvcChXZWJLaXRNZWRpYVNyYyogc3JjKQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFW
aWRlb1NyY1N0b3AoV2ViS2l0TWVkaWFTcmMqIHNyYykKIHsKICAgICBXZWJLaXRNZWRpYVNyY1By
aXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAgICAgZ2Jvb2xlYW4gc2Vla2luZzsKIAogICAgIEdT
VF9PQkpFQ1RfTE9DSyhzcmMpOwogCi0gICAgc2Vla2luZyA9IHByaXYtPnNvdXJjZVZpZGVvLnNl
ZWtJZDsKKyAgICBzZWVraW5nID0gcHJpdi0+c291cmNlVmlkZW8uc2Vlay5pc1NjaGVkdWxlZCgp
OwogCi0gICAgaWYgKHByaXYtPnNvdXJjZVZpZGVvLnN0YXJ0SWQpIHsKLSAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKHByaXYtPnNvdXJjZVZpZGVvLnN0YXJ0SWQpOwotICAgICAgICBwcml2LT5zb3Vy
Y2VWaWRlby5zdGFydElkID0gMDsKLSAgICB9CisgICAgcHJpdi0+c291cmNlVmlkZW8uc3RhcnQu
Y2FuY2VsKCk7CiAKICAgICBwcml2LT5wbGF5ZXIgPSAwOwogICAgIHByaXYtPnBsYXliaW4gPSAw
OwogCi0gICAgaWYgKHByaXYtPnNvdXJjZVZpZGVvLm5lZWREYXRhSWQpCi0gICAgICAgIGdfc291
cmNlX3JlbW92ZShwcml2LT5zb3VyY2VWaWRlby5uZWVkRGF0YUlkKTsKLSAgICBwcml2LT5zb3Vy
Y2VWaWRlby5uZWVkRGF0YUlkID0gMDsKLQotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5lbm91
Z2hEYXRhSWQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zb3VyY2VWaWRlby5lbm91
Z2hEYXRhSWQpOwotICAgIHByaXYtPnNvdXJjZVZpZGVvLmVub3VnaERhdGFJZCA9IDA7Ci0KLSAg
ICBpZiAocHJpdi0+c291cmNlVmlkZW8uc2Vla0lkKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUo
cHJpdi0+c291cmNlVmlkZW8uc2Vla0lkKTsKLQotICAgIHByaXYtPnNvdXJjZVZpZGVvLnNlZWtJ
ZCA9IDA7CisgICAgcHJpdi0+c291cmNlVmlkZW8ubmVlZERhdGEuY2FuY2VsKCk7CisgICAgcHJp
di0+c291cmNlVmlkZW8uZW5vdWdoRGF0YS5jYW5jZWwoKTsKKyAgICBwcml2LT5zb3VyY2VWaWRl
by5zZWVrLmNhbmNlbCgpOwogCiAgICAgcHJpdi0+c291cmNlVmlkZW8ucGF1c2VkID0gRkFMU0U7
CiAgICAgcHJpdi0+c291cmNlVmlkZW8ub2Zmc2V0ID0gMDsKQEAgLTI2MCw3ICsyNTEsNyBAQCBz
dGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFWaWRlb1NyY1N0b3AoV2ViS2l0TWVkaWFTcmMqIHNy
YykKICAgICBwcml2LT5kdXJhdGlvbiA9IDA7CiAgICAgcHJpdi0+bmJTb3VyY2UgPSAwOwogCi0g
ICAgcHJpdi0+c291cmNlVmlkZW8uc3RvcElkID0gMDsKKyAgICBwcml2LT5zb3VyY2VWaWRlby5z
dG9wLmNhbmNlbCgpOwogCiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIApAQCAtMjcxLDQw
ICsyNjIsMjYgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhVmlkZW9TcmNTdG9wKFdlYktp
dE1lZGlhU3JjKiBzcmMpCiAgICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdG9w
cGVkIHJlcXVlc3QiKTsKLQotICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIGdib29sZWFu
IHdlYktpdE1lZGlhQXVkaW9TcmNTdG9wKFdlYktpdE1lZGlhU3JjKiBzcmMpCitzdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RvcChXZWJLaXRNZWRpYVNyYyogc3JjKQogewogICAgIFdl
YktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKICAgICBnYm9vbGVhbiBzZWVr
aW5nOwogCiAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAKLSAgICBzZWVraW5nID0gcHJpdi0+
c291cmNlQXVkaW8uc2Vla0lkOworICAgIHNlZWtpbmcgPSBwcml2LT5zb3VyY2VBdWRpby5zZWVr
LmlzU2NoZWR1bGVkKCk7CiAKLSAgICBpZiAocHJpdi0+c291cmNlQXVkaW8uc3RhcnRJZCkgewot
ICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c291cmNlQXVkaW8uc3RhcnRJZCk7Ci0gICAg
ICAgIHByaXYtPnNvdXJjZUF1ZGlvLnN0YXJ0SWQgPSAwOwotICAgIH0KKyAgICBwcml2LT5zb3Vy
Y2VBdWRpby5zdGFydC5jYW5jZWwoKTsKIAogICAgIHByaXYtPnBsYXllciA9IDA7CiAKICAgICBw
cml2LT5wbGF5YmluID0gMDsKIAotICAgIGlmIChwcml2LT5zb3VyY2VBdWRpby5uZWVkRGF0YUlk
KQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c291cmNlQXVkaW8ubmVlZERhdGFJZCk7
Ci0gICAgcHJpdi0+c291cmNlQXVkaW8ubmVlZERhdGFJZCA9IDA7Ci0KLSAgICBpZiAocHJpdi0+
c291cmNlQXVkaW8uZW5vdWdoRGF0YUlkKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+
c291cmNlQXVkaW8uZW5vdWdoRGF0YUlkKTsKLSAgICBwcml2LT5zb3VyY2VBdWRpby5lbm91Z2hE
YXRhSWQgPSAwOwotCi0gICAgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLnNlZWtJZCkKLSAgICAgICAg
Z19zb3VyY2VfcmVtb3ZlKHByaXYtPnNvdXJjZUF1ZGlvLnNlZWtJZCk7Ci0KLSAgICBwcml2LT5z
b3VyY2VBdWRpby5zZWVrSWQgPSAwOworICAgIHByaXYtPnNvdXJjZUF1ZGlvLm5lZWREYXRhLmNh
bmNlbCgpOworICAgIHByaXYtPnNvdXJjZUF1ZGlvLmVub3VnaERhdGEuY2FuY2VsKCk7CisgICAg
cHJpdi0+c291cmNlQXVkaW8uc2Vlay5jYW5jZWwoKTsKIAogICAgIHByaXYtPnNvdXJjZUF1ZGlv
LnBhdXNlZCA9IEZBTFNFOwogCkBAIC0zMTUsNyArMjkyLDcgQEAgc3RhdGljIGdib29sZWFuIHdl
YktpdE1lZGlhQXVkaW9TcmNTdG9wKFdlYktpdE1lZGlhU3JjKiBzcmMpCiAgICAgcHJpdi0+ZHVy
YXRpb24gPSAwOwogICAgIHByaXYtPm5iU291cmNlID0gMDsKIAotICAgIHByaXYtPnNvdXJjZUF1
ZGlvLnN0b3BJZCA9IDA7CisgICAgcHJpdi0+c291cmNlQXVkaW8uc3RvcC5jYW5jZWwoKTsKIAog
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAKQEAgLTMyNiwxMiArMzAzLDEwIEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RvcChXZWJLaXRNZWRpYVNyYyogc3JjKQog
ICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RvcHBlZCByZXF1ZXN0Iik7Ci0K
LSAgICByZXR1cm4gRkFMU0U7CiB9CiAKIC8vIG11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFk
IGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZAotc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhVmlk
ZW9TcmNTdGFydChXZWJLaXRNZWRpYVNyYyogc3JjKQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFW
aWRlb1NyY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCkBAIC0zNDAsMTcgKzMxNSwxNSBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0TWVkaWFWaWRlb1NyY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzcmMpCiAg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiTm8gVVJJIHByb3ZpZGVkIik7CiAgICAgICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHdlYktpdE1lZGlhVmlkZW9TcmNTdG9w
KHNyYyk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJT
dGFydGVkIHJlcXVlc3QiKTsKLQotICAgIHJldHVybiBGQUxTRTsKIH0KIAogLy8gbXVzdCBiZSBj
YWxsZWQgb24gbWFpbiB0aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9ja2VkCi1zdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0TWVkaWFBdWRpb1NyY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzcmMpCitzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RhcnQoV2ViS2l0TWVkaWFTcmMqIHNyYykKIHsK
ICAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKQEAgLTM1OSwx
MyArMzMyLDExIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RhcnQoV2Vi
S2l0TWVkaWFTcmMqIHNyYykKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkg
cHJvdmlkZWQiKTsKICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgd2Vi
S2l0TWVkaWFBdWRpb1NyY1N0b3Aoc3JjKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIpOwotCi0gICAgcmV0dXJuIEZBTFNF
OwogfQogCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VT
dGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQpAQCAt
Mzk3LDE5ICszNjgsMjkgQEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlh
U3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3QKICAgICBjYXNlIEdTVF9T
VEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlJFQURZLT5QQVVTRUQiKTsKICAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAg
ICAgIHByaXYtPnNvdXJjZVZpZGVvLnN0YXJ0SWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklP
UklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdE1lZGlhVmlkZW9TcmNTdGFydCwg
Z3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsK
LSAgICAgICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQocHJpdi0+c291cmNlVmlkZW8uc3RhcnRJ
ZCwgIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNTdGFydCIpOwotICAgICAgICBwcml2LT5z
b3VyY2VBdWRpby5zdGFydElkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVM
VCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RhcnQsIGdzdF9vYmplY3Rf
cmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0gICAgICAgIGdf
c291cmNlX3NldF9uYW1lX2J5X2lkKHByaXYtPnNvdXJjZUF1ZGlvLnN0YXJ0SWQsICJbV2ViS2l0
XSB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RhcnQiKTsKKworICAgICAgICBnc3Rfb2JqZWN0X3JlZihz
cmMpOworICAgICAgICBwcml2LT5zb3VyY2VWaWRlby5zdGFydC5zY2hlZHVsZSgiW1dlYktpdF0g
d2ViS2l0TWVkaWFWaWRlb1NyY1N0YXJ0Iiwgc3RkOjpiaW5kKHdlYktpdE1lZGlhVmlkZW9TcmNT
dGFydCwgc3JjKSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAgW3NyY10oKSB7IGdz
dF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7CisKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoc3JjKTsK
KyAgICAgICAgcHJpdi0+c291cmNlQXVkaW8uc3RhcnQuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktp
dE1lZGlhQXVkaW9TcmNTdGFydCIsIHN0ZDo6YmluZCh3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RhcnQs
IHNyYyksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFtzcmNdKCkgeyBnc3Rfb2Jq
ZWN0X3VucmVmKHNyYyk7IH0pOworCiAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6
CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUEFVU0VELT5SRUFEWSIpOwogICAgICAg
ICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICAgICAgcHJpdi0+c291cmNlVmlkZW8uc3RvcElk
ID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5j
KSB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcCwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95
Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlf
aWQocHJpdi0+c291cmNlVmlkZW8uc3RvcElkLCAiW1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1Ny
Y1N0b3AiKTsKLSAgICAgICAgcHJpdi0+c291cmNlQXVkaW8uc3RvcElkID0gZ190aW1lb3V0X2Fk
ZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRNZWRpYUF1
ZGlvU3JjU3RvcCwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2Jq
ZWN0X3VucmVmKTsKLSAgICAgICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQocHJpdi0+c291cmNl
QXVkaW8uc3RvcElkLCAiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY1N0b3AiKTsKKworICAg
ICAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOworICAgICAgICBwcml2LT5zb3VyY2VWaWRlby5zdG9w
LnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcCIsIHN0ZDo6YmluZCh3
ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcCwgc3JjKSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAg
ICAgICAgW3NyY10oKSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7CisKKyAgICAgICAgZ3N0
X29iamVjdF9yZWYoc3JjKTsKKyAgICAgICAgcHJpdi0+c291cmNlQXVkaW8uc3RvcC5zY2hlZHVs
ZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY1N0b3AiLCBzdGQ6OmJpbmQod2ViS2l0TWVk
aWFBdWRpb1NyY1N0b3AsIHNyYyksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFtz
cmNdKCkgeyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOworCiAgICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC01MTUsNDAgKzQ5
NiwyMiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVy
IGdJZmFjZSwgZ3BvaW50ZXIpCiB9CiAKIC8vIGFwcHNyYyBjYWxsYmFja3MKLXN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRNZWRpYVZpZGVvU3JjTmVlZERhdGFNYWluQ2IoV2ViS2l0TWVkaWFTcmMqIHNy
YykKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9TcmNOZWVkRGF0YU1haW5DYihXZWJLaXRN
ZWRpYVNyYyogc3JjKQogewogICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKIAogICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIC8vIGFscmVhZHkgc3RvcHBl
ZAotICAgIGlmICghcHJpdi0+c291cmNlVmlkZW8ubmVlZERhdGFJZCkgewotICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCiAgICAg
cHJpdi0+c291cmNlVmlkZW8ucGF1c2VkID0gRkFMU0U7Ci0gICAgcHJpdi0+c291cmNlVmlkZW8u
bmVlZERhdGFJZCA9IDA7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLQotICAgIHJldHVy
biBGQUxTRTsKIH0KIAotc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0
YU1haW5DYihXZWJLaXRNZWRpYVNyYyogc3JjKQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRp
b1NyY05lZWREYXRhTWFpbkNiKFdlYktpdE1lZGlhU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0TWVk
aWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX09CSkVDVF9MT0NLKHNy
Yyk7Ci0gICAgLy8gYWxyZWFkeSBzdG9wcGVkCi0gICAgaWYgKCFwcml2LT5zb3VyY2VBdWRpby5u
ZWVkRGF0YUlkKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJl
dHVybiBGQUxTRTsKLSAgICB9Ci0KICAgICBwcml2LT5zb3VyY2VBdWRpby5wYXVzZWQgPSBGQUxT
RTsKLSAgICBwcml2LT5zb3VyY2VBdWRpby5uZWVkRGF0YUlkID0gMDsKICAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzcmMpOwotCi0gICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJL
aXRNZWRpYVZpZGVvU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdwb2lu
dGVyIHVzZXJEYXRhKQpAQCAtNTU5LDEzICs1MjIsMTQgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVk
aWFWaWRlb1NyY05lZWREYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1
c2UKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIk5lZWQgbW9yZSBkYXRhOiAldSIsIGxlbmd0
aCk7CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBpZiAocHJpdi0+c291cmNlVmlk
ZW8ubmVlZERhdGFJZCB8fCAhcHJpdi0+c291cmNlVmlkZW8ucGF1c2VkKSB7CisgICAgaWYgKHBy
aXYtPnNvdXJjZVZpZGVvLm5lZWREYXRhLmlzU2NoZWR1bGVkKCkgfHwgIXByaXYtPnNvdXJjZVZp
ZGVvLnBhdXNlZCkgewogICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgcHJpdi0+c291cmNlVmlkZW8ubmVlZERhdGFJZCA9IGdfdGlt
ZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0
TWVkaWFWaWRlb1NyY05lZWREYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ry
b3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwotICAgIGdfc291cmNlX3NldF9uYW1lX2J5X2lk
KHByaXYtPnNvdXJjZVZpZGVvLm5lZWREYXRhSWQsICJbV2ViS2l0XSB3ZWJLaXRNZWRpYVZpZGVv
U3JjTmVlZERhdGFNYWluQ2IiKTsKKyAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOworICAgIHByaXYt
PnNvdXJjZVZpZGVvLm5lZWREYXRhLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYVZpZGVv
U3JjTmVlZERhdGFNYWluQ2IiLCBzdGQ6OmJpbmQod2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRh
TWFpbkNiLCBzcmMpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgIFtzcmNdKCkgeyBnc3Rf
b2JqZWN0X3VucmVmKHNyYyk7IH0pOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiB9CiAK
QEAgLTU3Nyw1MCArNTQxLDMzIEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNOZWVk
RGF0YUNiKEdzdEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlCiAgICAgR1NUX0RF
QlVHX09CSkVDVChzcmMsICJOZWVkIG1vcmUgZGF0YTogJXUiLCBsZW5ndGgpOwogCiAgICAgR1NU
X09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLm5lZWREYXRhSWQg
fHwgIXByaXYtPnNvdXJjZUF1ZGlvLnBhdXNlZCkgeworICAgIGlmIChwcml2LT5zb3VyY2VBdWRp
by5uZWVkRGF0YS5pc1NjaGVkdWxlZCgpIHx8ICFwcml2LT5zb3VyY2VBdWRpby5wYXVzZWQpIHsK
ICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHByaXYtPnNvdXJjZUF1ZGlvLm5lZWREYXRhSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwo
R19QUklPUklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdE1lZGlhQXVkaW9TcmNO
ZWVkRGF0YU1haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rf
b2JqZWN0X3VucmVmKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9pZChwcml2LT5zb3VyY2VB
dWRpby5uZWVkRGF0YUlkLCAiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhTWFp
bkNiIik7CisgICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKKyAgICBwcml2LT5zb3VyY2VBdWRpby5u
ZWVkRGF0YS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhTWFp
bkNiIiwgc3RkOjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YU1haW5DYiwgc3JjKSwg
R19QUklPUklUWV9ERUZBVUxULAorICAgICAgICBbc3JjXSgpIHsgZ3N0X29iamVjdF91bnJlZihz
cmMpOyB9KTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogfQogCi1zdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFNYWluQ2IoV2ViS2l0TWVkaWFTcmMqIHNy
YykKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktp
dE1lZGlhU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OwogCiAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgLy8gYWxyZWFkeSBzdG9w
cGVkCi0gICAgaWYgKCFwcml2LT5zb3VyY2VWaWRlby5lbm91Z2hEYXRhSWQpIHsKLSAgICAgICAg
R1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQog
ICAgIHByaXYtPnNvdXJjZVZpZGVvLnBhdXNlZCA9IFRSVUU7Ci0gICAgcHJpdi0+c291cmNlVmlk
ZW8uZW5vdWdoRGF0YUlkID0gMDsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotCi0gICAg
cmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFBdWRpb1NyY0Vu
b3VnaERhdGFNYWluQ2IoV2ViS2l0TWVkaWFTcmMqIHNyYykKK3N0YXRpYyB2b2lkIHdlYktpdE1l
ZGlhQXVkaW9TcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdE1lZGlhU3JjKiBzcmMpCiB7CiAgICAg
V2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX09CSkVD
VF9MT0NLKHNyYyk7Ci0gICAgLy8gYWxyZWFkeSBzdG9wcGVkCi0gICAgaWYgKCFwcml2LT5zb3Vy
Y2VBdWRpby5lbm91Z2hEYXRhSWQpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQogICAgIHByaXYtPnNvdXJjZUF1ZGlvLnBh
dXNlZCA9IFRSVUU7Ci0gICAgcHJpdi0+c291cmNlQXVkaW8uZW5vdWdoRGF0YUlkID0gMDsKICAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotCi0gICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2lu
dGVyIHVzZXJEYXRhKQpAQCAtNjMxLDEzICs1NzgsMTUgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVk
aWFWaWRlb1NyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkKICAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhhdmUgZW5vdWdoIGRhdGEiKTsKIAogICAgIEdTVF9P
QkpFQ1RfTE9DSyhzcmMpOwotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5lbm91Z2hEYXRhSWQg
fHwgcHJpdi0+c291cmNlVmlkZW8ucGF1c2VkKSB7CisgICAgaWYgKHByaXYtPnNvdXJjZVZpZGVv
LmVub3VnaERhdGEuaXNTY2hlZHVsZWQoKSB8fCBwcml2LT5zb3VyY2VWaWRlby5wYXVzZWQpIHsK
ICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHByaXYtPnNvdXJjZVZpZGVvLmVub3VnaERhdGFJZCA9IGdfdGltZW91dF9hZGRfZnVs
bChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0TWVkaWFWaWRlb1Ny
Y0Vub3VnaERhdGFNYWluQ2IsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkg
Z3N0X29iamVjdF91bnJlZik7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQocHJpdi0+c291
cmNlVmlkZW8uZW5vdWdoRGF0YUlkLCAiW1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY0Vub3Vn
aERhdGFNYWluQ2IiKTsKKyAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOworICAgIHByaXYtPnNvdXJj
ZVZpZGVvLmVub3VnaERhdGEuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNF
bm91Z2hEYXRhTWFpbkNiIiwgc3RkOjpiaW5kKHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRh
TWFpbkNiLCBzcmMpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgIFtzcmNdKCkgeyBnc3Rf
b2JqZWN0X3VucmVmKHNyYyk7IH0pOworCiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0K
IApAQCAtNjQ5LDI2ICs1OTgsMjYgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY0Vu
b3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkKICAgICBHU1RfREVCVUdf
T0JKRUNUKHNyYywgIkhhdmUgZW5vdWdoIGRhdGEiKTsKIAogICAgIEdTVF9PQkpFQ1RfTE9DSyhz
cmMpOwotICAgIGlmIChwcml2LT5zb3VyY2VBdWRpby5lbm91Z2hEYXRhSWQgfHwgcHJpdi0+c291
cmNlQXVkaW8ucGF1c2VkKSB7CisgICAgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLmVub3VnaERhdGEu
aXNTY2hlZHVsZWQoKSB8fCBwcml2LT5zb3VyY2VBdWRpby5wYXVzZWQpIHsKICAgICAgICAgR1NU
X09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXYt
PnNvdXJjZUF1ZGlvLmVub3VnaERhdGFJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZ
X0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFN
YWluQ2IsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91
bnJlZik7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQocHJpdi0+c291cmNlQXVkaW8uZW5v
dWdoRGF0YUlkLCAiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFNYWluQ2Ii
KTsKKyAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOworICAgIHByaXYtPnNvdXJjZUF1ZGlvLmVub3Vn
aERhdGEuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhQXVkaW9TcmNFbm91Z2hEYXRhTWFp
bkNiIiwgc3RkOjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNFbm91Z2hEYXRhTWFpbkNiLCBzcmMp
LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgIFtzcmNdKCkgeyBnc3Rfb2JqZWN0X3VucmVm
KHNyYyk7IH0pOworCiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0KIAotc3RhdGljIGdi
b29sZWFuIHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrTWFpbkNiKFdlYktpdE1lZGlhU3JjKiBzcmMp
CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla01haW5DYihXZWJLaXRNZWRpYVNy
YyopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXN0
YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla01haW5DYihXZWJLaXRNZWRpYVNy
Yyogc3JjKQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtNYWluQ2IoV2ViS2l0
TWVkaWFTcmMqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwog
fQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtEYXRhQ2IoR3N0QXBw
U3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRhKQpAQCAtNjk1LDEwICs2NDQs
MTAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrRGF0YUNiKEdzdEFw
cFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnQKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywg
IkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2VlayIpOwogICAgIHByaXYtPnNvdXJjZVZpZGVvLnJlcXVl
c3RlZE9mZnNldCA9IG9mZnNldDsKIAotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5zZWVrSWQp
Ci0gICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zb3VyY2VWaWRlby5zZWVrSWQpOwotICAg
IHByaXYtPnNvdXJjZVZpZGVvLnNlZWtJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZ
X0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtNYWluQ2Is
IGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7
Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQocHJpdi0+c291cmNlVmlkZW8uc2Vla0lkLCAi
W1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtNYWluQ2IiKTsKKyAgICBnc3Rfb2JqZWN0
X3JlZihzcmMpOworICAgIHByaXYtPnNvdXJjZVZpZGVvLnNlZWsuc2NoZWR1bGUoIltXZWJLaXRd
IHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrTWFpbkNiIiwgc3RkOjpiaW5kKHdlYktpdE1lZGlhVmlk
ZW9TcmNTZWVrTWFpbkNiLCBzcmMpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgIFtzcmNd
KCkgeyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOworCiAgICAgR1NUX09CSkVDVF9VTkxPQ0so
c3JjKTsKIAogICAgIHJldHVybiBUUlVFOwpAQCAtNzI4LDEwICs2NzcsMTAgQEAgc3RhdGljIGdi
b29sZWFuIHdlYktpdE1lZGlhQXVkaW9TcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQg
b2Zmc2V0LCBncG9pbnQKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdlLXJl
cXVlc3Qgc2VlayIpOwogICAgIHByaXYtPnNvdXJjZUF1ZGlvLnJlcXVlc3RlZE9mZnNldCA9IG9m
ZnNldDsKIAotICAgIGlmIChwcml2LT5zb3VyY2VBdWRpby5zZWVrSWQpCi0gICAgICAgIGdfc291
cmNlX3JlbW92ZShwcml2LT5zb3VyY2VBdWRpby5zZWVrSWQpOwotICAgIHByaXYtPnNvdXJjZUF1
ZGlvLnNlZWtJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChH
U291cmNlRnVuYykgd2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtNYWluQ2IsIGdzdF9vYmplY3RfcmVm
KHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0gICAgZ19zb3VyY2Vf
c2V0X25hbWVfYnlfaWQocHJpdi0+c291cmNlQXVkaW8uc2Vla0lkLCAiW1dlYktpdF0gd2ViS2l0
TWVkaWFBdWRpb1NyY1NlZWtNYWluQ2IiKTsKKyAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOworICAg
IHByaXYtPnNvdXJjZUF1ZGlvLnNlZWsuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhQXVk
aW9TcmNTZWVrTWFpbkNiIiwgc3RkOjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNTZWVrTWFpbkNi
LCBzcmMpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgIFtzcmNdKCkgeyBnc3Rfb2JqZWN0
X3VucmVmKHNyYyk7IH0pOworCiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAogICAgIHJl
dHVybiBUUlVFOwpAQCAtODE2LDE0ICs3NjUsMTQgQEAgdm9pZCBNZWRpYVNvdXJjZUNsaWVudEdz
dHJlYW1lcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUpCiAgICAgR1NUX0RFQlVHX09CSkVDVCht
X3NyYywgIkhhdmUgRU9TIik7CiAKICAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOwotICAgIGlm
ICghcHJpdi0+c291cmNlVmlkZW8uc2Vla0lkKSB7CisgICAgaWYgKCFwcml2LT5zb3VyY2VWaWRl
by5zZWVrLmlzU2NoZWR1bGVkKCkpIHsKICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMp
OwogICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHByaXYtPnNv
dXJjZVZpZGVvLmFwcHNyYykpOwogICAgIH0gZWxzZQogICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhtX3NyYyk7CiAKICAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOwotICAgIGlmICghcHJpdi0+
c291cmNlQXVkaW8uc2Vla0lkKSB7CisgICAgaWYgKCFwcml2LT5zb3VyY2VBdWRpby5zZWVrLmlz
U2NoZWR1bGVkKCkpIHsKICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwogICAgICAg
ICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZUF1ZGlv
LmFwcHNyYykpOwogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcAppbmRleCAzMDE3ZjFkLi5lNWZiODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2Vi
S2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGdz
dC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0
ci5oPgpAQCAtMTI2LDExICsxMjcsMTEgQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsK
IAogICAgIGd1aW50NjQgcmVxdWVzdGVkT2Zmc2V0OwogCi0gICAgZ3VpbnQgc3RhcnRJRDsKLSAg
ICBndWludCBzdG9wSUQ7Ci0gICAgZ3VpbnQgbmVlZERhdGFJRDsKLSAgICBndWludCBlbm91Z2hE
YXRhSUQ7Ci0gICAgZ3VpbnQgc2Vla0lEOworICAgIEdNYWluTG9vcFNvdXJjZSBzdGFydFNvdXJj
ZTsKKyAgICBHTWFpbkxvb3BTb3VyY2Ugc3RvcFNvdXJjZTsKKyAgICBHTWFpbkxvb3BTb3VyY2Ug
bmVlZERhdGFTb3VyY2U7CisgICAgR01haW5Mb29wU291cmNlIGVub3VnaERhdGFTb3VyY2U7Cisg
ICAgR01haW5Mb29wU291cmNlIHNlZWtTb3VyY2U7CiAKICAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4g
YnVmZmVyOwogCkBAIC0yNTMsNiArMjU0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNf
aW5pdChXZWJLaXRXZWJTcmMqIHNyYykKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0g
V0VCS0lUX1dFQl9TUkNfR0VUX1BSSVZBVEUoc3JjKTsKIAogICAgIHNyYy0+cHJpdiA9IHByaXY7
CisgICAgbmV3IChwcml2KSBXZWJLaXRXZWJTcmNQcml2YXRlKCk7CiAKICAgICBwcml2LT5hcHBz
cmMgPSBHU1RfQVBQX1NSQyhnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNyYyIsIDApKTsK
ICAgICBpZiAoIXByaXYtPmFwcHNyYykgewpAQCAtMzE0LDYgKzMxNiw3IEBAIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CisgICAg
cHJpdi0+fldlYktpdFdlYlNyY1ByaXZhdGUoKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09C
SkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KQEAgLTM2NCwyNCArMzY3LDEzIEBA
IHN0YXRpYyB2b2lkIHJlbW92ZVRpbWVvdXRTb3VyY2VzKFdlYktpdFdlYlNyYyogc3JjKQogewog
ICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBpZiAocHJp
di0+c3RhcnRJRCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPnN0YXJ0SUQpOwotICAg
IHByaXYtPnN0YXJ0SUQgPSAwOwotCi0gICAgaWYgKHByaXYtPm5lZWREYXRhSUQpCi0gICAgICAg
IGdfc291cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKLSAgICBwcml2LT5uZWVkRGF0YUlE
ID0gMDsKLQotICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQpCi0gICAgICAgIGdfc291cmNlX3Jl
bW92ZShwcml2LT5lbm91Z2hEYXRhSUQpOwotICAgIHByaXYtPmVub3VnaERhdGFJRCA9IDA7Ci0K
LSAgICBpZiAocHJpdi0+c2Vla0lEKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c2Vl
a0lEKTsKLSAgICBwcml2LT5zZWVrSUQgPSAwOworICAgIHByaXYtPnN0YXJ0U291cmNlLmNhbmNl
bCgpOworICAgIHByaXYtPm5lZWREYXRhU291cmNlLmNhbmNlbCgpOworICAgIHByaXYtPmVub3Vn
aERhdGFTb3VyY2UuY2FuY2VsKCk7CisgICAgcHJpdi0+c2Vla1NvdXJjZS5jYW5jZWwoKTsKIH0K
IAotc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMpCitz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdl
YktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKQEAgLTM4OSwxMCArMzgxLDEw
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQog
CiAgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogCi0g
ICAgYm9vbCBzZWVraW5nID0gcHJpdi0+c2Vla0lEOworICAgIGJvb2wgc2Vla2luZyA9IHByaXYt
PnNlZWtTb3VyY2UuaXNTY2hlZHVsZWQoKTsKIAogICAgIHJlbW92ZVRpbWVvdXRTb3VyY2VzKHNy
Yyk7Ci0gICAgcHJpdi0+c3RvcElEID0gMDsKKyAgICBwcml2LT5zdG9wU291cmNlLmNhbmNlbCgp
OwogCiAgICAgaWYgKHByaXYtPmNsaWVudCkgewogICAgICAgICBkZWxldGUgcHJpdi0+Y2xpZW50
OwpAQCAtNDM2LDExICs0MjgsOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChX
ZWJLaXRXZWJTcmMqIHNyYykKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0
b3BwZWQgcmVxdWVzdCIpOwotCi0gICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCitzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2
YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCkBAIC00NDgsMTMgKzQzOCwxMyBAQCBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBHTXV0ZXhM
b2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAKLSAgICBwcml2LT5zdGFy
dElEID0gMDsKKyAgICBwcml2LT5zdGFydFNvdXJjZS5jYW5jZWwoKTsKIAogICAgIGlmICghcHJp
di0+dXJpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiTm8gVVJJIHByb3ZpZGVk
Iik7CiAgICAgICAgIGxvY2tlci51bmxvY2soKTsKICAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChz
cmMpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBBU1NFUlQoIXByaXYtPmNsaWVudCk7CkBAIC01MTAsMTAgKzUwMCw5IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAgICAgfQogICAg
ICAgICBsb2NrZXIudW5sb2NrKCk7CiAgICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiU3RhcnRlZCByZXF1ZXN0Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwogfQog
CiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0
RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKQEAgLTU0NSwxMyAr
NTM0LDE3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VT
dGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0CiAgICAgc3dpdGNoICh0cmFuc2l0aW9u
KSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFVU0VEIik7Ci0gICAgICAgIHByaXYtPnN0
YXJ0SUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMp
IHdlYktpdFdlYlNyY1N0YXJ0LCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkp
IGdzdF9vYmplY3RfdW5yZWYpOworICAgICAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOworICAgICAg
ICBwcml2LT5zdGFydFNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0V2ViU3JjU3RhcnQi
LCBzdGQ6OmJpbmQod2ViS2l0V2ViU3JjU3RhcnQsIHNyYyksIEdfUFJJT1JJVFlfREVGQVVMVCwK
KyAgICAgICAgICAgIFtzcmNdKCkgeyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgogICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKICAgICAgICAgLy8g
Y2FuY2VsIHBlbmRpbmcgc291cmNlcwogICAgICAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMp
OwotICAgICAgICBwcml2LT5zdG9wSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZB
VUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0b3AsIGdzdF9vYmplY3RfcmVmKHNyYyks
IChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CisgICAgICAgIGdzdF9vYmplY3Rf
cmVmKHNyYyk7CisgICAgICAgIHByaXYtPnN0b3BTb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIHdl
YktpdFdlYlNyY1N0b3AiLCBzdGQ6OmJpbmQod2ViS2l0V2ViU3JjU3RvcCwgc3JjKSwgR19QUklP
UklUWV9ERUZBVUxULAorICAgICAgICAgICAgW3NyY10oKSB7IGdzdF9vYmplY3RfdW5yZWYoc3Jj
KTsgfSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAt
NjY2LDI0ICs2NTksMTggQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjVXJpSGFuZGxlckluaXQo
Z3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKIAogLy8gYXBwc3JjIGNhbGxiYWNrcwogCi1zdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IoV2ViS2l0V2ViU3JjKiBzcmMp
CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNy
YykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09C
SkVDVF9HRVRfTE9DSyhzcmMpKTsKLSAgICAvLyBhbHJlYWR5IHN0b3BwZWQKLSAgICBpZiAoIXBy
aXYtPm5lZWREYXRhSUQpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQogICAgIHByaXYtPnBhdXNl
ZCA9IEZBTFNFOwotICAgIHByaXYtPm5lZWREYXRhSUQgPSAwOwogICAgIGxvY2tlci51bmxvY2so
KTsKIAogICAgIGlmIChwcml2LT5jbGllbnQpCiAgICAgICAgIHByaXYtPmNsaWVudC0+c2V0RGVm
ZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgdm9pZCB3
ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIg
dXNlckRhdGEpCkBAIC02OTQsMzEgKzY4MSwyNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNO
ZWVkRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpCiAg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJOZWVkIG1vcmUgZGF0YTogJXUiLCBsZW5ndGgpOwog
CiAgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwotICAg
IGlmIChwcml2LT5uZWVkRGF0YUlEIHx8ICFwcml2LT5wYXVzZWQpIHsKKyAgICBpZiAocHJpdi0+
bmVlZERhdGFTb3VyY2UuaXNTY2hlZHVsZWQoKSB8fCAhcHJpdi0+cGF1c2VkKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCi0gICAgcHJpdi0+bmVlZERhdGFJRCA9IGdfaWRsZV9hZGRfZnVsbChH
X1BSSU9SSVRZX0RFRkFVTFQsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjTmVlZERhdGFNYWlu
Q2IsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJl
Zik7CisgICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKKyAgICBwcml2LT5uZWVkRGF0YVNvdXJjZS5z
Y2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IiLCBzdGQ6OmJpbmQo
d2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IsIHNyYyksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAg
ICAgICAgW3NyY10oKSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7CiB9CiAKLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQor
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNy
YykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09C
SkVDVF9HRVRfTE9DSyhzcmMpKTsKLSAgICAvLyBhbHJlYWR5IHN0b3BwZWQKLSAgICBpZiAoIXBy
aXYtPmVub3VnaERhdGFJRCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCiAgICAgcHJpdi0+cGF1
c2VkID0gVFJVRTsKLSAgICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOwogICAgIGxvY2tlci51bmxv
Y2soKTsKIAogICAgIGlmIChwcml2LT5jbGllbnQpCiAgICAgICAgIHByaXYtPmNsaWVudC0+c2V0
RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkK
QEAgLTcyOSwyOSArNzExLDIwIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGFD
YihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkKICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkhhdmUgZW5vdWdoIGRhdGEiKTsKIAogICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09C
SkVDVF9HRVRfTE9DSyhzcmMpKTsKLSAgICBpZiAocHJpdi0+ZW5vdWdoRGF0YUlEIHx8IHByaXYt
PnBhdXNlZCkgeworICAgIGlmIChwcml2LT5lbm91Z2hEYXRhU291cmNlLmlzU2NoZWR1bGVkKCkg
fHwgcHJpdi0+cGF1c2VkKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgcHJpdi0+ZW5v
dWdoRGF0YUlEID0gZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgKEdTb3VyY2VG
dW5jKSB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAo
R0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOworICAgIGdzdF9vYmplY3RfcmVmKHNy
Yyk7CisgICAgcHJpdi0+ZW5vdWdoRGF0YVNvdXJjZS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0
V2ViU3JjRW5vdWdoRGF0YU1haW5DYiIsIHN0ZDo6YmluZCh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRh
TWFpbkNiLCBzcmMpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgIFtzcmNdKCkgeyBnc3Rf
b2JqZWN0X3VucmVmKHNyYyk7IH0pOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
U2Vla01haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1Nl
ZWtNYWluQ2IoV2ViS2l0V2ViU3JjKiBzcmMpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKLQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBH
TXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7Ci0gICAgLy8gYWxy
ZWFkeSBzdG9wcGVkCi0gICAgaWYgKCFwcml2LT5zZWVrSUQpCi0gICAgICAgIHJldHVybiBGQUxT
RTsKLSAgICBsb2NrZXIudW5sb2NrKCk7Ci0KICAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7CiAg
ICAgd2ViS2l0V2ViU3JjU3RhcnQoc3JjKTsKLQotICAgIHJldHVybiBGQUxTRTsKIH0KIAogc3Rh
dGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBv
ZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRhKQpAQCAtNzcwLDkgKzc0Myw5IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBn
cG9pbnRlciB1c2VyCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJEb2luZyByYW5nZS1yZXF1
ZXN0IHNlZWsiKTsKICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSBvZmZzZXQ7CiAKLSAgICBp
ZiAocHJpdi0+c2Vla0lEKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c2Vla0lEKTsK
LSAgICBwcml2LT5zZWVrSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAo
R1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IsIGdzdF9vYmplY3RfcmVmKHNyYyks
IChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CisgICAgZ3N0X29iamVjdF9yZWYo
c3JjKTsKKyAgICBwcml2LT5zZWVrU291cmNlLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRXZWJT
cmNTZWVrTWFpbkNiIiwgc3RkOjpiaW5kKHdlYktpdFdlYlNyY1NlZWtNYWluQ2IsIHNyYyksIEdf
UFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgW3NyY10oKSB7IGdzdF9vYmplY3RfdW5yZWYoc3Jj
KTsgfSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTgyOCw3ICs4MDEsNyBAQCB2b2lkIFN0
cmVhbWluZ0NsaWVudDo6aGFuZGxlUmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKIAogICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKIAotICAgIGlmIChwcml2LT5zZWVrSUQpIHsKKyAgICBpZiAocHJpdi0+c2Vl
a1NvdXJjZS5pc1NjaGVkdWxlZCgpKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
U2VlayBpbiBwcm9ncmVzcywgaWdub3JpbmcgcmVzcG9uc2UiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTkzMiw3ICs5MDUsNyBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlRGF0
YVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiAgICAgaWYgKHByaXYtPmJ1
ZmZlcikKICAgICAgICAgdW5tYXBHc3RCdWZmZXIocHJpdi0+YnVmZmVyLmdldCgpKTsKIAotICAg
IGlmIChwcml2LT5zZWVrSUQpIHsKKyAgICBpZiAocHJpdi0+c2Vla1NvdXJjZS5pc1NjaGVkdWxl
ZCgpKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayBpbiBwcm9ncmVzcywg
aWdub3JpbmcgZGF0YSIpOwogICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtOTkzLDcgKzk2Niw3IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVO
b3RpZnlGaW5pc2hlZCgpCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJIYXZlIEVPUyIpOwog
CiAgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwotICAg
IGlmICghcHJpdi0+c2Vla0lEKSB7CisgICAgaWYgKCFwcml2LT5zZWVrU291cmNlLmlzU2NoZWR1
bGVkKCkpIHsKICAgICAgICAgbG9ja2VyLnVubG9jaygpOwogICAgICAgICBnc3RfYXBwX3NyY19l
bmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKaW5kZXggZDQ5YzM1Mjgu
LjgwZmJlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFn
QW5kRHJvcEhlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ry
YWdBbmREcm9wSGVscGVyLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkd0a1ZlcnNp
b25pbmcuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCiAjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTY4LDE4ICs2OSw2IEBAIHZvaWQgR3RrRHJhZ0FuZERyb3BIZWxw
ZXI6OmhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rp
CiAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNl
bGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZGF0YU9iamVjdCk7CiB9CiAKLXN0cnVj
dCBIYW5kbGVEcmFnTGF0ZXJEYXRhIHsKLSAgICBEcm9wcGluZ0NvbnRleHQqIGNvbnRleHQ7Ci0g
ICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIqIGdsdWU7Ci19OwotCi1zdGF0aWMgZ2Jvb2xlYW4gaGFu
ZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayhIYW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRhKQotewot
ICAgIGRhdGEtPmdsdWUtPmhhbmRsZURyYWdMZWF2ZUxhdGVyKGRhdGEtPmNvbnRleHQpOwotICAg
IGRlbGV0ZSBkYXRhOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogdm9pZCBHdGtEcmFnQW5kRHJv
cEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoRHJvcHBpbmdDb250ZXh0KiBjb250ZXh0KQog
ewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0LT5n
ZGtDb250ZXh0KTsKQEAgLTEwOSwxMSArOTgsOCBAQCB2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnTGVhdmUoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIERyYWdFeGl0ZQog
ICAgIC8vIER1cmluZyBhIGRyb3AgR1RLKyB3aWxsIGZpcmUgYSBkcmFnLWxlYXZlIHNpZ25hbCBy
aWdodCBiZWZvcmUgZmlyaW5nCiAgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQg
dGhlIGFjdGlvbnMgZm9yIGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCiAgICAgLy8gdGhvc2Ug
Zm9yIGRyYWctZHJvcCwgc28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkg
aGVyZS4KLSAgICBIYW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRsZURyYWdMYXRl
ckRhdGE7Ci0gICAgZGF0YS0+Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgZGF0YS0+Y29udGV4dC0+
ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxsYmFjazsKLSAgICBkYXRhLT5nbHVlID0gdGhpczsK
LSAgICBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSwgMCk7Cisg
ICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxsYmFjazsKKyAgICBHTWFpbkxv
b3BTb3VyY2U6OmNyZWF0ZSgpLnNjaGVkdWxlKCJbV2ViS2l0XSBoYW5kbGVEcmFnTGVhdmVMYXRl
ciIsIHN0ZDo6YmluZCgmR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZUxhdGVy
LCB0aGlzLCBjb250ZXh0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHF1ZXJ5TmV3RHJvcENvbnRleHRE
YXRhKERyb3BwaW5nQ29udGV4dCogZHJvcENvbnRleHQsIEd0a1dpZGdldCogd2lkZ2V0LCBndWlu
dCB0aW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRp
bWVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5j
cHAKaW5kZXggYjY5YTliOC4uOGVlNWY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwCkBAIC0yOCw0NyArMjgsMzIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgogCi0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBndWludCBzaGFyZWRUaW1l
cjsKK3N0YXRpYyBHTWFpbkxvb3BTb3VyY2UgZ1NoYXJlZFRpbWVyOwogc3RhdGljIHZvaWQgKCpz
aGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pKCk7CiAKIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKHZvaWQgKCpmKSgpKQogewogICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9IGY7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzaGFyZWRUaW1lclRpbWVvdXRDYWxsYmFjayhncG9pbnRl
cikKLXsKLSAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQotICAgICAgICBzaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKCFzaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24pCisgICAgICAgIGdTaGFyZWRUaW1lci5jYW5jZWwoKTsKIH0KIAog
dm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiB7CiAgICAg
QVNTRVJUKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik7CiAKLSAgICBndWludCBpbnRlcnZhbElu
TVMgPSBzdGF0aWNfY2FzdDxndWludD4oaW50ZXJ2YWwgKiAxMDAwKTsKLQotICAgIHN0b3BTaGFy
ZWRUaW1lcigpOwotICAgIHNoYXJlZFRpbWVyID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklP
UklUWV9SRURSQVcsIGludGVydmFsSW5NUywgc2hhcmVkVGltZXJUaW1lb3V0Q2FsbGJhY2ssIDAs
IDApOwotICAgIGdfc291cmNlX3NldF9uYW1lX2J5X2lkKHNoYXJlZFRpbWVyLCAiW1dlYktpdF0g
c2hhcmVkVGltZXJUaW1lb3V0Q2FsbGJhY2siKTsKKyAgICBnU2hhcmVkVGltZXIuc2NoZWR1bGVB
ZnRlckRlbGF5KCJbV2ViS2l0XSBzaGFyZWRUaW1lclRpbWVvdXRDYWxsYmFjayIsIHNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbiwKKyAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oaW50
ZXJ2YWwpKSwgR0RLX1BSSU9SSVRZX1JFRFJBVyk7CiB9CiAKIHZvaWQgc3RvcFNoYXJlZFRpbWVy
KCkKIHsKLSAgICBpZiAoc2hhcmVkVGltZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z2Jvb2xlYW4gcmVtb3ZlZFNvdXJjZSA9IGdfc291cmNlX3JlbW92ZShzaGFyZWRUaW1lcik7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkU291cmNlLCByZW1vdmVkU291cmNlKTsKLSAgICBzaGFy
ZWRUaW1lciA9IDA7CisgICAgZ1NoYXJlZFRpbWVyLmNhbmNlbCgpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKaW5kZXggMjcxYjQ5Ni4uNmNlNzExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM2IEBACisyMDE0LTAzLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR0xJQl0gQWRkIEdNYWluTG9vcFNvdXJjZSBjbGFzcyB0byB3cmFw
IGlkbGUgYW5kIHRpbWVvdXQgc291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzAwMjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgR01haW5Mb29wU291cmNlIHRvIHNjaGVkdWxlIGlkbGUgYW5k
IHRpbWVvdXQgc291cmNlcy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzdG9wQW55UGVuZGlu
Z0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2NoZWR1bGVMYXllckZsdXNo
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OkNocm9tZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21l
Q2xpZW50OjplbWl0Q2xvc2VXZWJWaWV3U2lnbmFsKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21l
Q2xpZW50OjpjbG9zZVdpbmRvd1Nvb24pOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6
OndpZGdldFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpwYWlu
dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvR3RrQWRqdXN0bWVudFdhdGNoZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpHdGtBZGp1c3RtZW50V2F0Y2hlcjo6R3RrQWRqdXN0bWVudFdhdGNoZXIpOgorICAgICAg
ICAoV2ViS2l0OjpHdGtBZGp1c3RtZW50V2F0Y2hlcjo6fkd0a0FkanVzdG1lbnRXYXRjaGVyKToK
KyAgICAgICAgKFdlYktpdDo6R3RrQWRqdXN0bWVudFdhdGNoZXI6OnVwZGF0ZUFkanVzdG1lbnRz
RnJvbVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViS2l0OjpHdGtBZGp1c3RtZW50V2F0Y2hlcjo6
dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9HdGtBZGp1c3RtZW50V2F0Y2hlci5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzKToK
KwogMjAxNC0wMy0wNyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgTW92ZSBHVEsgV2ViS2l0MSBjb2RlIHRvIHN0ZDo6dW5pcXVlX3B0cgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0LmgKaW5kZXggMDU4ZmNiYS4uZDFkMGU3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KIAogI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKQEAgLTY5LDcg
KzcwLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmll
dzsKLSAgICB1bnNpZ25lZCBpbnQgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkOworICAgIEdN
YWluTG9vcFNvdXJjZSBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrOwogCiAjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQogICAgIE93blB0cjxXZWJDb3JlOjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdz4gbV9yZWRpcmVjdGVkV2luZG93OwpAQCAtODEsOSArODIsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9uZWVkc0V4dHJhRmx1c2g7CiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckZQU0Nv
dW50ZXIgbV9mcHNDb3VudGVyOwogCi0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOwog
ICAgIHZvaWQgc3RvcEFueVBlbmRpbmdMYXllckZsdXNoKCk7Ci0gICAgc3RhdGljIGdib29sZWFu
IGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2soQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQqKTsKICAgICBXZWJDb3JlOjpHTENvbnRleHQqIHByZXBhcmVGb3JSZW5kZXJpbmcoKTsKICAg
ICB2b2lkIGNsZWFyRXZlcnl3aGVyZSgpOwogI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcAppbmRleCA4ZTRmMDMyLi5iNjAzN2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtNjAsNyArNjAs
NiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAg
ICAgOiBtX3dlYlZpZXcod2ViVmlldykKLSAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJ
ZCgwKQogICAgICwgbV9sYXN0Rmx1c2hUaW1lKDApCiAgICAgLCBtX3JlZHJhd1BlbmRpbmdUaW1l
KDApCiAgICAgLCBtX25lZWRzRXh0cmFGbHVzaChmYWxzZSkKQEAgLTEzOCwxMCArMTM3LDcgQEAg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6On5BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dCgpCiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN0b3BBbnlQZW5k
aW5nTGF5ZXJGbHVzaCgpCiB7Ci0gICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBnX3NvdXJjZV9yZW1vdmUobV9sYXllckZsdXNoVGltZXJD
YWxsYmFja0lkKTsKLSAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSAwOworICAgIG1f
bGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2suY2FuY2VsKCk7CiB9CiAKIGJvb2wgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OmVuYWJsZWQoKQpAQCAtMTY1LDExICsxNjEsMTEgQEAgYm9vbCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY2Fpcm9f
dCogY3IsIGNvbnN0IEludFIKICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7CiAgICAgY2Fpcm9fZmlsbChjcik7CiAKLSAgICBpZiAoIW1fbGF5ZXJGbHVz
aFRpbWVyQ2FsbGJhY2tJZCAmJiAodG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpIHx8IG1fbmVlZHNF
eHRyYUZsdXNoKSkgeworICAgIGlmICghbV9sYXllckZsdXNoVGltZXJDYWxsYmFjay5pc1NjaGVk
dWxlZCgpICYmICh0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmRlc2Nl
bmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgfHwgbV9uZWVkc0V4dHJhRmx1c2gp
KSB7CiAgICAgICAgIG1fbmVlZHNFeHRyYUZsdXNoID0gZmFsc2U7CiAgICAgICAgIGRvdWJsZSBu
ZXh0Rmx1c2ggPSBzdGQ6Om1heCgoMSAvIGdGcmFtZXNQZXJTZWNvbmQpIC0gKGN1cnJlbnRUaW1l
KCkgLSBtX2xhc3RGbHVzaFRpbWUpLCAwLjApOwotICAgICAgICBtX2xheWVyRmx1c2hUaW1lckNh
bGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgMTAwMCAq
IG5leHRGbHVzaCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVy
RmlyZWRDYWxsYmFjayksIHRoaXMsIDApOwotICAgICAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9p
ZChtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQsICJbV2ViS2l0XSBsYXllckZsdXNoVGltZXJG
aXJlZENhbGxiYWNrIik7CisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2suc2NoZWR1
bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBsYXllckZsdXNoVGltZXIiLCBzdGQ6OmJpbmQoJkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaEFuZFJlbmRlckxheWVycywgdGhpcyksCisg
ICAgICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihuZXh0Rmx1c2gpKSwgR0RLX1BS
SU9SSVRZX0VWRU5UUyk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjksOCArMjY1
LDkgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGgKICAgICBtX25lZWRzRXh0cmFGbHVzaCA9IHRy
dWU7CiAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAKLSAgICBtX2xheWVyRmx1c2hUaW1lckNh
bGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgNTAwLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNr
KSwgdGhpcywgMCk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWVfYnlfaWQobV9sYXllckZsdXNoVGlt
ZXJDYWxsYmFja0lkLCAiW1dlYktpdF0gbGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayIpOwor
ICAgIC8vIFdlIG5lZWQgYSBkaWZmZXJlbnQgc291cmNlIGZvciB0aGlzIHRvIG5vdCBjYW5jZWwg
dGhlIHByZXZpb3VzIG9uZS4KKyAgICBHTWFpbkxvb3BTb3VyY2U6OmNyZWF0ZSgpLnNjaGVkdWxl
QWZ0ZXJEZWxheSgiW1dlYktpdF0gbGF5ZXJGbHVzaFRpbWVyIiwgc3RkOjpiaW5kKCZBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hBbmRSZW5kZXJMYXllcnMsIHRoaXMpLAorICAg
ICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCksIEdES19QUklPUklUWV9FVkVOVFMp
OwogfQogCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXROb25Db21wb3Np
dGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMzIwLDI1ICsz
MTcsMTkgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2Nyb2xsTm9uQ29t
cG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHMKICAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKIH0KIAotZ2Jvb2xlYW4gQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmxheWVyRmx1
c2hUaW1lckZpcmVkQ2FsbGJhY2soQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgY29udGV4dC0+bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKLSAgICByZXR1cm4g
RkFMU0U7Ci19Ci0KIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNjaGVkdWxl
TGF5ZXJGbHVzaCgpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpCisgICAgaWYgKG1fbGF5ZXJGbHVz
aFRpbWVyQ2FsbGJhY2suaXNTY2hlZHVsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
V2UgdXNlIGEgR0xpYiB0aW1lciBiZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50IGhhbmRsaW5n
IGR1cmluZyBkcmFnZ2luZyBjYW4KICAgICAvLyBzdGFydmUgV2ViQ29yZSB0aW1lcnMsIHdoaWNo
IGhhdmUgYSBsb3dlciBwcmlvcml0eS4KICAgICBkb3VibGUgbmV4dEZsdXNoID0gc3RkOjptYXgo
Z1NjaGVkdWxlRGVsYXkgLSAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEZsdXNoVGltZSksIDAuMCk7
Ci0gICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdE
S19QUklPUklUWV9FVkVOVFMsIG5leHRGbHVzaCAqIDEwMDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBn
X3NvdXJjZV9zZXRfbmFtZV9ieV9pZChtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQsICJbV2Vi
S2l0XSBsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrIik7CisgICAgbV9sYXllckZsdXNoVGlt
ZXJDYWxsYmFjay5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIGxheWVyRmx1c2hUaW1lciIs
IHN0ZDo6YmluZCgmQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVy
TGF5ZXJzLCB0aGlzKSwKKyAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4obmV4dEZs
dXNoKSksIEdES19QUklPUklUWV9FVkVOVFMpOwogfQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQpAQCAtMzgxLDEyICszNzIs
NiBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaEFuZFJlbmRlckxh
eWVycygpCiAgICAgICAgIG1fcmVkcmF3UGVuZGluZ1RpbWUgPSBjdXJyZW50VGltZSgpOwogfQog
Ci12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpsYXllckZsdXNoVGltZXJGaXJl
ZCgpCi17Ci0gICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKLSAgICBmbHVzaEFu
ZFJlbmRlckxheWVycygpOwotfQotCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGlt
ZSkKIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEd0ay5jcHAKaW5kZXggMWEwMGUxZS4uMWFkOGM4ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0xMTMs
MjMgKzExMywxNSBAQCBzdGF0aWMgUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmU+IGNyZWF0
ZUJhY2tpbmdTdG9yZShHdGtXaWRnZXQqIHdpZGdldCwgY29ucwogQ2hyb21lQ2xpZW50OjpDaHJv
bWVDbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3
KQogICAgICwgbV9hZGp1c3RtZW50V2F0Y2hlcih3ZWJWaWV3KQotICAgICwgbV9jbG9zZVNvb25U
aW1lcigwKQogICAgICwgbV9kaXNwbGF5VGltZXIodGhpcywgJkNocm9tZUNsaWVudDo6cGFpbnQp
CiAgICAgLCBtX2ZvcmNlUGFpbnQoZmFsc2UpCiAgICAgLCBtX2xhc3REaXNwbGF5VGltZSgwKQot
ICAgICwgbV9yZXBhaW50U29vblNvdXJjZUlkKDApCiB7CiAgICAgQVNTRVJUKG1fd2ViVmlldyk7
CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogewotICAgIGlmICht
X2Nsb3NlU29vblRpbWVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9jbG9zZVNvb25UaW1l
cik7Ci0KLSAgICBpZiAobV9yZXBhaW50U29vblNvdXJjZUlkKQotICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUobV9yZXBhaW50U29vblNvdXJjZUlkKTsKLQogICAgIGRlbGV0ZSB0aGlzOwogfQogCkBA
IC0zMDAsMTEgKzI5MiwxMCBAQCB2b2lkIENocm9tZUNsaWVudDo6c2V0UmVzaXphYmxlKGJvb2wp
CiAgICAgLy8gSWdub3JlZCBmb3Igbm93CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBlbWl0Q2xvc2VX
ZWJWaWV3U2lnbmFsTGF0ZXIoV2ViS2l0V2ViVmlldyogdmlldykKK3ZvaWQgQ2hyb21lQ2xpZW50
OjplbWl0Q2xvc2VXZWJWaWV3U2lnbmFsKCkKIHsKICAgICBnYm9vbGVhbiBpc0hhbmRsZWQ7Ci0g
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHZpZXcsICJjbG9zZS13ZWItdmlldyIsICZpc0hhbmRs
ZWQpOwotICAgIHJldHVybiBGQUxTRTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJW
aWV3LCAiY2xvc2Utd2ViLXZpZXciLCAmaXNIYW5kbGVkKTsKIH0KIAogdm9pZCBDaHJvbWVDbGll
bnQ6OmNsb3NlV2luZG93U29vbigpCkBAIC0zMTIsNyArMzAzLDcgQEAgdm9pZCBDaHJvbWVDbGll
bnQ6OmNsb3NlV2luZG93U29vbigpCiAgICAgLy8gV2UgbWF5IG5vdCBoYXZlIGEgV2ViVmlldyBh
cyBjcmVhdGUtd2ViLXZpZXcgY2FuIHJldHVybiBOVUxMLgogICAgIGlmICghbV93ZWJWaWV3KQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY2xvc2VTb29uVGltZXIpIC8vIERvbid0IGNhbGwg
Y2xvc2Utd2ViLXZpZXcgbW9yZSB0aGFuIG9uY2UuCisgICAgaWYgKG1fY2xvc2VTb29uVGltZXIu
aXNTY2hlZHVsZWQoKSkgLy8gRG9uJ3QgY2FsbCBjbG9zZS13ZWItdmlldyBtb3JlIHRoYW4gb25j
ZS4KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhlIHBhcmVu
dCBXZWJWaWV3IGZyb20gV2ViVmlld1NldHMgaGVyZSwgYmVmb3JlIGl0IGFjdHVhbGx5CkBAIC0z
MzAsNyArMzIxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNsb3NlV2luZG93U29vbigpCiAgICAg
Ly8gb25sb2FkIGhhbmRsZXIsIGl0IHdpbGwgbmVlZCB0byBjYWxsIEZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cy4KICAgICAvLyBJbnN0ZWFkIG9mIGZpcmlu
ZyB0aGUgY2xvc2Utd2ViLXZpZXcgc2lnbmFsIG5vdywgZmlyZSBpdCBhZnRlciB0aGUgY2FsbGVy
IGZpbmlzaGVzLgogICAgIC8vIFRoaXMgc2VlbXMgdG8gbWF0Y2ggdGhlIE1hYy9XaW5kb3dzIHBv
cnQgYmVoYXZpb3IuCi0gICAgbV9jbG9zZVNvb25UaW1lciA9IGdfaWRsZV9hZGRfZnVsbChHX1BS
SU9SSVRZX0RFRkFVTFQsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGVtaXRDbG9zZVdl
YlZpZXdTaWduYWxMYXRlciksIG1fd2ViVmlldywgMCk7CisgICAgbV9jbG9zZVNvb25UaW1lci5z
Y2hlZHVsZSgiW1dlYktpdF0gY2xvc2VXaW5kb3dTb29uIiwgc3RkOjpiaW5kKCZDaHJvbWVDbGll
bnQ6OmVtaXRDbG9zZVdlYlZpZXdTaWduYWwsIHRoaXMpKTsKIH0KIAogYm9vbCBDaHJvbWVDbGll
bnQ6OmNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbikKQEAgLTQyMSwxMiArNDEyLDYgQEAgSW50
UmVjdCBDaHJvbWVDbGllbnQ6OndpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QKICAgICByZXR1cm4g
SW50UmVjdCgpOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gcmVwYWludEV2ZXJ5dGhpbmdTb29uVGlt
ZW91dChDaHJvbWVDbGllbnQqIGNsaWVudCkKLXsKLSAgICBjbGllbnQtPnBhaW50KDApOwotICAg
IHJldHVybiBGQUxTRTsKLX0KLQogc3RhdGljIHZvaWQgY2xpcE91dE9sZFdpZGdldEFyZWEoY2Fp
cm9fdCogY3IsIGNvbnN0IEludFNpemUmIG9sZFNpemUsIGNvbnN0IEludFNpemUmIG5ld1NpemUp
CiB7CiAgICAgY2Fpcm9fbW92ZV90byhjciwgb2xkU2l6ZS53aWR0aCgpLCAwKTsKQEAgLTUxMSw4
ICs0OTYsOCBAQCB2b2lkIENocm9tZUNsaWVudDo6d2lkZ2V0U2l6ZUNoYW5nZWQoY29uc3QgSW50
U2l6ZSYgb2xkV2lkZ2V0U2l6ZSwgSW50U2l6ZSBuZXdTaQogCiAgICAgLy8gV2ViQ29yZSB0aW1l
cnMgYnkgZGVmYXVsdCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkgd2hpY2ggbGVhZHMgdG8gbW9yZSBh
cnRpZmFjdHMgd2hlbiBvcGFxdWUKICAgICAvLyByZXNpemUgaXMgb24sIHRodXMgd2UgdXNlIGdf
dGltZW91dF9hZGQgaGVyZSB0byBmb3JjZSBhIGhpZ2hlciB0aW1lb3V0IHByaW9yaXR5LgotICAg
IGlmICghbV9yZXBhaW50U29vblNvdXJjZUlkKQotICAgICAgICBtX3JlcGFpbnRTb29uU291cmNl
SWQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihyZXBhaW50RXZlcnl0aGluZ1Nvb25UaW1lb3V0KSwgdGhpcywgMCk7Cisg
ICAgaWYgKCFtX3JlcGFpbnRTb29uU291cmNlLmlzU2NoZWR1bGVkKCkpCisgICAgICAgIG1fcmVw
YWludFNvb25Tb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIENocm9tZUNsaWVudEd0azo6cGFpbnQi
LCBzdGQ6OmJpbmQoJkNocm9tZUNsaWVudDo6cGFpbnQsIHRoaXMsIG51bGxwdHIpKTsKIH0KIAog
c3RhdGljIHZvaWQgY29hbGVzY2VSZWN0c0lmUG9zc2libGUoY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QsIFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCkBAIC02MTcsNyArNjAyLDYgQEAgdm9pZCBDaHJv
bWVDbGllbnQ6OnBhaW50KFdlYkNvcmU6OlRpbWVyPENocm9tZUNsaWVudD4qKQogCiAgICAgbV9k
aXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOwogICAgIG1fbGFzdERpc3BsYXlUaW1lID0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgbV9yZXBhaW50U29vblNvdXJjZUlkID0gMDsKIAog
ICAgIC8vIFdlIHVwZGF0ZSB0aGUgSU0gY29udGV4dCB3aW5kb3cgbG9jYXRpb24gaGVyZSwgYmVj
YXVzZSB3ZSB3YW50IGl0IHRvIGJlCiAgICAgLy8gc3luY2VkIHdpdGggY3Vyc29yIG1vdmVtZW50
LiBGb3IgaW5zdGFuY2UsIGEgdGV4dCBmaWVsZCBjYW4gbW92ZSB3aXRob3V0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IGJk
NWM3ZDYuLmYzY2IyYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVnaW9u
LmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwpA
QCAtMTU2LDEwICsxNTcsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXc7IH0KIAogICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgZW1pdENsb3NlV2ViVmlld1NpZ25hbCgpOworCiAgICAgICAgIFdlYktpdFdl
YlZpZXcqIG1fd2ViVmlldzsKICAgICAgICAgR3RrQWRqdXN0bWVudFdhdGNoZXIgbV9hZGp1c3Rt
ZW50V2F0Y2hlcjsKICAgICAgICAgVVJMIG1faG92ZXJlZExpbmtVUkw7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBtX2Nsb3NlU29vblRpbWVyOworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV9jbG9z
ZVNvb25UaW1lcjsKIAogICAgICAgICBUaW1lciA8Q2hyb21lQ2xpZW50PiBtX2Rpc3BsYXlUaW1l
cjsKICAgICAgICAgYm9vbCBtX2ZvcmNlUGFpbnQ7CkBAIC0xNjcsNyArMTcwLDcgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX3JlY3RzVG9TY3JvbGw7CiAg
ICAgICAgIFZlY3RvcjxJbnRTaXplPiBtX3Njcm9sbE9mZnNldHM7CiAgICAgICAgIGRvdWJsZSBt
X2xhc3REaXNwbGF5VGltZTsKLSAgICAgICAgdW5zaWduZWQgaW50IG1fcmVwYWludFNvb25Tb3Vy
Y2VJZDsKKyAgICAgICAgR01haW5Mb29wU291cmNlIG1fcmVwYWludFNvb25Tb3VyY2U7CiAKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX2Z1bGxT
Y3JlZW5FbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvR3RrQWRqdXN0bWVudFdhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvR3RrQWRqdXN0bWVudFdhdGNoZXIuY3BwCmluZGV4IDgyNTg1MDYuLjM3NzQ2NDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0d0a0FkanVzdG1lbnRX
YXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HdGtBZGp1
c3RtZW50V2F0Y2hlci5jcHAKQEAgLTM0LDE0ICszNCwxMSBAQCBHdGtBZGp1c3RtZW50V2F0Y2hl
cjo6R3RrQWRqdXN0bWVudFdhdGNoZXIoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICA6IG1f
d2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9zY3JvbGxiYXJzRGlzYWJsZWQoZmFsc2UpCiAgICAg
LCBtX2hhbmRsaW5nR3RrQWRqdXN0bWVudENoYW5nZShmYWxzZSkKLSAgICAsIG1fdXBkYXRlQWRq
dXN0bWVudENhbGxiYWNrSWQoMCkKIHsKIH0KIAogR3RrQWRqdXN0bWVudFdhdGNoZXI6On5HdGtB
ZGp1c3RtZW50V2F0Y2hlcigpCiB7Ci0gICAgaWYgKG1fdXBkYXRlQWRqdXN0bWVudENhbGxiYWNr
SWQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3VwZGF0ZUFkanVzdG1lbnRDYWxsYmFja0lk
KTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlQWRqdXN0bWVudEZyb21TY3JvbGxiYXIoR3RrQWRq
dXN0bWVudCogYWRqdXN0bWVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCkBAIC02OCwzMCArNjUs
MjAgQEAgdm9pZCBHdGtBZGp1c3RtZW50V2F0Y2hlcjo6dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Ny
b2xsYmFycygpCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBjb3JlKG1fd2ViVmlldyktPm1h
aW5GcmFtZSgpLnZpZXcoKTsKICAgICB1cGRhdGVBZGp1c3RtZW50RnJvbVNjcm9sbGJhcihtX2hv
cml6b250YWxBZGp1c3RtZW50LmdldCgpLCBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIo
KSk7CiAgICAgdXBkYXRlQWRqdXN0bWVudEZyb21TY3JvbGxiYXIobV92ZXJ0aWNhbEFkanVzdG1l
bnQuZ2V0KCksIGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSk7Ci0gICAgaWYgKG1fdXBk
YXRlQWRqdXN0bWVudENhbGxiYWNrSWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdXBk
YXRlQWRqdXN0bWVudENhbGxiYWNrSWQpOwotICAgICAgICBtX3VwZGF0ZUFkanVzdG1lbnRDYWxs
YmFja0lkID0gMDsKLSAgICB9Ci19Ci0KLWdib29sZWFuIEd0a0FkanVzdG1lbnRXYXRjaGVyOjp1
cGRhdGVBZGp1c3RtZW50Q2FsbGJhY2soR3RrQWRqdXN0bWVudFdhdGNoZXIqIHdhdGNoZXIpCi17
Ci0gICAgd2F0Y2hlci0+bV91cGRhdGVBZGp1c3RtZW50Q2FsbGJhY2tJZCA9IDA7Ci0gICAgd2F0
Y2hlci0+dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFycygpOwotICAgIHJldHVybiBGQUxT
RTsKKyAgICBtX3VwZGF0ZUFkanVzdG1lbnRDYWxsYmFjay5jYW5jZWwoKTsKIH0KIAogdm9pZCBH
dGtBZGp1c3RtZW50V2F0Y2hlcjo6dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVy
KCkgY29uc3QKIHsKICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNjaGVkdWxlZCBhbiB1cGRhdGUuIE5v
IG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlci4KLSAgICBpZiAobV91cGRhdGVBZGp1c3RtZW50Q2Fs
bGJhY2tJZCB8fCBtX3Njcm9sbGJhcnNEaXNhYmxlZCkKKyAgICBpZiAobV91cGRhdGVBZGp1c3Rt
ZW50Q2FsbGJhY2suaXNTY2hlZHVsZWQoKSB8fCBtX3Njcm9sbGJhcnNEaXNhYmxlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGlzIG1ldGhvZCB3YXMgY2FsbGVk
IG1lYW5zIHRoYXQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHNjcm9sbGJhcnMsIGJ1dCBhdCB0aGUK
ICAgICAvLyB0aW1lIG9mIGludm9jYXRpb24gdGhleSBhcmUgbm90IHVwZGF0ZWQgdG8gcmVmbGVj
dCB0aGUgc2Nyb2xsIHlldC4gV2Ugc2V0IGEgc2hvcnQgdGltZW91dAogICAgIC8vIGhlcmUsIHdo
aWNoIG1lYW5zIHRoYXQgdGhleSB3aWxsIGJlIHVwZGF0ZWQgYXMgc29vbiBhcyBXZWJLaXQgcmV0
dXJucyB0byB0aGUgbWFpbiBsb29wLgotICAgIG1fdXBkYXRlQWRqdXN0bWVudENhbGxiYWNrSWQg
PSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCByZWludGVycHJldF9jYXN0PEdT
b3VyY2VGdW5jPih1cGRhdGVBZGp1c3RtZW50Q2FsbGJhY2spLAotICAgICAgICBjb25zdF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4odGhpcykpLCAwKTsKKyAgICBtX3VwZGF0
ZUFkanVzdG1lbnRDYWxsYmFjay5zY2hlZHVsZSgiW1dlYktpdF0gR3RrQWRqdXN0bWVudFdhdGNo
ZXI6OnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnMiLAorICAgICAgICBzdGQ6OmJpbmQo
Jkd0a0FkanVzdG1lbnRXYXRjaGVyOjp1cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzLCBj
b25zdF9jYXN0PEd0a0FkanVzdG1lbnRXYXRjaGVyKj4oc3RhdGljX2Nhc3Q8Y29uc3QgR3RrQWRq
dXN0bWVudFdhdGNoZXIqPih0aGlzKSkpKTsKIH0KIAogc3RhdGljIHZvaWQgYWRqdXN0bWVudFZh
bHVlQ2hhbmdlZENhbGxiYWNrKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIEd0a0FkanVzdG1l
bnRXYXRjaGVyKiB3YXRjaGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvR3RrQWRqdXN0bWVudFdhdGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0d0a0FkanVzdG1lbnRXYXRjaGVyLmgKaW5kZXggZTU2OWNkYy4uODIwOTdiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvR3RrQWRqdXN0bWVu
dFdhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HdGtBZGp1
c3RtZW50V2F0Y2hlci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIEd0a0FkanVzdG1lbnRX
YXRjaGVyX2gKIAogI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HTWFpbkxvb3BTb3VyY2UuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2Vi
S2l0V2ViVmlldzsKIApAQCAtNTAsNyArNTEsNyBAQCBwcml2YXRlOgogICAgIEdSZWZQdHI8R3Rr
QWRqdXN0bWVudD4gbV92ZXJ0aWNhbEFkanVzdG1lbnQ7CiAgICAgYm9vbCBtX3Njcm9sbGJhcnNE
aXNhYmxlZDsKICAgICBib29sIG1faGFuZGxpbmdHdGtBZGp1c3RtZW50Q2hhbmdlOwotICAgIG11
dGFibGUgdW5zaWduZWQgbV91cGRhdGVBZGp1c3RtZW50Q2FsbGJhY2tJZDsKKyAgICBtdXRhYmxl
IEdNYWluTG9vcFNvdXJjZSBtX3VwZGF0ZUFkanVzdG1lbnRDYWxsYmFjazsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2MzAxODEzLi4z
MTUzODcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBA
IC01MzE3LDE0ICs1MzE3LDYgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xlYXJfcmVzb3VyY2Vz
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgICAgIGdfaGFzaF90YWJsZV9yZW1vdmVfYWxs
KHByaXYtPnN1YlJlc291cmNlcy5nZXQoKSk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBjbGVhbnVw
VGVtcG9yYXJpbHlDYWNoZWRTdWJyZXNvdXJjZXMoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBHTGlz
dCogc3ViUmVzb3VyY2VzID0gc3RhdGljX2Nhc3Q8R0xpc3QqPihkYXRhKTsKLSAgICBnX2xpc3Rf
Zm9yZWFjaChzdWJSZXNvdXJjZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+KGdfb2JqZWN0X3Vu
cmVmKSwgTlVMTCk7Ci0gICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKLSAgICByZXR1cm4g
RkFMU0U7Ci19Ci0KIEdMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CkBAIC01MzM5LDggKzUzMzEsMTEgQEAgR0xpc3Qq
IHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiAgICAgICAgIHN1YlJlc291cmNlcyA9IGdfbGlzdF9hcHBlbmQoc3ViUmVzb3VyY2VzLCB3ZWJS
ZXNvdXJjZSk7CiAgICAgfQogCi0gICAgaWYgKHN1YlJlc291cmNlcykKLSAgICAgICAgZ190aW1l
b3V0X2FkZCgxLCBjbGVhbnVwVGVtcG9yYXJpbHlDYWNoZWRTdWJyZXNvdXJjZXMsIGdfbGlzdF9j
b3B5KHN1YlJlc291cmNlcykpOworICAgIGlmIChzdWJSZXNvdXJjZXMpIHsKKyAgICAgICAgR0xp
c3QqIGNvcGllZExpc3QgPSBnX2xpc3RfY29weShzdWJSZXNvdXJjZXMpOworICAgICAgICBHTWFp
bkxvb3BTb3VyY2U6OmNyZWF0ZSgpLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gY2xlYW51
cFRlbXBvcmFyaWx5Q2FjaGVkU3VicmVzb3VyY2VzIiwKKyAgICAgICAgICAgIFtjb3BpZWRMaXN0
XSgpIHsgZ19saXN0X2ZyZWVfZnVsbChjb3BpZWRMaXN0LCBnX29iamVjdF91bnJlZik7IH0sIHN0
ZDo6Y2hyb25vOjpzZWNvbmRzKDEpKTsKKyAgICB9CiAKICAgICByZXR1cm4gc3ViUmVzb3VyY2Vz
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGFlNDI5Y2QuLjkwMTgwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSAr
MSw0MSBAQAogMjAxNC0wMy0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKKyAgICAgICAgW0dMSUJdIEFkZCBHTWFpbkxvb3BTb3VyY2UgY2xhc3MgdG8gd3Jh
cCBpZGxlIGFuZCB0aW1lb3V0IHNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlIEdNYWluTG9vcFNvdXJjZSB0byBzY2hlZHVsZSBpZGxlIGFu
ZCB0aW1lb3V0IHNvdXJjZXMuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Xb3JrUXVldWUuaDoKKyAg
ICAgICAgKiBQbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOiBTdG9wIHByZXRlbmRpbmcgaXQncworICAg
ICAgICBwb3NzaWJsZSB0byByZWdpc3RlciBhIHNvY2tldCBldmVudCBoYW5kbGVyIGZvciBtb3Jl
IHRoYW4gb25lCisgICAgICAgIGRlc2NyaXB0b3IuCisgICAgICAgIChXb3JrUXVldWU6OnVucmVn
aXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6
CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIpOgorICAgICAgICAqIFNoYXJlZC9E
b3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9h
ZENsaWVudDo6RG93bmxvYWRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZENsaWVu
dDo6fkRvd25sb2FkQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRDbGllbnQ6OmRp
ZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRDbGllbnQ6OmhhbmRsZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRDbGllbnQ6OmhhbmRsZVJlc3BvbnNl
TGF0ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5JbmZvQ2FjaGU6OlBsdWdpbkluZm9DYWNoZSk6
CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6flBsdWdpbkluZm9DYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6dXBkYXRlUGx1Z2luSW5mbyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RHdGs6OkxheWVyVHJlZUhvc3RHdGspOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0R3RrOjpsYXllckZsdXNoVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RHdGs6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RHdGs6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaDoKKworMjAxNC0wMy0xMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10g
V2ViS2l0MldlYkV4dGVuc2lvbiBHSVIgY2FuJ3QgYmUgdXNlZCBpbiB2YWxhCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcxNzkKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaAppbmRleCBlMzIyZjU5Li5lNjU5NjU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaApAQCAtNDYsOCArNDYsOCBAQAogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHVEspCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CiAjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotdHlwZWRlZiBnYm9vbGVhbiAoKkdTb3VyY2VG
dW5jKSAoZ3BvaW50ZXIgZGF0YSk7CiAjZWxpZiBQTEFURk9STShFRkwpCiAjaW5jbHVkZSA8RGlz
cGF0Y2hRdWV1ZUVmbC5oPgogI2VuZGlmCkBAIC04MCwxOSArODAsMTQgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBleGVjdXRlRnVuY3Rpb24odm9pZCopOwogICAgIGRpc3BhdGNoX3F1ZXVl
X3QgbV9kaXNwYXRjaFF1ZXVlOwogI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIGNsYXNzIEV2ZW50
U291cmNlOwotICAgIGNsYXNzIFNvY2tldEV2ZW50U291cmNlOwotCiAgICAgc3RhdGljIHZvaWQg
c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7CiAgICAgdm9pZCB3b3JrUXVldWVUaHJl
YWRCb2R5KCk7Ci0gICAgdm9pZCBkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+LCBHU291cmNlRnVuYyk7CiAKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29y
a1F1ZXVlVGhyZWFkOwogICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4dDsK
ICAgICBNdXRleCBtX2V2ZW50TG9vcExvY2s7CiAgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZl
bnRMb29wOwotICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKLSAgICBIYXNoTWFwPGludCwg
VmVjdG9yPFNvY2tldEV2ZW50U291cmNlKj4+IG1fZXZlbnRTb3VyY2VzOworICAgIEdNYWluTG9v
cFNvdXJjZSBtX3NvY2tldEV2ZW50U291cmNlOwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIFJl
ZlB0cjxEaXNwYXRjaFF1ZXVlPiBtX2Rpc3BhdGNoUXVldWU7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5kZXggZGNkZGM3Zi4uMDRjNDJk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAg
LTI5LDg4ICsyOSw3IEBACiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAKICNpbmNsdWRlIDxnaW8v
Z2lvLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KIAotLy8gV29ya1F1ZXVlOjpFdmVudFNvdXJjZQotY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNv
dXJjZSB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRTb3VyY2Uoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1
bmN0aW9uLCBXb3JrUXVldWUqIHdvcmtRdWV1ZSkKLSAgICAgICAgOiBtX2Z1bmN0aW9uKHN0ZDo6
bW92ZShmdW5jdGlvbikpCi0gICAgICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHdvcmtRdWV1ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+RXZlbnRT
b3VyY2UoKSB7IH0KLQotICAgIHZvaWQgcGVyZm9ybVdvcmsoKQotICAgIHsKLSAgICAgICAgbV9m
dW5jdGlvbigpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29ya09uY2Uo
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291
cmNlKTsKLSAgICAgICAgZXZlbnRTb3VyY2UtPnBlcmZvcm1Xb3JrKCk7Ci0gICAgICAgIHJldHVy
biBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkZWxldGVFdmVudFNvdXJjZShFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBBU1NFUlQoZXZlbnRTb3VyY2Up
OwotICAgICAgICBkZWxldGUgZXZlbnRTb3VyY2U7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV9mdW5jdGlvbjsKLSAgICBSZWZQdHI8V29ya1F1ZXVlPiBt
X3dvcmtRdWV1ZTsKLX07Ci0KLWNsYXNzIFdvcmtRdWV1ZTo6U29ja2V0RXZlbnRTb3VyY2UgOiBw
dWJsaWMgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgU29ja2V0RXZlbnRT
b3VyY2Uoc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3b3JrUXVl
dWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY2xv
c2VGdW5jdGlvbikKLSAgICAgICAgOiBFdmVudFNvdXJjZShzdGQ6Om1vdmUoZnVuY3Rpb24pLCB3
b3JrUXVldWUpCi0gICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKLSAgICAgICAg
LCBtX2Nsb3NlRnVuY3Rpb24oc3RkOjptb3ZlKGNsb3NlRnVuY3Rpb24pKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGNhbmNlbGxhYmxlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbmNlbCgpCi0gICAg
ewotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGRpZENsb3NlKCkKLSAgICB7Ci0gICAgICAgIG1fY2xvc2VGdW5jdGlvbigpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBldmVudENhbGxiYWNrKEdTb2NrZXQqIHNvY2tl
dCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgU29ja2V0RXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLQotICAgICAgICBpZiAoY29u
ZGl0aW9uICYgR19JT19IVVAgfHwgY29uZGl0aW9uICYgR19JT19FUlIpIHsKLSAgICAgICAgICAg
IGV2ZW50U291cmNlLT5kaWRDbG9zZSgpOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdfSU9fSU4pIHsKLSAgICAgICAgICAg
IGV2ZW50U291cmNlLT5wZXJmb3JtV29yaygpOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBFdmVudFNvdXJjZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJl
dHVybiBGQUxTRSB0byBkZXN0cm95IHRoZSBzb3VyY2UuCi0gICAgICAgIHJldHVybiBGQUxTRTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOwotICAg
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV9jbG9zZUZ1bmN0aW9uOwotfTsKLQotLy8gV29ya1F1
ZXVlCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQgPSAz
MTsKIAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1l
KQpAQCAtMTYyLDY5ICs4MSwzOCBAQCB2b2lkIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9k
eSgpCiB2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVE
ZXNjcmlwdG9yLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+IGNsb3NlRnVuY3Rpb24pCiB7CiAgICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQg
PSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKLSAg
ICBBU1NFUlQoc29ja2V0KTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUg
PSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBk
aXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5n
ZXQoKSwgR19JT19JTiwgY2FuY2VsbGFibGUuZ2V0KCkpKTsKLSAgICBBU1NFUlQoZGlzcGF0Y2hT
b3VyY2UpOwotICAgIFNvY2tldEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBTb2NrZXRF
dmVudFNvdXJjZShzdGQ6Om1vdmUoZnVuY3Rpb24pLCB0aGlzLAotICAgICAgICBjYW5jZWxsYWJs
ZS5nZXQoKSwgc3RkOjptb3ZlKGNsb3NlRnVuY3Rpb24pKTsKLQotICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4oJldvcmtRdWV1ZTo6U29ja2V0RXZlbnRTb3VyY2U6OmV2ZW50Q2FsbGJhY2spLAotICAgICAg
ICBldmVudFNvdXJjZSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhl
IGV2ZW50IHNvdXJjZXMgdW5kZXIgdGhlIG11dGV4IHNpbmNlIHRoaXMgaXMgc2hhcmVkIGFjcm9z
cyBtdWx0aXBsZSB0aHJlYWRzLgotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
ZXZlbnRTb3VyY2VzTG9jayk7Ci0gICAgICAgIFZlY3RvcjxTb2NrZXRFdmVudFNvdXJjZSo+IHNv
dXJjZXM7Ci0gICAgICAgIGF1dG8gaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlw
dG9yKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKQotICAgICAgICAg
ICAgc291cmNlcyA9IGl0LT52YWx1ZTsKLQotICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNv
dXJjZSk7Ci0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNl
cyk7Ci0gICAgfQotCi0gICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBt
X2V2ZW50Q29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29j
a2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKLXsKLSAgICBBU1NFUlQoZmlsZURl
c2NyaXB0b3IpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTG9jayk7
Ci0KLSAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsK
LSAgICBhdXRvIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7Ci0KLSAg
ICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPFNvY2tl
dEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT52YWx1ZTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBzb3VyY2VzW2ld
LT5jYW5jZWwoKTsKLQotICAgICAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUoaXQpOwotICAgIH0K
KyAgICByZWYoKTsKKyAgICBtX3NvY2tldEV2ZW50U291cmNlLnNjaGVkdWxlKCJbV2ViS2l0XSBX
b3JrUXVldWU6OlNvY2tldEV2ZW50SGFuZGxlciIsIFtmdW5jdGlvbiwgY2xvc2VGdW5jdGlvbl0o
R0lPQ29uZGl0aW9uIGNvbmRpdGlvbikgeworICAgICAgICBpZiAoY29uZGl0aW9uICYgR19JT19I
VVAgfHwgY29uZGl0aW9uICYgR19JT19FUlIpIHsKKyAgICAgICAgICAgIGNsb3NlRnVuY3Rpb24o
KTsKKyAgICAgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdfSU9fSU4pIHsKKyAgICAgICAgICAgIGZ1bmN0aW9u
KCk7CisgICAgICAgICAgICByZXR1cm4gR01haW5Mb29wU291cmNlOjpDb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBFdmVudFNvdXJjZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJldHVybiBm
YWxzZSB0byBkZXN0cm95IHRoZSBzb3VyY2UuCisgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3Vy
Y2U6OlN0b3A7CisgICAgICAgIH0sIHNvY2tldC5nZXQoKSwgR19JT19JTiwKKyAgICAgICAgW3Ro
aXNdKCkgeyBkZXJlZigpOyB9LAorICAgICAgICBtX2V2ZW50Q29udGV4dC5nZXQoKSk7CiB9CiAK
LXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqIGRpc3BhdGNoU291cmNl
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBHU291cmNlRnVuYyBzb3VyY2VDYWxs
YmFjaykKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCkK
IHsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxi
YWNrLCBuZXcgRXZlbnRTb3VyY2Uoc3RkOjptb3ZlKGZ1bmN0aW9uKSwgdGhpcyksCi0gICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNl
OjpkZWxldGVFdmVudFNvdXJjZSkpOwotCi0gICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291
cmNlLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7CisgICAgbV9zb2NrZXRFdmVudFNvdXJjZS5jYW5j
ZWwoKTsKIH0KIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZnVuY3Rpb24pCiB7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFk
b3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKLSAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHko
ZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0gICAgZGlzcGF0Y2hP
blNvdXJjZShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgc3RkOjptb3ZlKGZ1bmN0aW9uKSwKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OnBlcmZvcm1Xb3JrT25jZSkpOworICAgIHJlZigpOworICAgIEdNYWluTG9vcFNvdXJjZTo6Y3Jl
YXRlKCkuc2NoZWR1bGUoIltXZWJLaXRdIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1X
b3JrT25jZSIsIHN0ZDo6bW92ZShmdW5jdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAg
ICAgW3RoaXNdKCkgeyBkZXJlZigpOyB9LCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7CiB9CiAKIHZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJh
dGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKIHsKLSAgICBHUmVmUHRyPEdT
b3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KAot
ICAgICAgICBzdGF0aWNfY2FzdDxndWludD4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oZHVyYXRpb24pLmNvdW50KCkpKSk7Ci0gICAgZGlzcGF0
Y2hPblNvdXJjZShkaXNwYXRjaFNvdXJjZS5nZXQoKSwgc3RkOjptb3ZlKGZ1bmN0aW9uKSwKLSAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3Vy
Y2U6OnBlcmZvcm1Xb3JrT25jZSkpOworICAgIHJlZigpOworICAgIEdNYWluTG9vcFNvdXJjZTo6
Y3JlYXRlKCkuc2NoZWR1bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBXb3JrUXVldWU6OkV2ZW50U291
cmNlOjpwZXJmb3JtV29ya09uY2UiLCBzdGQ6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihkdXJhdGlv
biksIEdfUFJJT1JJVFlfREVGQVVMVCwgW3RoaXNdKCkgeyBkZXJlZigpOyB9LCBtX2V2ZW50Q29u
dGV4dC5nZXQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxv
YWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9h
ZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmluZGV4IDQwN2U0NDcuLmRlZjhiNTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAu
Y3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgogI2luY2x1ZGUg
PGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Vu
aXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTQ5LDE0ICs1MCwx
MSBAQCBjbGFzcyBEb3dubG9hZENsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7
CiBwdWJsaWM6CiAgICAgRG93bmxvYWRDbGllbnQoRG93bmxvYWQqIGRvd25sb2FkKQogICAgICAg
ICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCi0gICAgICAgICwgbV9oYW5kbGVSZXNwb25zZUxhdGVy
SUQoMCkKICAgICB7CiAgICAgfQogCiAgICAgfkRvd25sb2FkQ2xpZW50KCkKICAgICB7Ci0gICAg
ICAgIGlmIChtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCkKLSAgICAgICAgICAgIGdfc291cmNlX3Jl
bW92ZShtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCk7CiAgICAgfQogCiAgICAgdm9pZCBkZWxldGVJ
bnRlcm1lZGlhdGVGaWxlSW5OZWVkZWQoKQpAQCAtMTE3LDggKzExNSw4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8pCiAgICAgewotICAg
ICAgICBpZiAobV9oYW5kbGVSZXNwb25zZUxhdGVySUQpIHsKLSAgICAgICAgICAgIGdfc291cmNl
X3JlbW92ZShtX2hhbmRsZVJlc3BvbnNlTGF0ZXJJRCk7CisgICAgICAgIGlmIChtX2hhbmRsZVJl
c3BvbnNlTGF0ZXIuaXNTY2hlZHVsZWQoKSkgeworICAgICAgICAgICAgbV9oYW5kbGVSZXNwb25z
ZUxhdGVyLmNhbmNlbCgpOwogICAgICAgICAgICAgaGFuZGxlUmVzcG9uc2UoKTsKICAgICAgICAg
fQogCkBAIC0xNzcsMjYgKzE3NSwxOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhhbmRsZVJlc3Bv
bnNlKCkKICAgICB7Ci0gICAgICAgIG1faGFuZGxlUmVzcG9uc2VMYXRlcklEID0gMDsKLSAgICAg
ICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIG1fZGVsYXllZFJlc3BvbnNlKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZ2Jvb2xlYW4gaGFuZGxlUmVzcG9uc2VMYXRlckNhbGxiYWNrKERvd25sb2FkQ2xp
ZW50KiBkb3dubG9hZENsaWVudCkKLSAgICB7Ci0gICAgICAgIGRvd25sb2FkQ2xpZW50LT5oYW5k
bGVSZXNwb25zZSgpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIGRpZFJlY2VpdmVS
ZXNwb25zZShudWxscHRyLCBtX2RlbGF5ZWRSZXNwb25zZSk7CiAgICAgfQogCiAgICAgdm9pZCBo
YW5kbGVSZXNwb25zZUxhdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fcmVzcG9uc2UuaXNOdWxsKCkpOwotICAgICAgICBBU1NFUlQo
IW1faGFuZGxlUmVzcG9uc2VMYXRlcklEKTsKKyAgICAgICAgQVNTRVJUKCFtX2hhbmRsZVJlc3Bv
bnNlTGF0ZXIuaXNTY2hlZHVsZWQoKSk7CiAKICAgICAgICAgbV9kZWxheWVkUmVzcG9uc2UgPSBy
ZXNwb25zZTsKIAogICAgICAgICAvLyBDYWxsIGRpZFJlY2VpdmVSZXNwb25zZSBpbiBhbiBpZGxl
IHRvIG1ha2Ugc3VyZSB0aGUgZG93bmxvYWQgaXMgYWRkZWQKICAgICAgICAgLy8gdG8gdGhlIERv
d25sb2FkTWFuYWdlciBkb3dubG9hZHMgbWFwLgotICAgICAgICBtX2hhbmRsZVJlc3BvbnNlTGF0
ZXJJRCA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZVJlc3BvbnNlTGF0ZXJDYWxsYmFjayksIHRoaXMsIDApOwor
ICAgICAgICBtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuc2NoZWR1bGUoIltXZWJLaXRdIERvd25sb2Fk
SGFuZGxlUmVzcG9uc2VMYXRlciIsIHN0ZDo6YmluZCgmRG93bmxvYWRDbGllbnQ6OmhhbmRsZVJl
c3BvbnNlLCB0aGlzKSk7CiAgICAgfQogCiAgICAgRG93bmxvYWQqIG1fZG93bmxvYWQ7CkBAIC0y
MDUsNyArMTk2LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBtX2Rlc3RpbmF0aW9uVVJJOwogICAg
IEdSZWZQdHI8R0ZpbGU+IG1faW50ZXJtZWRpYXRlRmlsZTsKICAgICBSZXNvdXJjZVJlc3BvbnNl
IG1fZGVsYXllZFJlc3BvbnNlOwotICAgIHVuc2lnbmVkIG1faGFuZGxlUmVzcG9uc2VMYXRlcklE
OworICAgIEdNYWluTG9vcFNvdXJjZSBtX2hhbmRsZVJlc3BvbnNlTGF0ZXI7CiB9OwogCiB2b2lk
IERvd25sb2FkOjpzdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCmluZGV4IDcyZTQ1MTQuLjRkNjM0MDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5J
bmZvQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9Q
bHVnaW5JbmZvQ2FjaGUuY3BwCkBAIC00NSw3ICs0NSw2IEBAIFBsdWdpbkluZm9DYWNoZSYgUGx1
Z2luSW5mb0NhY2hlOjpzaGFyZWQoKQogUGx1Z2luSW5mb0NhY2hlOjpQbHVnaW5JbmZvQ2FjaGUo
KQogICAgIDogbV9jYWNoZUZpbGUoZ19rZXlfZmlsZV9uZXcoKSkKICAgICAsIG1fY2FjaGVQYXRo
KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9jYWNoZV9kaXIoKSwgIndlYmtpdGd0ayIsICJw
bHVnaW5zIiwgbnVsbHB0cikpCi0gICAgLCBtX3NhdmVUb0ZpbGVJZGxlSWQoMCkKIHsKICAgICBn
X2tleV9maWxlX2xvYWRfZnJvbV9maWxlKG1fY2FjaGVGaWxlLmdldCgpLCBtX2NhY2hlUGF0aC5n
ZXQoKSwgR19LRVlfRklMRV9OT05FLCBudWxscHRyKTsKIApAQCAtNjMsMjIgKzYyLDE1IEBAIFBs
dWdpbkluZm9DYWNoZTo6UGx1Z2luSW5mb0NhY2hlKCkKIAogUGx1Z2luSW5mb0NhY2hlOjp+UGx1
Z2luSW5mb0NhY2hlKCkKIHsKLSAgICBpZiAobV9zYXZlVG9GaWxlSWRsZUlkKSB7Ci0gICAgICAg
IGdfc291cmNlX3JlbW92ZShtX3NhdmVUb0ZpbGVJZGxlSWQpOworICAgIGlmIChtX3NhdmVUb0Zp
bGVJZGxlLmlzU2NoZWR1bGVkKCkpIHsKKyAgICAgICAgbV9zYXZlVG9GaWxlSWRsZS5jYW5jZWwo
KTsKICAgICAgICAgc2F2ZVRvRmlsZSgpOwogICAgIH0KIH0KIAotZ2Jvb2xlYW4gUGx1Z2luSW5m
b0NhY2hlOjpzYXZlVG9GaWxlSWRsZUNhbGxiYWNrKFBsdWdpbkluZm9DYWNoZSogY2FjaGUpCi17
Ci0gICAgY2FjaGUtPnNhdmVUb0ZpbGUoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KIHZvaWQg
UGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9GaWxlKCkKIHsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3Rk
OjptdXRleD4gbG9jayhtX211dGV4KTsKLSAgICBtX3NhdmVUb0ZpbGVJZGxlSWQgPSAwOwogCiAg
ICAgZ3NpemUgZGF0YUxlbmd0aDsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRhdGEoZ19rZXlfZmls
ZV90b19kYXRhKG1fY2FjaGVGaWxlLmdldCgpLCAmZGF0YUxlbmd0aCwgbnVsbHB0cikpOwpAQCAt
MTMzLDEwICsxMjUsMTAgQEAgdm9pZCBQbHVnaW5JbmZvQ2FjaGU6OnVwZGF0ZVBsdWdpbkluZm8o
Y29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjb25zdCBQbHVnaW5Nb2QKICAgICAvLyBTYXZlIHRo
ZSBjYWNoZSBmaWxlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIGl0IGhhcHBlbnMgaW4gdGhlIG1h
aW4gdGhyZWFkIGFuZAogICAgIC8vIGl0J3MgZG9uZSBvbmx5IG9uY2Ugd2hlbiB0aGlzIGlzIGNh
bGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHZlcnkgc2hvcnQgdGltZS4KICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKLSAgICBpZiAobV9zYXZlVG9GaWxlSWRs
ZUlkKQorICAgIGlmIChtX3NhdmVUb0ZpbGVJZGxlLmlzU2NoZWR1bGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fc2F2ZVRvRmlsZUlkbGVJZCA9IGdfaWRsZV9hZGQocmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oUGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9GaWxlSWRsZUNhbGxiYWNr
KSwgdGhpcyk7CisgICAgbV9zYXZlVG9GaWxlSWRsZS5zY2hlZHVsZSgiW1dlYktpdF0gUGx1Z2lu
SW5mb0NhY2hlOjpzYXZlVG9GaWxlIiwgc3RkOjpiaW5kKCZQbHVnaW5JbmZvQ2FjaGU6OnNhdmVU
b0ZpbGUsIHRoaXMpLCBHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrL1BsdWdpbkluZm9DYWNoZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrL1BsdWdpbkluZm9DYWNoZS5oCmluZGV4IDMyNzJkYzAuLmRmMmIyOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hl
LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW5j
bHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Vu
aXF1ZVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ5LDExICs1MCwxMCBAQCBwcml2
YXRlOgogICAgIH5QbHVnaW5JbmZvQ2FjaGUoKTsKIAogICAgIHZvaWQgc2F2ZVRvRmlsZSgpOwot
ICAgIHN0YXRpYyBnYm9vbGVhbiBzYXZlVG9GaWxlSWRsZUNhbGxiYWNrKFBsdWdpbkluZm9DYWNo
ZSopOwogCiAgICAgR1VuaXF1ZVB0cjxHS2V5RmlsZT4gbV9jYWNoZUZpbGU7CiAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBtX2NhY2hlUGF0aDsKLSAgICB1bnNpZ25lZCBtX3NhdmVUb0ZpbGVJZGxlSWQ7
CisgICAgR01haW5Mb29wU291cmNlIG1fc2F2ZVRvRmlsZUlkbGU7CiAgICAgc3RkOjptdXRleCBt
X211dGV4OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKaW5kZXggMzRmMGMxMi4uNDBjNGU1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRy
ZWVIb3N0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L0xheWVyVHJlZUhvc3RHdGsuY3BwCkBAIC03NCw3ICs3NCw2IEBAIExheWVyVHJlZUhvc3RHdGs6
OkxheWVyVHJlZUhvc3RHdGsoV2ViUGFnZSogd2ViUGFnZSkKICAgICAsIG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQogICAgICwgbV9sYXN0Rmx1c2hUaW1lKDApCiAgICAg
LCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQotICAgICwgbV9sYXllckZsdXNo
VGltZXJDYWxsYmFja0lkKDApCiB7CiB9CiAKQEAgLTI5MiwyNCArMjkxLDE1IEBAIHZvaWQgTGF5
ZXJUcmVlSG9zdEd0azo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyLCBHcmFwaGljCiAgICAgfQogfQogCi1nYm9vbGVhbiBMYXllclRyZWVIb3N0R3RrOjps
YXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKExheWVyVHJlZUhvc3RHdGsqIGxheWVyVHJlZUhv
c3QpCi17Ci0gICAgbGF5ZXJUcmVlSG9zdC0+bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKLSAgICBy
ZXR1cm4gRkFMU0U7Ci19Ci0KIHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQoKQogewotICAgIEFTU0VSVChtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpOwotICAg
IG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IDA7Ci0KICAgICBmbHVzaEFuZFJlbmRlckxh
eWVycygpOwogCi0gICAgaWYgKHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgp
KS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSAmJiAhbV9sYXllckZs
dXNoVGltZXJDYWxsYmFja0lkKSB7CisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNr
LmlzU2NoZWR1bGVkKCkgJiYgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkp
LT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKSB7CiAgICAgICAgIGNv
bnN0IGRvdWJsZSB0YXJnZXRGUFMgPSA2MDsKICAgICAgICAgZG91YmxlIG5leHRGbHVzaCA9IHN0
ZDo6bWF4KCgxIC8gdGFyZ2V0RlBTKSAtIChjdXJyZW50VGltZSgpIC0gbV9sYXN0Rmx1c2hUaW1l
KSwgMC4wKTsKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0
X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIG5leHRGbHVzaCAqIDEwMDAuMCwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayksIHRo
aXMsIDApOwotICAgICAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9pZChtX2xheWVyRmx1c2hUaW1l
ckNhbGxiYWNrSWQsICJbV2ViS2l0XSBsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrIik7Cisg
ICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2suc2NoZWR1bGVBZnRlckRlbGF5KCJbV2Vi
S2l0XSBsYXllckZsdXNoVGltZXIiLCBzdGQ6OmJpbmQoJkxheWVyVHJlZUhvc3RHdGs6OmxheWVy
Rmx1c2hUaW1lckZpcmVkLCB0aGlzKSwKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxk
b3VibGU+KG5leHRGbHVzaCkpLCBHREtfUFJJT1JJVFlfRVZFTlRTKTsKICAgICB9CiB9CiAKQEAg
LTQwOCwxMCArMzk4LDggQEAgdm9pZCBMYXllclRyZWVIb3N0R3RrOjpzY2hlZHVsZUxheWVyRmx1
c2goKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSB1c2UgYSBHTGliIHRpbWVyIGJlY2F1
c2Ugb3RoZXJ3aXNlIEdUSysgZXZlbnQgaGFuZGxpbmcgZHVyaW5nIGRyYWdnaW5nIGNhbiBzdGFy
dmUgV2ViQ29yZSB0aW1lcnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0eS4KLSAgICBpZiAo
IW1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCkgewotICAgICAgICBtX2xheWVyRmx1c2hUaW1l
ckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgMCwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFj
ayksIHRoaXMsIDApOwotICAgICAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9pZChtX2xheWVyRmx1
c2hUaW1lckNhbGxiYWNrSWQsICJbV2ViS2l0XSBsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNr
Iik7Ci0gICAgfQorICAgIGlmICghbV9sYXllckZsdXNoVGltZXJDYWxsYmFjay5pc1NjaGVkdWxl
ZCgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrLnNjaGVkdWxlKCJbV2ViS2l0
XSBsYXllckZsdXNoVGltZXIiLCBzdGQ6OmJpbmQoJkxheWVyVHJlZUhvc3RHdGs6OmxheWVyRmx1
c2hUaW1lckZpcmVkLCB0aGlzKSwgR0RLX1BSSU9SSVRZX0VWRU5UUyk7CiB9CiAKIHZvaWQgTGF5
ZXJUcmVlSG9zdEd0azo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCkBAIC00MzYsMTEgKzQyNCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdEd0
azo6cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCkKIAogdm9pZCBMYXllclRyZWVI
b3N0R3RrOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCiB7Ci0gICAgaWYgKCFtX2xheWVyRmx1
c2hUaW1lckNhbGxiYWNrSWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc291cmNlX3JlbW92
ZShtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2Fs
bGJhY2tJZCA9IDA7CisgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFjay5jYW5jZWwoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCmluZGV4IDFjYmNmM2UuLjY1
MzI3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
TGF5ZXJUcmVlSG9zdEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291
cmNlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC05Miw3ICs5Myw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogCiAgICAgdm9pZCBsYXllckZs
dXNoVGltZXJGaXJlZCgpOwotICAgIHN0YXRpYyBnYm9vbGVhbiBsYXllckZsdXNoVGltZXJGaXJl
ZENhbGxiYWNrKExheWVyVHJlZUhvc3RHdGsqKTsKIAogICAgIFdlYkNvcmU6OkdMQ29udGV4dCog
Z2xDb250ZXh0KCk7CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxX
ZWJDb3JlOjpHTENvbnRleHQ+IG1fY29udGV4dDsKICAgICBkb3VibGUgbV9sYXN0Rmx1c2hUaW1l
OwogICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Ci0gICAgdW5zaWduZWQg
bV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkOworICAgIEdNYWluTG9vcFNvdXJjZSBtX2xheWVy
Rmx1c2hUaW1lckNhbGxiYWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226403</attachid>
            <date>2014-03-11 02:29:45 -0700</date>
            <delta_ts>2014-03-14 03:32:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wtf-g-main-loop-source.diff</filename>
            <type>text/plain</type>
            <size>20985</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYmZiZmU1OS4uMDg4MDE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxNC0wMy0xMCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dM
SUJdIEFkZCBHTWFpbkxvb3BTb3VyY2UgY2xhc3MgdG8gd3JhcCBpZGxlIGFuZCB0aW1lb3V0IHNv
dXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
MDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR0xp
YiBtYWluIGxvb3Agc291cmNlcyBsaWtlIGlkbGUgYW5kIHRpbWVvdXRzIGFyZSBzb21ldGltZXMK
KyAgICAgICAgdW5jb252ZW5pZW50IHRvIHVzZSBhbmQgaXQncyB2ZXJ5IGNvbW1vbiB0byBmb3Jn
ZXQgY2FuY2VsaW5nIHRoZQorICAgICAgICBzb3VyY2Ugd2hlbiB0aGUgb2JqZWN0IGlzIGRlc3Ry
b3llZCBvciByZXNldCB0aGUgc291cmNlIElEIGluIHRoZQorICAgICAgICBjYWxsYmFjayB3aGVu
IGNhbGxlZC4gR01haW5Mb29wU291cmNlIGlzIGEgd3JhcHBlciBjbGFzcyB0byBtYWtlIGl0Cisg
ICAgICAgIGVhc2llciB0byBoYW5kbGUgc291cmNlcyBhbmQgYWxzbyB0byBhdm9pZCB0aG9zZSB0
eXBpY2FsIG1pc3Rha2VzLgorICAgICAgICBJdCBmb3JjZXMgdG8gY3JlYXRlIHNvdXJjZXMgd2l0
aCBhIG5hbWUgYW5kIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZQorICAgICAgICB0byBkZWFsIHdpdGgg
dGhlIHNvdXJjZSBJRCBhbnltb3JlLiBUaGUgc291cmNlIGlzIGNhbmNlbGxlZCB3aGVuCisgICAg
ICAgIHRoZSBvYmplY3QgaXMgZGVsZXRlZCBvciB3aGVuIGEgbmV3IHNvdXJjZSBpcyBzY2hlZHVs
ZWQuIEl0IHVzZXMKKyAgICAgICAgc3RkOjpmdW5jdGlvbiBmb3IgY2FsbGJhY2tzIHNvIHRoYXQg
d2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdXNlIHRoZQorICAgICAgICAicHJveHkiIHN0YXRpYyBjYWxs
YmFja3MgZWl0aGVyLiBXZSBjYW4gdXNlIHN0ZDo6YmluZCB0byB1c2UgYQorICAgICAgICBmdW5j
dGlvbiBwb2ludGVyIG9yIGEgbWVtYmVyIG9yIGV2ZW4gbGFtYmRhIGZ1bmN0aW9ucy4gSXQgYWxz
byBoYW5kbGVzCisgICAgICAgIHJlcGVhdGluZyBzb3VyY2VzIGF1dG9tYXRpY2FsbHkgZGVwZW5k
aW5nIG9uIHdoZXRoZXIgdGhlIGdpdmVuCisgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgYSBib29s
IG9yIG5vdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogd3Rm
L1BsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUdUSy5jbWFrZToKKyAg
ICAgICAgKiB3dGYvUnVuTG9vcC5oOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKToKKyAgICAg
ICAgKFdURjo6R01haW5Mb29wU291cmNlOjp+R01haW5Mb29wU291cmNlKToKKyAgICAgICAgKFdU
Rjo6R01haW5Mb29wU291cmNlOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OnJlc2V0KToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUlkbGVT
b3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKToKKyAgICAg
ICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UpOgorICAgICAg
ICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheSk6CisgICAgICAgIChX
VEY6OkdNYWluTG9vcFNvdXJjZTo6dm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5M
b29wU291cmNlOjpib29sQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6
OnNvY2tldENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpkZXN0cm95
KToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjp2b2lkU291cmNlQ2FsbGJhY2spOgor
ICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmJvb2xTb3VyY2VDYWxsYmFjayk6CisgICAg
ICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c29ja2V0U291cmNlQ2FsbGJhY2spOgorICAgICAg
ICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
R01haW5Mb29wU291cmNlOjppc1NjaGVkdWxlZCk6CisgICAgICAgICogd3RmL2d0ay9NYWluVGhy
ZWFkR3RrLmNwcDoKKyAgICAgICAgKFdURjo6c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFp
blRocmVhZCk6CisgICAgICAgICogd3RmL2d0ay9SdW5Mb29wR3RrLmNwcDoKKyAgICAgICAgKFdU
Rjo6UnVuTG9vcDo6d2FrZVVwKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpU
aW1lckJhc2UpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAg
ICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdURjo6UnVu
TG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisKIDIwMTQtMDMtMTAgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wcm92ZSBXZWFrUHRyIG9wZXJhdG9ycy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XVEYv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2NzZhMzAyLi5kNGFkZmU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dURi9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC0yMTIsNiArMjEyLDggQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJj
ZS9XVEYvd3RmL2R0b2Evc3RydG9kLmNjIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3N0cnRv
ZC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmggXAorICAgIFNvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcCBcCisgICAgU291cmNlL1dURi93dGYvZ29i
amVjdC9HTWFpbkxvb3BTb3VyY2UuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0
ZXhMb2NrZXIuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcCBcCiAg
ICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCBiNGUyMTBhLi5kMjYzZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtNCw2ICs0LDcgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBlZmwvUmVmUHRyRWZs
LmNwcAogICAgIGVmbC9SdW5Mb29wRWZsLmNwcAogCisgICAgZ29iamVjdC9HTWFpbkxvb3BTb3Vy
Y2UuY3BwCiAgICAgZ29iamVjdC9HUmVmUHRyLmNwcAogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDcwMjYyZjMuLmQ3MmQ3MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlCkBA
IC0xLDQgKzEsNSBAQAogbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKKyAgICBnb2JqZWN0L0dNYWlu
TG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dSZWZQdHIuY3BwCiAgICAgZ29iamVjdC9HbGli
VXRpbGl0aWVzLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmggYi9T
b3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKaW5kZXggNWVkNmFkMS4uOGJlNTYzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3Au
aApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIFVT
RShHTElCKQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oRUZMKQpA
QCAtOTgsMTEgKzk4LDcgQEAgcHVibGljOgogICAgICAgICBFY29yZV9UaW1lciogbV90aW1lcjsK
ICAgICAgICAgYm9vbCBtX2lzUmVwZWF0aW5nOwogI2VsaWYgVVNFKEdMSUIpCi0gICAgICAgIHN0
YXRpYyBnYm9vbGVhbiB0aW1lckZpcmVkQ2FsbGJhY2soUnVuTG9vcDo6VGltZXJCYXNlKik7Ci0g
ICAgICAgIGdib29sZWFuIGlzUmVwZWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGVhdGlu
ZzsgfQotICAgICAgICB2b2lkIGNsZWFyVGltZXJTb3VyY2UoKTsKLSAgICAgICAgR1JlZlB0cjxH
U291cmNlPiBtX3RpbWVyU291cmNlOwotICAgICAgICBnYm9vbGVhbiBtX2lzUmVwZWF0aW5nOwor
ICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV90aW1lclNvdXJjZTsKICNlbmRpZgogICAgIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzBlNGVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCkBAIC0wLDAgKzEsMjI4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHTWFpbkxvb3BTb3VyY2UuaCIKKworI2luY2x1ZGUgPGdp
by9naW8uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK0dNYWluTG9vcFNvdXJjZSYgR01haW5Mb29w
U291cmNlOjpjcmVhdGUoKQoreworICAgIHJldHVybiAqbmV3IEdNYWluTG9vcFNvdXJjZShEZWxl
dGVPbkRlc3Ryb3kpOworfQorCitHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSgpCisg
ICAgOiBtX2RlbGV0ZU9uRGVzdHJveShEb05vdERlbGV0ZU9uRGVzdHJveSkKK3sKK30KKworR01h
aW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVP
bkRlc3Ryb3kpCisgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCit7Cit9
CisKK0dNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCit7CisgICAgY2FuY2VsKCk7
Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpjYW5jZWwoKQoreworICAgIGlmICghbV9zb3Vy
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NhbmNlbGxhYmxlKSB7CisgICAgICAg
IC8vIENhbmNlbGluZyB0aGUgY2FuY2VsbGFibGUgd2lsbCBtYWtlIHRoZSBzb3VyY2UgY2FsbGJh
Y2sgdG8gYmUgY2FsbGVkCisgICAgICAgIC8vIHNvIHRoZSBzb3VyY2UgaXMgZGVzdHJveWVkIHdo
ZW4gdGhlIGNhbGxiYWNrIHJldHVybnMuCisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1f
Y2FuY2VsbGFibGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ19zb3Vy
Y2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBHTWFp
bkxvb3BTb3VyY2U6OnJlc2V0KCkKK3sKKyAgICBtX3NvdXJjZSA9IG51bGxwdHI7CisgICAgbV9j
YW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgbV92b2lkQ2FsbGJhY2sgPSBudWxscHRyOworICAg
IG1fYm9vbENhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3Qg
Y2hhciogbmFtZSwgR1NvdXJjZUZ1bmMgc291cmNlRnVuY3Rpb24sIGludCBwcmlvcml0eSwgR01h
aW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9z
b3VyY2VfbmV3KCkpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1l
KTsKKyAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUX0lETEUpCisgICAgICAg
IGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworICAgIGdf
c291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMs
IG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7
Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgY2FuY2VsKCk7CisgICAgbV92b2lkQ2FsbGJhY2sgPSBzdGQ6Om1vdmUoZnVuY3Rpb24pOwor
ICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAg
c2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZv
aWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKK30KKwordm9pZCBHTWFpbkxv
b3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAo
KT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95
RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBt
X2Jvb2xDYWxsYmFjayA9IHN0ZDo6bW92ZShmdW5jdGlvbik7CisgICAgbV9kZXN0cm95Q2FsbGJh
Y2sgPSBzdGQ6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBzY2hlZHVsZUlkbGVTb3VyY2Uo
bmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwg
cHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUo
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25kaXRpb24pPiBmdW5j
dGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQorewor
ICAgIGNhbmNlbCgpOworICAgIG1fc29ja2V0Q2FsbGJhY2sgPSBzdGQ6Om1vdmUoZnVuY3Rpb24p
OworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7Cisg
ICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICBt
X3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldCwgY29uZGl0
aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3Vy
Y2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc29ja2V0U291cmNlQ2FsbGJhY2spLCB0
aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRl
eHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291cmNlKGNv
bnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3JpdHks
IEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQobV9zb3VyY2UpOworICAgIGdf
c291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBpZiAocHJpb3JpdHkg
IT0gR19QUklPUklUWV9ERUZBVUxUKQorICAgICAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkobV9z
b3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3Vy
Y2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9h
dHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVsYXksIGludCBwcmlv
cml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihn
X3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgpKSk7CisgICAgbV92b2lkQ2FsbGJhY2sg
PSBzdGQ6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3Zl
KGRlc3Ryb3lGdW5jdGlvbik7CisgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBj
b250ZXh0KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgY2Fu
Y2VsKCk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVs
YXkuY291bnQoKSkpOworICAgIG1fYm9vbENhbGxiYWNrID0gc3RkOjptb3ZlKGZ1bmN0aW9uKTsK
KyAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IHN0ZDo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAg
IHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
Pihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR01h
aW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVsYXksIGlu
dCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWlu
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBtX3NvdXJjZSA9IGFkb3B0
R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsKKyAgICBt
X3ZvaWRDYWxsYmFjayA9IHN0ZDo6bW92ZShmdW5jdGlvbik7CisgICAgbV9kZXN0cm95Q2FsbGJh
Y2sgPSBzdGQ6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBzY2hlZHVsZVRpbWVvdXRTb3Vy
Y2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNr
KSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVu
Y3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7
CisgICAgY2FuY2VsKCk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJj
ZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7CisgICAgbV9ib29sQ2FsbGJhY2sgPSBzdGQ6
Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ry
b3lGdW5jdGlvbik7CisgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0
KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjaygpCit7CisgICAgQVNT
RVJUKG1fdm9pZENhbGxiYWNrKTsKKworICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdl
dCgpOworICAgIG1fdm9pZENhbGxiYWNrKCk7CisgICAgaWYgKHNvdXJjZSA9PSBtX3NvdXJjZS5n
ZXQoKSkKKyAgICAgICAgZGVzdHJveSgpOworfQorCitib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9v
bENhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQobV9ib29sQ2FsbGJhY2spOworCisgICAgR1NvdXJj
ZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7CisgICAgYm9vbCByZXR2YWwgPSBtX2Jvb2xDYWxs
YmFjaygpOworICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKKyAg
ICAgICAgZGVzdHJveSgpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworYm9vbCBHTWFpbkxv
b3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAg
QVNTRVJUKG1fc29ja2V0Q2FsbGJhY2spOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2Fu
Y2VsbGVkKG1fY2FuY2VsbGFibGUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5nZXQoKTsKKyAgICBib29sIHJldHZhbCA9IG1f
c29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKKyAgICBpZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0g
bV9zb3VyY2UuZ2V0KCkpCisgICAgICAgIGRlc3Ryb3koKTsKKworICAgIHJldHVybiByZXR2YWw7
Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KCkKK3sKKyAgICBpZiAobV9kZXN0
cm95Q2FsbGJhY2spCisgICAgICAgIG1fZGVzdHJveUNhbGxiYWNrKCk7CisgICAgcmVzZXQoKTsK
KworICAgIGlmIChtX2RlbGV0ZU9uRGVzdHJveSA9PSBEb05vdERlbGV0ZU9uRGVzdHJveSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK2dib29sZWFuIEdNYWluTG9v
cFNvdXJjZTo6dm9pZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNvdXJjZSogc291cmNlKQorewor
ICAgIHNvdXJjZS0+dm9pZENhbGxiYWNrKCk7CisgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsK
K30KKworZ2Jvb2xlYW4gR01haW5Mb29wU291cmNlOjpib29sU291cmNlQ2FsbGJhY2soR01haW5M
b29wU291cmNlKiBzb3VyY2UpCit7CisgICAgcmV0dXJuIHNvdXJjZS0+Ym9vbENhbGxiYWNrKCkg
PT0gQ29udGludWU7Cit9CisKK2dib29sZWFuIEdNYWluTG9vcFNvdXJjZTo6c29ja2V0U291cmNl
Q2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIEdNYWluTG9vcFNvdXJj
ZSogc291cmNlKQoreworICAgIHJldHVybiBzb3VyY2UtPnNvY2tldENhbGxiYWNrKGNvbmRpdGlv
bikgPT0gQ29udGludWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oIGIvU291cmNlL1dURi93dGYv
Z29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44ZGI1Y2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9H
TWFpbkxvb3BTb3VyY2UuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR01haW5Mb29wU291cmNlX2gKKyNk
ZWZpbmUgR01haW5Mb29wU291cmNlX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3R5
cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBHTWFpbkxvb3BTb3VyY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdNYWluTG9vcFNv
dXJjZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGlj
IEdNYWluTG9vcFNvdXJjZSYgY3JlYXRlKCk7CisKKyAgICBHTWFpbkxvb3BTb3VyY2UoKTsKKyAg
ICB+R01haW5Mb29wU291cmNlKCk7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBTdG9wID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgQ29udGludWUgPSB0cnVlOworCisgICAgYm9vbCBp
c1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgdm9pZCBzY2hlZHVs
ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCBpbnQgcHJpb3JpdHkg
PSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0
aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQgc2NoZWR1
bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiwgaW50IHByaW9yaXR5
ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5j
dGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVk
dWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4s
IEdTb2NrZXQqLCBHSU9Db25kaXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1
bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQgc2No
ZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4s
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVG
QVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBH
TWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXkoY29u
c3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiwgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxs
cHRyKTsKKyAgICB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+LCBzdGQ6OmNocm9ubzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0g
R19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlv
biA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVkdWxl
QWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+LCBzdGQ6
OmNocm9ubzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4
dCogPSBudWxscHRyKTsKKyAgICB2b2lkIGNhbmNlbCgpOworCitwcml2YXRlOgorICAgIGVudW0g
RGVsZXRlT25EZXN0cm95VHlwZSB7IERlbGV0ZU9uRGVzdHJveSwgRG9Ob3REZWxldGVPbkRlc3Ry
b3kgfTsKKyAgICBHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSk7CisKKyAgICB2
b2lkIHJlc2V0KCk7CisgICAgdm9pZCBzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFt
ZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CisgICAgdm9pZCBz
Y2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBw
cmlvcml0eSwgR01haW5Db250ZXh0Kik7CisgICAgdm9pZCB2b2lkQ2FsbGJhY2soKTsKKyAgICBi
b29sIGJvb2xDYWxsYmFjaygpOworICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9u
KTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiB2b2lkU291cmNl
Q2FsbGJhY2soR01haW5Mb29wU291cmNlKik7CisgICAgc3RhdGljIGdib29sZWFuIGJvb2xTb3Vy
Y2VDYWxsYmFjayhHTWFpbkxvb3BTb3VyY2UqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc29ja2V0
U291cmNlQ2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiwgR01haW5Mb29wU291cmNlKik7
CisKKyAgICBEZWxldGVPbkRlc3Ryb3lUeXBlIG1fZGVsZXRlT25EZXN0cm95OworICAgIEdSZWZQ
dHI8R1NvdXJjZT4gbV9zb3VyY2U7CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2Vs
bGFibGU7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKKyAgICBz
dGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IG1fYm9vbENhbGxiYWNrOworICAgIHN0ZDo6ZnVuY3Rpb248
Ym9vbCAoR0lPQ29uZGl0aW9uKT4gbV9zb2NrZXRDYWxsYmFjazsKKyAgICBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+IG1fZGVzdHJveUNhbGxiYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6R01haW5Mb29wU291cmNlOworCisjZW5kaWYgLy8gR01haW5Mb29wU291cmNl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcAppbmRleCBjMDU3ZWE3Li41ZTJiOWFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogCi0jaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtMzgsMTUgKzM4LDkgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVh
ZFBsYXRmb3JtKCkKIHsKIH0KIAotc3RhdGljIGdib29sZWFuIHRpbWVvdXRGaXJlZChncG9pbnRl
cikKLXsKLSAgICBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Ci0gICAgcmV0dXJu
IEZBTFNFOwotfQotCiB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQo
KQogewotICAgIGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIHRpbWVvdXRGaXJl
ZCwgMCwgMCk7CisgICAgR01haW5Mb29wU291cmNlOjpjcmVhdGUoKS5zY2hlZHVsZSgiW1dlYktp
dF0gZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCIsIGRpc3BhdGNoRnVuY3Rpb25zRnJv
bU1haW5UaHJlYWQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2d0ay9SdW5Mb29w
R3RrLmNwcAppbmRleCA4YTJlYTIyLi44YTAxOGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9ndGsvUnVuTG9vcEd0ay5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BHdGsu
Y3BwCkBAIC05NywyNSArOTcsMTQgQEAgdm9pZCBSdW5Mb29wOjpzdG9wKCkKICAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0KCkpOwogfQogCi1nYm9vbGVhbiBSdW5Mb29w
OjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKLXsKLSAgICBydW5Mb29wLT5wZXJmb3JtV29y
aygpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogdm9pZCBSdW5Mb29wOjp3YWtlVXAoKQogewot
ICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3
KCkpOwotICAgIGdfc291cmNlX3NldF9wcmlvcml0eShzb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlf
REVGQVVMVCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJjZS5nZXQoKSwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OnF1ZXVlV29yayksIHRoaXMsIDApOwot
ICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCksIG1fcnVuTG9vcENvbnRleHQuZ2V0KCkp
OwotCisgICAgR01haW5Mb29wU291cmNlOjpjcmVhdGUoKS5zY2hlZHVsZSgiW1dlYktpdF0gUnVu
TG9vcCB3b3JrIiwgc3RkOjpiaW5kKCZSdW5Mb29wOjpwZXJmb3JtV29yaywgdGhpcykpOwogICAg
IGdfbWFpbl9jb250ZXh0X3dha2V1cChtX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKIH0KIAogUnVu
TG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2UoUnVuTG9vcCogcnVuTG9vcCkKICAgICA6IG1fcnVu
TG9vcChydW5Mb29wKQotICAgICwgbV90aW1lclNvdXJjZSgwKQogewogfQogCkBAIC0xMjQsNDYg
KzExMywyMCBAQCBSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UoKQogICAgIHN0b3AoKTsK
IH0KIAotdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OmNsZWFyVGltZXJTb3VyY2UoKQotewotICAg
IG1fdGltZXJTb3VyY2UgPSAwOwotfQotCi1nYm9vbGVhbiBSdW5Mb29wOjpUaW1lckJhc2U6OnRp
bWVyRmlyZWRDYWxsYmFjayhSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyKQotewotICAgIEdTb3Vy
Y2UqIGN1cnJlbnRUaW1lclNvdXJjZSA9IHRpbWVyLT5tX3RpbWVyU291cmNlLmdldCgpOwotICAg
IGJvb2wgaXNSZXBlYXRpbmcgPSB0aW1lci0+aXNSZXBlYXRpbmcoKTsKLSAgICAvLyBUaGlzIGNh
biBjaGFuZ2UgdGhlIHRpbWVyU291cmNlIGJ5IHN0YXJ0aW5nIGEgbmV3IHRpbWVyIHdpdGhpbiB0
aGUgY2FsbGJhY2suCi0gICAgaWYgKCFpc1JlcGVhdGluZyAmJiBjdXJyZW50VGltZXJTb3VyY2Ug
PT0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCkpCi0gICAgICAgIHRpbWVyLT5jbGVhclRpbWVy
U291cmNlKCk7Ci0KLSAgICB0aW1lci0+ZmlyZWQoKTsKLSAgICByZXR1cm4gaXNSZXBlYXRpbmc7
Ci19Ci0KIHZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgZmlyZUludGVydmFs
LCBib29sIHJlcGVhdCkKIHsKLSAgICBpZiAobV90aW1lclNvdXJjZSkKLSAgICAgICAgc3RvcCgp
OwotCi0gICAgbV90aW1lclNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhz
dGF0aWNfY2FzdDxndWludD4oZmlyZUludGVydmFsICogMTAwMCkpKTsKLSAgICBtX2lzUmVwZWF0
aW5nID0gcmVwZWF0OwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLmdl
dCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjp0
aW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1l
clNvdXJjZS5nZXQoKSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKKyAgICBt
X3RpbWVyU291cmNlLnNjaGVkdWxlQWZ0ZXJEZWxheSgiW1dlYktpdF0gUnVuTG9vcDo6VGltZXIi
LCBzdGF0aWNfY2FzdDxzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+PihbdGhpcywgcmVwZWF0XSgpIHsg
ZmlyZWQoKTsgcmV0dXJuIHJlcGVhdDsgfSksCisgICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxk
b3VibGU+KGZpcmVJbnRlcnZhbCkpKTsKIH0KIAogdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0
b3AoKQogewotICAgIGlmICghbV90aW1lclNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z19zb3VyY2VfZGVzdHJveShtX3RpbWVyU291cmNlLmdldCgpKTsKLSAgICBjbGVhclRpbWVyU291
cmNlKCk7CisgICAgbV90aW1lclNvdXJjZS5jYW5jZWwoKTsKIH0KIAogYm9vbCBSdW5Mb29wOjpU
aW1lckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90aW1lclNvdXJjZTsK
KyAgICByZXR1cm4gbV90aW1lclNvdXJjZS5pc1NjaGVkdWxlZCgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXVEYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226675</attachid>
            <date>2014-03-14 03:32:15 -0700</date>
            <delta_ts>2014-03-19 06:46:04 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wtf-g-main-loop-source.diff</filename>
            <type>text/plain</type>
            <size>21096</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMTY2YjdmZi4uNjNjZjlmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxNC0wMy0xMCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dM
SUJdIEFkZCBHTWFpbkxvb3BTb3VyY2UgY2xhc3MgdG8gd3JhcCBpZGxlIGFuZCB0aW1lb3V0IHNv
dXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDAyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdM
aWIgbWFpbiBsb29wIHNvdXJjZXMgbGlrZSBpZGxlIGFuZCB0aW1lb3V0cyBhcmUgc29tZXRpbWVz
CisgICAgICAgIHVuY29udmVuaWVudCB0byB1c2UgYW5kIGl0J3MgdmVyeSBjb21tb24gdG8gZm9y
Z2V0IGNhbmNlbGluZyB0aGUKKyAgICAgICAgc291cmNlIHdoZW4gdGhlIG9iamVjdCBpcyBkZXN0
cm95ZWQgb3IgcmVzZXQgdGhlIHNvdXJjZSBJRCBpbiB0aGUKKyAgICAgICAgY2FsbGJhY2sgd2hl
biBjYWxsZWQuIEdNYWluTG9vcFNvdXJjZSBpcyBhIHdyYXBwZXIgY2xhc3MgdG8gbWFrZSBpdAor
ICAgICAgICBlYXNpZXIgdG8gaGFuZGxlIHNvdXJjZXMgYW5kIGFsc28gdG8gYXZvaWQgdGhvc2Ug
dHlwaWNhbCBtaXN0YWtlcy4KKyAgICAgICAgSXQgZm9yY2VzIHRvIGNyZWF0ZSBzb3VyY2VzIHdp
dGggYSBuYW1lIGFuZCB0aGUgdXNlciBkb2Vzbid0IGhhdmUKKyAgICAgICAgdG8gZGVhbCB3aXRo
IHRoZSBzb3VyY2UgSUQgYW55bW9yZS4gVGhlIHNvdXJjZSBpcyBjYW5jZWxsZWQgd2hlbgorICAg
ICAgICB0aGUgb2JqZWN0IGlzIGRlbGV0ZWQgb3Igd2hlbiBhIG5ldyBzb3VyY2UgaXMgc2NoZWR1
bGVkLiBJdCB1c2VzCisgICAgICAgIHN0ZDo6ZnVuY3Rpb24gZm9yIGNhbGxiYWNrcyBzbyB0aGF0
IHdlIG5vIGxvbmdlciBuZWVkIHRvIHVzZSB0aGUKKyAgICAgICAgInByb3h5IiBzdGF0aWMgY2Fs
bGJhY2tzIGVpdGhlci4gV2UgY2FuIHVzZSBzdGQ6OmJpbmQgdG8gdXNlIGEKKyAgICAgICAgZnVu
Y3Rpb24gcG9pbnRlciBvciBhIG1lbWJlciBvciBldmVuIGxhbWJkYSBmdW5jdGlvbnMuIEl0IGFs
c28gaGFuZGxlcworICAgICAgICByZXBlYXRpbmcgc291cmNlcyBhdXRvbWF0aWNhbGx5IGRlcGVu
ZGluZyBvbiB3aGV0aGVyIHRoZSBnaXZlbgorICAgICAgICBmdW5jdGlvbiByZXR1cm5zIGEgYm9v
bCBvciBub3QuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpjcmVhdGUp
OgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSk6CisgICAg
ICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSk6CisgICAgICAgIChX
VEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291
cmNlOjpyZXNldCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVJZGxl
U291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZSk6CisgICAg
ICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291cmNlKToKKyAgICAg
ICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkpOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWlu
TG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNl
Ojpzb2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6ZGVzdHJv
eSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6dm9pZFNvdXJjZUNhbGxiYWNrKToK
KyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpib29sU291cmNlQ2FsbGJhY2spOgorICAg
ICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNvY2tldFNvdXJjZUNhbGxiYWNrKToKKyAgICAg
ICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaDogQWRkZWQuCisgICAgICAgIChXVEY6
OkdNYWluTG9vcFNvdXJjZTo6aXNTY2hlZHVsZWQpOgorICAgICAgICAqIHd0Zi9ndGsvTWFpblRo
cmVhZEd0ay5jcHA6CisgICAgICAgIChXVEY6OnNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1h
aW5UaHJlYWQpOgorICAgICAgICAqIHd0Zi9ndGsvUnVuTG9vcEd0ay5jcHA6CisgICAgICAgIChX
VEY6OlJ1bkxvb3A6Ondha2VVcCk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6
VGltZXJCYXNlKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydCk6Cisg
ICAgICAgIChXVEY6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCk6CisgICAgICAgIChXVEY6OlJ1
bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUpOgorCiAyMDE0LTAzLTEzICBSYWR1IFN0YXZpbGEg
IDxzdGF2aWxhQGFkb2JlLmNvbT4KIAogICAgICAgICBXZWJraXQgbm90IGJ1aWxkaW5nIG9uIFhD
b2RlIDUuMSBkdWUgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uIG5vIGxvbmdlciBiZWluZyBzdXBwb3J0
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9X
VEYvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2NzZhMzAyLi5kNGFkZmU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dURi9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC0yMTIsNiArMjEyLDggQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNv
dXJjZS9XVEYvd3RmL2R0b2Evc3RydG9kLmNjIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3N0
cnRvZC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmggXAorICAgIFNvdXJjZS9X
VEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcCBcCisgICAgU291cmNlL1dURi93dGYv
Z29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9H
TXV0ZXhMb2NrZXIuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcCBc
CiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCBiNGUyMTBhLi5kMjYzZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtNCw2ICs0LDcgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBlZmwvUmVmUHRy
RWZsLmNwcAogICAgIGVmbC9SdW5Mb29wRWZsLmNwcAogCisgICAgZ29iamVjdC9HTWFpbkxvb3BT
b3VyY2UuY3BwCiAgICAgZ29iamVjdC9HUmVmUHRyLmNwcAogKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDcwMjYyZjMuLmQ3MmQ3MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xLDQgKzEsNSBAQAogbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKKyAgICBnb2JqZWN0L0dN
YWluTG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0L0dSZWZQdHIuY3BwCiAgICAgZ29iamVjdC9H
bGliVXRpbGl0aWVzLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKaW5kZXggNWVkNmFkMS4uOGJlNTYzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1J1bkxv
b3AuaApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lm
IFVTRShHTElCKQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oRUZM
KQpAQCAtOTgsMTEgKzk4LDcgQEAgcHVibGljOgogICAgICAgICBFY29yZV9UaW1lciogbV90aW1l
cjsKICAgICAgICAgYm9vbCBtX2lzUmVwZWF0aW5nOwogI2VsaWYgVVNFKEdMSUIpCi0gICAgICAg
IHN0YXRpYyBnYm9vbGVhbiB0aW1lckZpcmVkQ2FsbGJhY2soUnVuTG9vcDo6VGltZXJCYXNlKik7
Ci0gICAgICAgIGdib29sZWFuIGlzUmVwZWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGVh
dGluZzsgfQotICAgICAgICB2b2lkIGNsZWFyVGltZXJTb3VyY2UoKTsKLSAgICAgICAgR1JlZlB0
cjxHU291cmNlPiBtX3RpbWVyU291cmNlOwotICAgICAgICBnYm9vbGVhbiBtX2lzUmVwZWF0aW5n
OworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgbV90aW1lclNvdXJjZTsKICNlbmRpZgogICAgIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzBlNGVlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCkBAIC0wLDAgKzEsMjI4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHTWFpbkxvb3BTb3VyY2UuaCIKKworI2luY2x1ZGUg
PGdpby9naW8uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK0dNYWluTG9vcFNvdXJjZSYgR01haW5M
b29wU291cmNlOjpjcmVhdGUoKQoreworICAgIHJldHVybiAqbmV3IEdNYWluTG9vcFNvdXJjZShE
ZWxldGVPbkRlc3Ryb3kpOworfQorCitHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSgp
CisgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShEb05vdERlbGV0ZU9uRGVzdHJveSkKK3sKK30KKwor
R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxl
dGVPbkRlc3Ryb3kpCisgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCit7
Cit9CisKK0dNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCit7CisgICAgY2FuY2Vs
KCk7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpjYW5jZWwoKQoreworICAgIGlmICghbV9z
b3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NhbmNlbGxhYmxlKSB7CisgICAg
ICAgIC8vIENhbmNlbGluZyB0aGUgY2FuY2VsbGFibGUgd2lsbCBtYWtlIHRoZSBzb3VyY2UgY2Fs
bGJhY2sgdG8gYmUgY2FsbGVkCisgICAgICAgIC8vIHNvIHRoZSBzb3VyY2UgaXMgZGVzdHJveWVk
IHdoZW4gdGhlIGNhbGxiYWNrIHJldHVybnMuCisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2Vs
KG1fY2FuY2VsbGFibGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ19z
b3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBH
TWFpbkxvb3BTb3VyY2U6OnJlc2V0KCkKK3sKKyAgICBtX3NvdXJjZSA9IG51bGxwdHI7CisgICAg
bV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgbV92b2lkQ2FsbGJhY2sgPSBudWxscHRyOwor
ICAgIG1fYm9vbENhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IG51
bGxwdHI7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUlkbGVTb3VyY2UoY29u
c3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMgc291cmNlRnVuY3Rpb24sIGludCBwcmlvcml0eSwg
R01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfaWRs
ZV9zb3VyY2VfbmV3KCkpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBu
YW1lKTsKKyAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUX0lETEUpCisgICAg
ICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworICAg
IGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRo
aXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4
dCk7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7
CisgICAgY2FuY2VsKCk7CisgICAgbV92b2lkQ2FsbGJhY2sgPSBzdGQ6Om1vdmUoZnVuY3Rpb24p
OworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7Cisg
ICAgc2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKK30KKwordm9pZCBHTWFp
bkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0
cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAg
ICBtX2Jvb2xDYWxsYmFjayA9IHN0ZDo6bW92ZShmdW5jdGlvbik7CisgICAgbV9kZXN0cm95Q2Fs
bGJhY2sgPSBzdGQ6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBzY2hlZHVsZUlkbGVTb3Vy
Y2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNr
KSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25kaXRpb24pPiBm
dW5jdGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQor
eworICAgIGNhbmNlbCgpOworICAgIG1fc29ja2V0Q2FsbGJhY2sgPSBzdGQ6Om1vdmUoZnVuY3Rp
b24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7
CisgICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAg
ICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldCwgY29u
ZGl0aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9z
b3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc29ja2V0U291cmNlQ2FsbGJhY2sp
LCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNv
bnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291cmNl
KGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3Jp
dHksIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQobV9zb3VyY2UpOworICAg
IGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBpZiAocHJpb3Jp
dHkgIT0gR19QUklPUklUWV9ERUZBVUxUKQorICAgICAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHko
bV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9z
b3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJj
ZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVsYXksIGludCBw
cmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1Jl
ZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgpKSk7CisgICAgbV92b2lkQ2FsbGJh
Y2sgPSBzdGQ6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5
LCBjb250ZXh0KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxh
eShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAg
Y2FuY2VsKCk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXco
ZGVsYXkuY291bnQoKSkpOworICAgIG1fYm9vbENhbGxiYWNrID0gc3RkOjptb3ZlKGZ1bmN0aW9u
KTsKKyAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IHN0ZDo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwor
ICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQg
R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVsYXks
IGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdN
YWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBtX3NvdXJjZSA9IGFk
b3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsKKyAg
ICBtX3ZvaWRDYWxsYmFjayA9IHN0ZDo6bW92ZShmdW5jdGlvbik7CisgICAgbV9kZXN0cm95Q2Fs
bGJhY2sgPSBzdGQ6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBzY2hlZHVsZVRpbWVvdXRT
b3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxi
YWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2No
ZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4g
ZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgY2FuY2VsKCk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3Nv
dXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7CisgICAgbV9ib29sQ2FsbGJhY2sgPSBz
dGQ6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRl
c3Ryb3lGdW5jdGlvbik7CisgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250
ZXh0KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjaygpCit7CisgICAg
QVNTRVJUKG1fdm9pZENhbGxiYWNrKTsKKworICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNl
LmdldCgpOworICAgIG1fdm9pZENhbGxiYWNrKCk7CisgICAgaWYgKHNvdXJjZSA9PSBtX3NvdXJj
ZS5nZXQoKSkKKyAgICAgICAgZGVzdHJveSgpOworfQorCitib29sIEdNYWluTG9vcFNvdXJjZTo6
Ym9vbENhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQobV9ib29sQ2FsbGJhY2spOworCisgICAgR1Nv
dXJjZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7CisgICAgYm9vbCByZXR2YWwgPSBtX2Jvb2xD
YWxsYmFjaygpOworICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkK
KyAgICAgICAgZGVzdHJveSgpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworYm9vbCBHTWFp
bkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pCit7Cisg
ICAgQVNTRVJUKG1fc29ja2V0Q2FsbGJhY2spOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNf
Y2FuY2VsbGVkKG1fY2FuY2VsbGFibGUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5nZXQoKTsKKyAgICBib29sIHJldHZhbCA9
IG1fc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKKyAgICBpZiAoIXJldHZhbCAmJiBzb3VyY2Ug
PT0gbV9zb3VyY2UuZ2V0KCkpCisgICAgICAgIGRlc3Ryb3koKTsKKworICAgIHJldHVybiByZXR2
YWw7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KCkKK3sKKyAgICBpZiAobV9k
ZXN0cm95Q2FsbGJhY2spCisgICAgICAgIG1fZGVzdHJveUNhbGxiYWNrKCk7CisgICAgcmVzZXQo
KTsKKworICAgIGlmIChtX2RlbGV0ZU9uRGVzdHJveSA9PSBEb05vdERlbGV0ZU9uRGVzdHJveSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK2dib29sZWFuIEdNYWlu
TG9vcFNvdXJjZTo6dm9pZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNvdXJjZSogc291cmNlKQor
eworICAgIHNvdXJjZS0+dm9pZENhbGxiYWNrKCk7CisgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9W
RTsKK30KKworZ2Jvb2xlYW4gR01haW5Mb29wU291cmNlOjpib29sU291cmNlQ2FsbGJhY2soR01h
aW5Mb29wU291cmNlKiBzb3VyY2UpCit7CisgICAgcmV0dXJuIHNvdXJjZS0+Ym9vbENhbGxiYWNr
KCkgPT0gQ29udGludWU7Cit9CisKK2dib29sZWFuIEdNYWluTG9vcFNvdXJjZTo6c29ja2V0U291
cmNlQ2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIEdNYWluTG9vcFNv
dXJjZSogc291cmNlKQoreworICAgIHJldHVybiBzb3VyY2UtPnNvY2tldENhbGxiYWNrKGNvbmRp
dGlvbikgPT0gQ29udGludWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oIGIvU291cmNlL1dURi93
dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44ZGI1Y2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVj
dC9HTWFpbkxvb3BTb3VyY2UuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR01haW5Mb29wU291cmNlX2gK
KyNkZWZpbmUgR01haW5Mb29wU291cmNlX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisK
K3R5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7CisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBHTWFpbkxvb3BTb3VyY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdNYWluTG9v
cFNvdXJjZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Rh
dGljIEdNYWluTG9vcFNvdXJjZSYgY3JlYXRlKCk7CisKKyAgICBHTWFpbkxvb3BTb3VyY2UoKTsK
KyAgICB+R01haW5Mb29wU291cmNlKCk7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBTdG9wID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgQ29udGludWUgPSB0cnVlOworCisgICAgYm9v
bCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgdm9pZCBzY2hl
ZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCBpbnQgcHJpb3Jp
dHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1
bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQgc2No
ZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiwgaW50IHByaW9y
aXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lG
dW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNj
aGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9u
KT4sIEdTb2NrZXQqLCBHSU9Db25kaXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJv
eUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQg
c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlf
REVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRy
LCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXko
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBu
dWxscHRyKTsKKyAgICB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCBzdGQ6OmNocm9ubzo6c2Vjb25kcywgaW50IHByaW9yaXR5
ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5j
dGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVk
dWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+LCBz
dGQ6OmNocm9ubzo6c2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29u
dGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIGNhbmNlbCgpOworCitwcml2YXRlOgorICAgIGVu
dW0gRGVsZXRlT25EZXN0cm95VHlwZSB7IERlbGV0ZU9uRGVzdHJveSwgRG9Ob3REZWxldGVPbkRl
c3Ryb3kgfTsKKyAgICBHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSk7CisKKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciog
bmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CisgICAgdm9p
ZCBzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGlu
dCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CisgICAgdm9pZCB2b2lkQ2FsbGJhY2soKTsKKyAg
ICBib29sIGJvb2xDYWxsYmFjaygpOworICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0
aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiB2b2lkU291
cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNlKik7CisgICAgc3RhdGljIGdib29sZWFuIGJvb2xT
b3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3VyY2UqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc29j
a2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiwgR01haW5Mb29wU291cmNl
Kik7CisKKyAgICBEZWxldGVPbkRlc3Ryb3lUeXBlIG1fZGVsZXRlT25EZXN0cm95OworICAgIEdS
ZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2Fu
Y2VsbGFibGU7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IG1fYm9vbENhbGxiYWNrOworICAgIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gbV9zb2NrZXRDYWxsYmFjazsKKyAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IG1fZGVzdHJveUNhbGxiYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6R01haW5Mb29wU291cmNlOworCisjZW5kaWYgLy8gR01haW5Mb29wU291
cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcAppbmRleCBjMDU3ZWE3Li41ZTJi
OWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogCi0jaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtMzgsMTUgKzM4LDkgQEAgdm9pZCBpbml0aWFsaXplTWFpblRo
cmVhZFBsYXRmb3JtKCkKIHsKIH0KIAotc3RhdGljIGdib29sZWFuIHRpbWVvdXRGaXJlZChncG9p
bnRlcikKLXsKLSAgICBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Ci0gICAgcmV0
dXJuIEZBTFNFOwotfQotCiB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJl
YWQoKQogewotICAgIGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIHRpbWVvdXRG
aXJlZCwgMCwgMCk7CisgICAgR01haW5Mb29wU291cmNlOjpjcmVhdGUoKS5zY2hlZHVsZSgiW1dl
YktpdF0gZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCIsIGRpc3BhdGNoRnVuY3Rpb25z
RnJvbU1haW5UaHJlYWQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2d0ay9SdW5M
b29wR3RrLmNwcAppbmRleCA4YTJlYTIyLi44MjU5M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9ndGsvUnVuTG9vcEd0ay5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BH
dGsuY3BwCkBAIC05NywyNSArOTcsMTYgQEAgdm9pZCBSdW5Mb29wOjpzdG9wKCkKICAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0KCkpOwogfQogCi1nYm9vbGVhbiBSdW5M
b29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKLXsKLSAgICBydW5Mb29wLT5wZXJmb3Jt
V29yaygpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogdm9pZCBSdW5Mb29wOjp3YWtlVXAoKQog
ewotICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2Vf
bmV3KCkpOwotICAgIGdfc291cmNlX3NldF9wcmlvcml0eShzb3VyY2UuZ2V0KCksIEdfUFJJT1JJ
VFlfREVGQVVMVCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJjZS5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OnF1ZXVlV29yayksIHRoaXMsIDAp
OwotICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCksIG1fcnVuTG9vcENvbnRleHQuZ2V0
KCkpOwotCisgICAgcmVmKCk7CisgICAgR01haW5Mb29wU291cmNlOjpjcmVhdGUoKS5zY2hlZHVs
ZSgiW1dlYktpdF0gUnVuTG9vcCB3b3JrIiwgc3RkOjpiaW5kKCZSdW5Mb29wOjpwZXJmb3JtV29y
aywgdGhpcyksCisgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgW3RoaXNdKCkgeyBkZXJlZigp
OyB9KTsKICAgICBnX21haW5fY29udGV4dF93YWtldXAobV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7
CiB9CiAKIFJ1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKFJ1bkxvb3AqIHJ1bkxvb3ApCiAg
ICAgOiBtX3J1bkxvb3AocnVuTG9vcCkKLSAgICAsIG1fdGltZXJTb3VyY2UoMCkKIHsKIH0KIApA
QCAtMTI0LDQ2ICsxMTUsMjAgQEAgUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkKICAg
ICBzdG9wKCk7CiB9CiAKLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpjbGVhclRpbWVyU291cmNl
KCkKLXsKLSAgICBtX3RpbWVyU291cmNlID0gMDsKLX0KLQotZ2Jvb2xlYW4gUnVuTG9vcDo6VGlt
ZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2soUnVuTG9vcDo6VGltZXJCYXNlKiB0aW1lcikKLXsK
LSAgICBHU291cmNlKiBjdXJyZW50VGltZXJTb3VyY2UgPSB0aW1lci0+bV90aW1lclNvdXJjZS5n
ZXQoKTsKLSAgICBib29sIGlzUmVwZWF0aW5nID0gdGltZXItPmlzUmVwZWF0aW5nKCk7Ci0gICAg
Ly8gVGhpcyBjYW4gY2hhbmdlIHRoZSB0aW1lclNvdXJjZSBieSBzdGFydGluZyBhIG5ldyB0aW1l
ciB3aXRoaW4gdGhlIGNhbGxiYWNrLgotICAgIGlmICghaXNSZXBlYXRpbmcgJiYgY3VycmVudFRp
bWVyU291cmNlID09IHRpbWVyLT5tX3RpbWVyU291cmNlLmdldCgpKQotICAgICAgICB0aW1lci0+
Y2xlYXJUaW1lclNvdXJjZSgpOwotCi0gICAgdGltZXItPmZpcmVkKCk7Ci0gICAgcmV0dXJuIGlz
UmVwZWF0aW5nOwotfQotCiB2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQoZG91YmxlIGZp
cmVJbnRlcnZhbCwgYm9vbCByZXBlYXQpCiB7Ci0gICAgaWYgKG1fdGltZXJTb3VyY2UpCi0gICAg
ICAgIHN0b3AoKTsKLQotICAgIG1fdGltZXJTb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3Nv
dXJjZV9uZXcoc3RhdGljX2Nhc3Q8Z3VpbnQ+KGZpcmVJbnRlcnZhbCAqIDEwMDApKSk7Ci0gICAg
bV9pc1JlcGVhdGluZyA9IHJlcGVhdDsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV90aW1l
clNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OlRp
bWVyQmFzZTo6dGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7Ci0gICAgZ19zb3VyY2VfYXR0
YWNoKG1fdGltZXJTb3VyY2UuZ2V0KCksIG1fcnVuTG9vcC0+bV9ydW5Mb29wQ29udGV4dC5nZXQo
KSk7CisgICAgbV90aW1lclNvdXJjZS5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIFJ1bkxv
b3A6OlRpbWVyIiwgc3RkOjpmdW5jdGlvbjxib29sICgpPihbdGhpcywgcmVwZWF0XSgpIHsgZmly
ZWQoKTsgcmV0dXJuIHJlcGVhdDsgfSksCisgICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9j
YXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3Vi
bGU+KGZpcmVJbnRlcnZhbCkpKTsKIH0KIAogdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3Ao
KQogewotICAgIGlmICghbV90aW1lclNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19z
b3VyY2VfZGVzdHJveShtX3RpbWVyU291cmNlLmdldCgpKTsKLSAgICBjbGVhclRpbWVyU291cmNl
KCk7CisgICAgbV90aW1lclNvdXJjZS5jYW5jZWwoKTsKIH0KIAogYm9vbCBSdW5Mb29wOjpUaW1l
ckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90aW1lclNvdXJjZTsKKyAg
ICByZXR1cm4gbV90aW1lclNvdXJjZS5pc1NjaGVkdWxlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYK
</data>
<flag name="review"
          id="250921"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227177</attachid>
            <date>2014-03-19 06:46:04 -0700</date>
            <delta_ts>2014-03-19 06:46:04 -0700</delta_ts>
            <desc>New patch for landing</desc>
            <filename>wtf-g-main-loop-source.diff</filename>
            <type>text/plain</type>
            <size>21977</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNTJlNzJjZS4uZTNiZTg2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxNC0wMy0xOCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dM
SUJdIEFkZCBHTWFpbkxvb3BTb3VyY2UgY2xhc3MgdG8gd3JhcCBpZGxlIGFuZCB0aW1lb3V0IHNv
dXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDAyNworCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAgICAgICBH
TGliIG1haW4gbG9vcCBzb3VyY2VzIGxpa2UgaWRsZSBhbmQgdGltZW91dHMgYXJlIHNvbWV0aW1l
cworICAgICAgICB1bmNvbnZlbmllbnQgdG8gdXNlIGFuZCBpdCdzIHZlcnkgY29tbW9uIHRvIGZv
cmdldCBjYW5jZWxpbmcgdGhlCisgICAgICAgIHNvdXJjZSB3aGVuIHRoZSBvYmplY3QgaXMgZGVz
dHJveWVkIG9yIHJlc2V0IHRoZSBzb3VyY2UgSUQgaW4gdGhlCisgICAgICAgIGNhbGxiYWNrIHdo
ZW4gY2FsbGVkLiBHTWFpbkxvb3BTb3VyY2UgaXMgYSB3cmFwcGVyIGNsYXNzIHRvIG1ha2UgaXQK
KyAgICAgICAgZWFzaWVyIHRvIGhhbmRsZSBzb3VyY2VzIGFuZCBhbHNvIHRvIGF2b2lkIHRob3Nl
IHR5cGljYWwgbWlzdGFrZXMuCisgICAgICAgIEl0IGZvcmNlcyB0byBjcmVhdGUgc291cmNlcyB3
aXRoIGEgbmFtZSBhbmQgdGhlIHVzZXIgZG9lc24ndCBoYXZlCisgICAgICAgIHRvIGRlYWwgd2l0
aCB0aGUgc291cmNlIElEIGFueW1vcmUuIFRoZSBzb3VyY2UgaXMgY2FuY2VsbGVkIHdoZW4KKyAg
ICAgICAgdGhlIG9iamVjdCBpcyBkZWxldGVkIG9yIHdoZW4gYSBuZXcgc291cmNlIGlzIHNjaGVk
dWxlZC4gSXQgdXNlcworICAgICAgICBzdGQ6OmZ1bmN0aW9uIGZvciBjYWxsYmFja3Mgc28gdGhh
dCB3ZSBubyBsb25nZXIgbmVlZCB0byB1c2UgdGhlCisgICAgICAgICJwcm94eSIgc3RhdGljIGNh
bGxiYWNrcyBlaXRoZXIuIFdlIGNhbiB1c2Ugc3RkOjpiaW5kIHRvIHVzZSBhCisgICAgICAgIGZ1
bmN0aW9uIHBvaW50ZXIgb3IgYSBtZW1iZXIgb3IgZXZlbiBsYW1iZGEgZnVuY3Rpb25zLiBJdCBh
bHNvIGhhbmRsZXMKKyAgICAgICAgcmVwZWF0aW5nIHNvdXJjZXMgYXV0b21hdGljYWxseSBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGUgZ2l2ZW4KKyAgICAgICAgZnVuY3Rpb24gcmV0dXJucyBhIGJv
b2wgb3Igbm90LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiB3
dGYvUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogd3RmL1BsYXRmb3JtR1RLLmNtYWtlOgor
ICAgICAgICAqIHd0Zi9SdW5Mb29wLmg6CisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29w
U291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y3JlYXRl
QW5kRGVsZXRlT25EZXN0cm95KToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpHTWFp
bkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6On5HTWFpbkxvb3BT
b3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6cmVzZXQpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BT
b3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGUpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGlt
ZW91dFNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRl
ckRlbGF5KToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgor
ICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChX
VEY6OkdNYWluTG9vcFNvdXJjZTo6c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFp
bkxvb3BTb3VyY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnZv
aWRTb3VyY2VDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Ym9vbFNv
dXJjZUNhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzb2NrZXRTb3Vy
Y2VDYWxsYmFjayk6CisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKToKKyAgICAg
ICAgKiB3dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwOgorICAgICAgICAoV1RGOjpzY2hlZHVsZURp
c3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKToKKyAgICAgICAgKiB3dGYvZ3RrL1J1bkxvb3BH
dGsuY3BwOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjp3YWtlVXApOgorICAgICAgICAoV1RGOjpS
dW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZSk6CisgICAgICAgIChXVEY6OlJ1bkxvb3A6OlRp
bWVyQmFzZTo6c3RhcnQpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3Ap
OgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKToKKwogMjAxNC0w
My0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIG1v
c3QgdXNlcyBvZiBkZXByZWNhdGVkQ2hhcmFjdGVyIGluIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IDY3NmEzMDIuLmQ0YWRmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTIxMiw2
ICsyMTIsOCBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS9zdHJ0
b2QuY2MgXAogICAgIFNvdXJjZS9XVEYvd3RmL2R0b2Evc3RydG9kLmggXAogICAgIFNvdXJjZS9X
VEYvd3RmL2R0b2EvdXRpbHMuaCBcCisgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxv
b3BTb3VyY2UuY3BwIFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJj
ZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9n
b2JqZWN0L0dSZWZQdHIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGI0ZTIxMGEu
LmQyNjNkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00LDYgKzQsNyBAQCBsaXN0
KEFQUEVORCBXVEZfU09VUkNFUwogICAgIGVmbC9SZWZQdHJFZmwuY3BwCiAgICAgZWZsL1J1bkxv
b3BFZmwuY3BwCiAKKyAgICBnb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKICAgICBnb2JqZWN0
L0dSZWZQdHIuY3BwCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNzAyNjJmMy4u
ZDcyZDcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTEsNCArMSw1IEBACiBsaXN0
KEFQUEVORCBXVEZfU09VUkNFUworICAgIGdvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAogICAg
IGdvYmplY3QvR1JlZlB0ci5jcHAKICAgICBnb2JqZWN0L0dsaWJVdGlsaXRpZXMuY3BwCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaCBiL1NvdXJjZS9XVEYvd3RmL1J1bkxv
b3AuaAppbmRleCAwMmE3MGNhLi5iMThjNzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9S
dW5Mb29wLmgKKysrIGIvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCkBAIC0zNyw3ICszNyw3IEBA
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYgVVNFKEdMSUIpCi0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5oPgogI2VuZGlmCiAKICNpZiBQTEFURk9STShFRkwpCkBAIC05OSwxMSArOTksNyBAQCBw
dWJsaWM6CiAgICAgICAgIEVjb3JlX1RpbWVyKiBtX3RpbWVyOwogICAgICAgICBib29sIG1faXNS
ZXBlYXRpbmc7CiAjZWxpZiBVU0UoR0xJQikKLSAgICAgICAgc3RhdGljIGdib29sZWFuIHRpbWVy
RmlyZWRDYWxsYmFjayhSdW5Mb29wOjpUaW1lckJhc2UqKTsKLSAgICAgICAgZ2Jvb2xlYW4gaXNS
ZXBlYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwZWF0aW5nOyB9Ci0gICAgICAgIHZvaWQg
Y2xlYXJUaW1lclNvdXJjZSgpOwotICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1fdGltZXJTb3Vy
Y2U7Ci0gICAgICAgIGdib29sZWFuIG1faXNSZXBlYXRpbmc7CisgICAgICAgIEdNYWluTG9vcFNv
dXJjZSBtX3RpbWVyU291cmNlOwogI2VuZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwIGIvU291cmNlL1dURi93dGYvZ29i
amVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjc0Y2Q5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dN
YWluTG9vcFNvdXJjZS5jcHAKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdNYWluTG9vcFNvdXJjZS5oIgorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworR01haW5Mb29wU291cmNlJiBHTWFpbkxvb3BTb3VyY2U6OmNyZWF0ZUFuZERl
bGV0ZU9uRGVzdHJveSgpCit7CisgICAgcmV0dXJuICpuZXcgR01haW5Mb29wU291cmNlKERlbGV0
ZU9uRGVzdHJveSk7Cit9CisKK0dNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKCkKKyAg
ICA6IG1fZGVsZXRlT25EZXN0cm95KERvTm90RGVsZXRlT25EZXN0cm95KQorICAgICwgbV9zdGF0
dXMoUmVhZHkpCit7Cit9CisKK0dNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKERlbGV0
ZU9uRGVzdHJveVR5cGUgZGVsZXRlT25EZXN0cm95KQorICAgIDogbV9kZWxldGVPbkRlc3Ryb3ko
ZGVsZXRlT25EZXN0cm95KQorICAgICwgbV9zdGF0dXMoUmVhZHkpCit7Cit9CisKK0dNYWluTG9v
cFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCit7CisgICAgY2FuY2VsKCk7Cit9CisKK2Jvb2wg
R01haW5Mb29wU291cmNlOjppc1NjaGVkdWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Rh
dHVzID09IFNjaGVkdWxlZDsKK30KKworYm9vbCBHTWFpbkxvb3BTb3VyY2U6OmlzQWN0aXZlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0dXMgIT0gUmVhZHk7Cit9CisKK3ZvaWQgR01haW5M
b29wU291cmNlOjpjYW5jZWwoKQoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOworICAgIG1fc291cmNlLnN3YXAoc291
cmNlKTsKKworICAgIGlmIChtX2NhbmNlbGxhYmxlKQorICAgICAgICBnX2NhbmNlbGxhYmxlX2Nh
bmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KHNvdXJjZS5n
ZXQoKSk7CisgICAgZGVzdHJveSgpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6cmVzZXQo
KQoreworICAgIG1fc3RhdHVzID0gUmVhZHk7CisgICAgbV9zb3VyY2UgPSBudWxscHRyOworICAg
IG1fY2FuY2VsbGFibGUgPSBudWxscHRyOworICAgIG1fdm9pZENhbGxiYWNrID0gbnVsbHB0cjsK
KyAgICBtX2Jvb2xDYWxsYmFjayA9IG51bGxwdHI7CisgICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBu
dWxscHRyOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVJZGxlU291cmNlKGNv
bnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3JpdHks
IEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUmVhZHkp
OworICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOworCisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYo
Z19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0
KCksIG5hbWUpOworICAgIGlmIChwcmlvcml0eSAhPSBHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSkK
KyAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KG1fc291cmNlLmdldCgpLCBwcmlvcml0eSk7
CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlv
biwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBj
b250ZXh0KTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBtX3ZvaWRDYWxsYmFjayA9IHN0ZDo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBzdGQ6Om1vdmUoZGVzdHJveUZ1bmN0aW9u
KTsKKyAgICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNl
RnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOworfQorCit2b2lk
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlv
bjxib29sICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQoreworICAgIGNhbmNlbCgp
OworICAgIG1fYm9vbENhbGxiYWNrID0gc3RkOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2Rlc3Ry
b3lDYWxsYmFjayA9IHN0ZDo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIHNjaGVkdWxlSWRs
ZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2Fs
bGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpz
Y2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0NvbmRpdGlv
bik+IGZ1bmN0aW9uLCBHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgY2FuY2VsKCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFJlYWR5KTsKKyAg
ICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKKworICAgIG1fc29ja2V0Q2FsbGJhY2sgPSBzdGQ6Om1v
dmUoZnVuY3Rpb24pOworICAgIG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lG
dW5jdGlvbik7CisgICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKKyAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNv
Y2tldCwgY29uZGl0aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7CisgICAgZ19zb3VyY2Vfc2V0
X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayht
X3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc29ja2V0U291cmNl
Q2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2Uu
Z2V0KCksIGNvbnRleHQpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1l
b3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1bmN0aW9uLCBp
bnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQobV9zdGF0
dXMgPT0gUmVhZHkpOworICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOworCisgICAgQVNTRVJUKG1f
c291cmNlKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7Cisg
ICAgaWYgKHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVCkKKyAgICAgICAgZ19zb3VyY2Vf
c2V0X3ByaW9yaXR5KG1fc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7
CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKK30KKwordm9p
ZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0
aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgY2FuY2VsKCk7CisgICAgbV9zb3Vy
Y2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXkuY291bnQoKSkpOworICAg
IG1fdm9pZENhbGxiYWNrID0gc3RkOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2Rlc3Ryb3lDYWxs
YmFjayA9IHN0ZDo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIHNjaGVkdWxlVGltZW91dFNv
dXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJh
Y2spLCBwcmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBm
dW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250
ZXh0KQoreworICAgIGNhbmNlbCgpOworICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91
dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKKyAgICBtX2Jvb2xDYWxsYmFjayA9IHN0ZDo6
bW92ZShmdW5jdGlvbik7CisgICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBzdGQ6Om1vdmUoZGVzdHJv
eUZ1bmN0aW9uKTsKKyAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQp
OworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNo
YXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpz
ZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJv
eUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgY2FuY2VsKCk7CisgICAg
bV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5j
b3VudCgpKSk7CisgICAgbV92b2lkQ2FsbGJhY2sgPSBzdGQ6Om1vdmUoZnVuY3Rpb24pOworICAg
IG1fZGVzdHJveUNhbGxiYWNrID0gc3RkOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgc2No
ZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZv
aWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKK30KKwordm9pZCBHTWFpbkxv
b3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0
aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBkZWxheSwgaW50IHBy
aW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250
ZXh0KiBjb250ZXh0KQoreworICAgIGNhbmNlbCgpOworICAgIG1fc291cmNlID0gYWRvcHRHUmVm
KGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpOworICAgIG1fYm9v
bENhbGxiYWNrID0gc3RkOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9
IHN0ZDo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShu
YW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBw
cmlvcml0eSwgY29udGV4dCk7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJh
Y2soKQoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChtX3ZvaWRDYWxsYmFjayk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCk7Cisg
ICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworCisgICAgR1NvdXJjZSogc291cmNlID0gbV9zb3Vy
Y2UuZ2V0KCk7CisgICAgbV92b2lkQ2FsbGJhY2soKTsKKyAgICBpZiAoc291cmNlID09IG1fc291
cmNlLmdldCgpKQorICAgICAgICBkZXN0cm95KCk7Cit9CisKK2Jvb2wgR01haW5Mb29wU291cmNl
Ojpib29sQ2FsbGJhY2soKQoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEFTU0VSVChtX2Jvb2xDYWxsYmFjayk7CisgICAgQVNTRVJUKG1fc3RhdHVz
ID09IFNjaGVkdWxlZCk7CisgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworCisgICAgR1NvdXJj
ZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7CisgICAgYm9vbCByZXR2YWwgPSBtX2Jvb2xDYWxs
YmFjaygpOworICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKKyAg
ICAgICAgZGVzdHJveSgpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworYm9vbCBHTWFpbkxv
b3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAg
aWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1fc29j
a2V0Q2FsbGJhY2spOworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOworICAgIG1f
c3RhdHVzID0gRGlzcGF0Y2hlZDsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZChtX2NhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5nZXQo
KTsKKyAgICBib29sIHJldHZhbCA9IG1fc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKKyAgICBp
ZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkpCisgICAgICAgIGRlc3Ryb3ko
KTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0
cm95KCkKK3sKKyAgICBhdXRvIGRlc3Ryb3lDYWxsYmFjayA9IHN0ZDo6bW92ZShtX2Rlc3Ryb3lD
YWxsYmFjayk7CisgICAgYXV0byBkZWxldGVPbkRlc3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsK
KyAgICByZXNldCgpOworICAgIGlmIChkZXN0cm95Q2FsbGJhY2spCisgICAgICAgIGRlc3Ryb3lD
YWxsYmFjaygpOworCisgICAgaWYgKGRlbGV0ZU9uRGVzdHJveSA9PSBEb05vdERlbGV0ZU9uRGVz
dHJveSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK2dib29sZWFu
IEdNYWluTG9vcFNvdXJjZTo6dm9pZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNvdXJjZSogc291
cmNlKQoreworICAgIHNvdXJjZS0+dm9pZENhbGxiYWNrKCk7CisgICAgcmV0dXJuIEdfU09VUkNF
X1JFTU9WRTsKK30KKworZ2Jvb2xlYW4gR01haW5Mb29wU291cmNlOjpib29sU291cmNlQ2FsbGJh
Y2soR01haW5Mb29wU291cmNlKiBzb3VyY2UpCit7CisgICAgcmV0dXJuIHNvdXJjZS0+Ym9vbENh
bGxiYWNrKCkgPT0gQ29udGludWU7Cit9CisKK2dib29sZWFuIEdNYWluTG9vcFNvdXJjZTo6c29j
a2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIEdNYWlu
TG9vcFNvdXJjZSogc291cmNlKQoreworICAgIHJldHVybiBzb3VyY2UtPnNvY2tldENhbGxiYWNr
KGNvbmRpdGlvbikgPT0gQ29udGludWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oIGIvU291cmNl
L1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42ZDAzMmMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
Z29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR01haW5Mb29wU291
cmNlX2gKKyNkZWZpbmUgR01haW5Mb29wU291cmNlX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7CisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBHTWFpbkxvb3BTb3VyY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdN
YWluTG9vcFNvdXJjZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIEdNYWluTG9vcFNvdXJjZSYgY3JlYXRlQW5kRGVsZXRlT25EZXN0cm95KCk7CisK
KyAgICBHTWFpbkxvb3BTb3VyY2UoKTsKKyAgICB+R01haW5Mb29wU291cmNlKCk7CisKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBTdG9wID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgQ29u
dGludWUgPSB0cnVlOworCisgICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0OworICAgIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKKworICAgIHZvaWQgc2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxU
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWlu
Q29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUs
IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4sIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVM
VCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFp
bkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0NvbmRpdGlvbik+LCBHU29ja2V0KiwgR0lPQ29uZGl0
aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdN
YWluQ29udGV4dCogPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+LCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxw
dHIpOworICAgIHZvaWQgc2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoKT4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0
eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVu
Y3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hl
ZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiwg
c3RkOjpjaHJvbm86OnNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNv
bnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiwgc3RkOjpjaHJvbm86OnNlY29uZHMsIGlu
dCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBk
ZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7CisgICAg
dm9pZCBjYW5jZWwoKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIERlbGV0ZU9uRGVzdHJveVR5cGUg
eyBEZWxldGVPbkRlc3Ryb3ksIERvTm90RGVsZXRlT25EZXN0cm95IH07CisgICAgR01haW5Mb29w
U291cmNlKERlbGV0ZU9uRGVzdHJveVR5cGUpOworCisgICAgZW51bSBTdGF0dXMgeyBSZWFkeSwg
U2NoZWR1bGVkLCBEaXNwYXRjaGVkIH07CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBz
Y2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlv
cml0eSwgR01haW5Db250ZXh0Kik7CisgICAgdm9pZCBzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29u
c3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7
CisgICAgdm9pZCB2b2lkQ2FsbGJhY2soKTsKKyAgICBib29sIGJvb2xDYWxsYmFjaygpOworICAg
IGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsK
KworICAgIHN0YXRpYyBnYm9vbGVhbiB2b2lkU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNl
Kik7CisgICAgc3RhdGljIGdib29sZWFuIGJvb2xTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3Vy
Y2UqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc29ja2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCos
IEdJT0NvbmRpdGlvbiwgR01haW5Mb29wU291cmNlKik7CisKKyAgICBEZWxldGVPbkRlc3Ryb3lU
eXBlIG1fZGVsZXRlT25EZXN0cm95OworICAgIFN0YXR1cyBtX3N0YXR1czsKKyAgICBHUmVmUHRy
PEdTb3VyY2U+IG1fc291cmNlOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxh
YmxlOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV92b2lkQ2FsbGJhY2s7CisgICAgc3Rk
OjpmdW5jdGlvbjxib29sICgpPiBtX2Jvb2xDYWxsYmFjazsKKyAgICBzdGQ6OmZ1bmN0aW9uPGJv
b2wgKEdJT0NvbmRpdGlvbik+IG1fc29ja2V0Q2FsbGJhY2s7CisgICAgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiBtX2Rlc3Ryb3lDYWxsYmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkdNYWluTG9vcFNvdXJjZTsKKworI2VuZGlmIC8vIEdNYWluTG9vcFNvdXJjZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAKaW5kZXggYzA1N2VhNy4uMDEzNGY1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKIAotI2luY2x1ZGUgPGds
aWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KIAogbmFtZXNw
YWNlIFdURiB7CiAKQEAgLTM4LDE1ICszOCw5IEBAIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQ
bGF0Zm9ybSgpCiB7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB0aW1lb3V0RmlyZWQoZ3BvaW50ZXIp
Ci17Ci0gICAgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpOwotICAgIHJldHVybiBG
QUxTRTsKLX0KLQogdm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCkK
IHsKLSAgICBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCB0aW1lb3V0RmlyZWQs
IDAsIDApOworICAgIEdNYWluTG9vcFNvdXJjZTo6Y3JlYXRlQW5kRGVsZXRlT25EZXN0cm95KCku
c2NoZWR1bGUoIltXZWJLaXRdIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQiLCBkaXNw
YXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9ndGsvUnVuTG9vcEd0ay5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9ndGsvUnVuTG9vcEd0ay5jcHAKaW5kZXggYTZmYjJmMi4uYmZhNjY4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BHdGsuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L2d0ay9SdW5Mb29wR3RrLmNwcApAQCAtOTcsMjUgKzk3LDE2IEBAIHZvaWQgUnVuTG9vcDo6c3Rv
cCgpCiAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobGFzdE1haW5Mb29wLmdldCgpKTsKIH0KIAot
Z2Jvb2xlYW4gUnVuTG9vcDo6cXVldWVXb3JrKFJ1bkxvb3AqIHJ1bkxvb3ApCi17Ci0gICAgcnVu
TG9vcC0+cGVyZm9ybVdvcmsoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KIHZvaWQgUnVuTG9v
cDo6d2FrZVVwKCkKIHsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IHNvdXJjZSA9IGFkb3B0R1JlZihn
X2lkbGVfc291cmNlX25ldygpKTsKLSAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoc291cmNlLmdl
dCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhzb3Vy
Y2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZSdW5Mb29wOjpxdWV1ZVdv
cmspLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9hdHRhY2goc291cmNlLmdldCgpLCBtX3J1bkxv
b3BDb250ZXh0LmdldCgpKTsKLQorICAgIHJlZigpOworICAgIEdNYWluTG9vcFNvdXJjZTo6Y3Jl
YXRlQW5kRGVsZXRlT25EZXN0cm95KCkuc2NoZWR1bGUoIltXZWJLaXRdIFJ1bkxvb3Agd29yayIs
IHN0ZDo6YmluZCgmUnVuTG9vcDo6cGVyZm9ybVdvcmssIHRoaXMpLAorICAgICAgICBHX1BSSU9S
SVRZX0RFRkFVTFQsIFt0aGlzXSB7IGRlcmVmKCk7IH0pOwogICAgIGdfbWFpbl9jb250ZXh0X3dh
a2V1cChtX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKIH0KIAogUnVuTG9vcDo6VGltZXJCYXNlOjpU
aW1lckJhc2UoUnVuTG9vcCYgcnVuTG9vcCkKICAgICA6IG1fcnVuTG9vcChydW5Mb29wKQotICAg
ICwgbV90aW1lclNvdXJjZSgwKQogewogfQogCkBAIC0xMjQsNDYgKzExNSwyMCBAQCBSdW5Mb29w
OjpUaW1lckJhc2U6On5UaW1lckJhc2UoKQogICAgIHN0b3AoKTsKIH0KIAotdm9pZCBSdW5Mb29w
OjpUaW1lckJhc2U6OmNsZWFyVGltZXJTb3VyY2UoKQotewotICAgIG1fdGltZXJTb3VyY2UgPSAw
OwotfQotCi1nYm9vbGVhbiBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayhS
dW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyKQotewotICAgIEdTb3VyY2UqIGN1cnJlbnRUaW1lclNv
dXJjZSA9IHRpbWVyLT5tX3RpbWVyU291cmNlLmdldCgpOwotICAgIGJvb2wgaXNSZXBlYXRpbmcg
PSB0aW1lci0+aXNSZXBlYXRpbmcoKTsKLSAgICAvLyBUaGlzIGNhbiBjaGFuZ2UgdGhlIHRpbWVy
U291cmNlIGJ5IHN0YXJ0aW5nIGEgbmV3IHRpbWVyIHdpdGhpbiB0aGUgY2FsbGJhY2suCi0gICAg
aWYgKCFpc1JlcGVhdGluZyAmJiBjdXJyZW50VGltZXJTb3VyY2UgPT0gdGltZXItPm1fdGltZXJT
b3VyY2UuZ2V0KCkpCi0gICAgICAgIHRpbWVyLT5jbGVhclRpbWVyU291cmNlKCk7Ci0KLSAgICB0
aW1lci0+ZmlyZWQoKTsKLSAgICByZXR1cm4gaXNSZXBlYXRpbmc7Ci19Ci0KIHZvaWQgUnVuTG9v
cDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKIHsK
LSAgICBpZiAobV90aW1lclNvdXJjZSkKLSAgICAgICAgc3RvcCgpOwotCi0gICAgbV90aW1lclNv
dXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4o
ZmlyZUludGVydmFsICogMTAwMCkpKTsKLSAgICBtX2lzUmVwZWF0aW5nID0gcmVwZWF0OwotICAg
IGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLmdldCgpLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2sp
LCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lclNvdXJjZS5nZXQoKSwgbV9y
dW5Mb29wLm1fcnVuTG9vcENvbnRleHQuZ2V0KCkpOworICAgIG1fdGltZXJTb3VyY2Uuc2NoZWR1
bGVBZnRlckRlbGF5KCJbV2ViS2l0XSBSdW5Mb29wOjpUaW1lciIsIHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoKT4oW3RoaXMsIHJlcGVhdF0geyBmaXJlZCgpOyByZXR1cm4gcmVwZWF0OyB9KSwKKyAgICAg
ICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4o
c3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oZmlyZUludGVydmFsKSkpOwogfQogCiB2b2lk
IFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCiB7Ci0gICAgaWYgKCFtX3RpbWVyU291cmNlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXJTb3VyY2UuZ2V0
KCkpOwotICAgIGNsZWFyVGltZXJTb3VyY2UoKTsKKyAgICBtX3RpbWVyU291cmNlLmNhbmNlbCgp
OwogfQogCiBib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAogewotICAg
IHJldHVybiBtX3RpbWVyU291cmNlOworICAgIHJldHVybiBtX3RpbWVyU291cmNlLmlzU2NoZWR1
bGVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>