<?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>189699</bug_id>
          
          <creation_ts>2018-09-18 06:49:09 -0700</creation_ts>
          <short_desc>[GStreamer] Utilities cleanups</short_desc>
          <delta_ts>2018-09-24 03:21:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>aboya</cc>
    
    <cc>calvaris</cc>
    
    <cc>cturner</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1460573</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-18 06:49:09 -0700</bug_when>
    <thetext>Some unmapGstBuffer() call were left for years in the httpsrc element. createGstBufferForData() has only one call-site so is useless as an abstraction.
The mapGstBuffer functions are used only by the webaudiosrc element and could likely be replaced by the GstMappedBuffer class now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460636</commentid>
    <comment_count>1</comment_count>
      <attachid>350030</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-18 10:19:22 -0700</bug_when>
    <thetext>Created attachment 350030
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460871</commentid>
    <comment_count>2</comment_count>
      <attachid>350030</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-09-19 01:25:14 -0700</bug_when>
    <thetext>Comment on attachment 350030
Patch

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

Nice cleanup :-). Informal r+ from me with a couple of comments I leave to your taste.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:333
&gt; +        mappedBuffers.reserveInitialCapacity(priv-&gt;sources.size());

Do you prefer this to Vector&lt;RefPtr&lt;GstMappedBuffer&gt;&gt; mappedBuffers(priv-&gt;sources.size())?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:350
&gt; +            mappedBuffers.uncheckedAppend(WTFMove(mappedBuffer));

Since they&apos;re being moved here, it seems we could instead have a move ctor rather than inheriting the RefCounted class. The intent for the mapped buffer class is more for local scopes rather than being passed around function boundaries.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:356
&gt; +        priv-&gt;provider-&gt;render(nullptr, priv-&gt;bus, priv-&gt;framesToPull);

We have to be very careful not to drop this line out of its scope, there&apos;s more indirection now as to what memory this relies on (indirection from the setChannelMemory bit above). This code would be easier to read if the allocateBuffersAndRenderAudio step was in a separate method from the pushRenderedAudioBuffers step imho, I leave it to your taste however.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:935
&gt; +        GstBuffer* subBuffer = gst_buffer_new_wrapped(g_memdup(data + currentOffset, currentOffsetSize), currentOffsetSize);

What&apos;s the reason for forcing copies here? I initially went with gst_buffer_copy_region because for memory blocks that aren&apos;t NO_SHARE, it can save reallocating and instead reuse the underlying memory objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460872</commentid>
    <comment_count>3</comment_count>
      <attachid>350030</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-09-19 01:27:57 -0700</bug_when>
    <thetext>Comment on attachment 350030
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:935
&gt;&gt; +        GstBuffer* subBuffer = gst_buffer_new_wrapped(g_memdup(data + currentOffset, currentOffsetSize), currentOffsetSize);
&gt; 
&gt; What&apos;s the reason for forcing copies here? I initially went with gst_buffer_copy_region because for memory blocks that aren&apos;t NO_SHARE, it can save reallocating and instead reuse the underlying memory objects.

Sorry, I misread this as still using the old buffer! Ignore please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460895</commentid>
    <comment_count>4</comment_count>
      <attachid>350030</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-19 02:53:22 -0700</bug_when>
    <thetext>Comment on attachment 350030
Patch

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

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:333
&gt;&gt; +        mappedBuffers.reserveInitialCapacity(priv-&gt;sources.size());
&gt; 
&gt; Do you prefer this to Vector&lt;RefPtr&lt;GstMappedBuffer&gt;&gt; mappedBuffers(priv-&gt;sources.size())?

I&apos;m not sure what&apos;s the difference, to be honest :) I&apos;ve just reused the same pattern as `channelBufferList`

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:350
&gt;&gt; +            mappedBuffers.uncheckedAppend(WTFMove(mappedBuffer));
&gt; 
&gt; Since they&apos;re being moved here, it seems we could instead have a move ctor rather than inheriting the RefCounted class. The intent for the mapped buffer class is more for local scopes rather than being passed around function boundaries.

Ok, that makes sense!

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:356
&gt;&gt; +        priv-&gt;provider-&gt;render(nullptr, priv-&gt;bus, priv-&gt;framesToPull);
&gt; 
&gt; We have to be very careful not to drop this line out of its scope, there&apos;s more indirection now as to what memory this relies on (indirection from the setChannelMemory bit above). This code would be easier to read if the allocateBuffersAndRenderAudio step was in a separate method from the pushRenderedAudioBuffers step imho, I leave it to your taste however.

Great idea!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460896</commentid>
    <comment_count>5</comment_count>
      <attachid>350100</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-19 02:57:36 -0700</bug_when>
    <thetext>Created attachment 350100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460926</commentid>
    <comment_count>6</comment_count>
      <attachid>350100</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-09-19 06:22:42 -0700</bug_when>
    <thetext>Comment on attachment 350100
Patch

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

A couple comments about the resource design.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:-85
&gt; -    WTF_MAKE_NONCOPYABLE(GstMappedBuffer);

Because we&apos;re managing a resource in this class, either we disallow copying as was initially the case, or we start applying the rule-of-three, that being if the class has a destructor, it generally needs at least a copy and copy-assignment operator. Otherwise it&apos;s quite easy to get into situations where we &quot;double-free&quot; the mapped buffer. I would recommend (if possible) keeping the class as non-copyable but moveable, since that matches the use-case as I understand it here. If you need copy semantics, the destructor should at least be modified to set the m_isValid=false to avoid double unmappings, but there can be other problems relying on the default synthesized copy methods here.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:82
&gt; +    GstMappedBuffer(GstMappedBuffer&amp;&amp; other)

It is idiomatic to use initialization syntax here, : m_isValid(other.m_isValid), m_info(other.m_info) ... { other.m_isValid = true }, it avoids default constructing the members only to overwrite them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460928</commentid>
    <comment_count>7</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-09-19 06:24:20 -0700</bug_when>
    <thetext>(In reply to Charlie Turner from comment #6)
&gt; It is idiomatic to use initialization syntax here, :
&gt; m_isValid(other.m_isValid), m_info(other.m_info) ... { other.m_isValid =
&gt; true }, it avoids default constructing the members only to overwrite them.

I meant to say other.m_isValid = false :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460929</commentid>
    <comment_count>8</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-09-19 06:26:16 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #4)
&gt; Comment on attachment 350030 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=350030&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:333
&gt; &gt;&gt; +        mappedBuffers.reserveInitialCapacity(priv-&gt;sources.size());
&gt; &gt; 
&gt; &gt; Do you prefer this to Vector&lt;RefPtr&lt;GstMappedBuffer&gt;&gt; mappedBuffers(priv-&gt;sources.size())?
&gt; 
&gt; I&apos;m not sure what&apos;s the difference, to be honest :) I&apos;ve just reused the
&gt; same pattern as `channelBufferList`

You save a separate method call to reserveInitialCapacity after the initial constructor, but this is a minor point. They&apos;ll basically be no-ops anyway if priv-&gt;sources.size() &lt; ~16 with the SVO. Not sure what is idiomatic in this area of WebCore tbh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460952</commentid>
    <comment_count>9</comment_count>
      <attachid>350100</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2018-09-19 07:21:27 -0700</bug_when>
    <thetext>Comment on attachment 350100
Patch

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

Other than the nit and what Charlie said already, no additional comments from my side.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:346
&gt; +        GstMappedBuffer mappedBuffer(buffer.get(), GST_MAP_READWRITE);

A nit for the future: we could overload the GstMapperBuffer ctor to take a RefPtr&lt;GstBuffer&gt;&amp; and move the get inside that. I think that API could be a bit more friendly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460957</commentid>
    <comment_count>10</comment_count>
      <attachid>350115</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-19 07:49:10 -0700</bug_when>
    <thetext>Created attachment 350115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461067</commentid>
    <comment_count>11</comment_count>
      <attachid>350115</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-09-19 12:11:35 -0700</bug_when>
    <thetext>Comment on attachment 350115
Patch

Informal r+ from me, thanks Philippe!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461273</commentid>
    <comment_count>12</comment_count>
      <attachid>350115</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2018-09-20 01:15:26 -0700</bug_when>
    <thetext>Comment on attachment 350115
Patch

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

Thanks Phil for the patch! And thanks Charlie for the informal reviews!

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:83
&gt; +    GstMappedBuffer() = default;

Do we need this constructor? Does it make sense? I cannot think of a useful case of this. Maybe = delete?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461277</commentid>
    <comment_count>13</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-20 01:43:02 -0700</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #12)
&gt; Comment on attachment 350115 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=350115&amp;action=review
&gt; 
&gt; Thanks Phil for the patch! And thanks Charlie for the informal reviews!
&gt; 

Thanks for the reviews Calvaris &amp; Charlie :)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:83
&gt; &gt; +    GstMappedBuffer() = default;
&gt; 
&gt; Do we need this constructor? Does it make sense? I cannot think of a useful
&gt; case of this. Maybe = delete?

Yes and yes. This change is the consequence of not using mappedBuffers.reserveInitialCapacity() anymore. Without it:

In file included from ../../Source/WebCore/platform/audio/AudioBus.h:36,
                 from ../../Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:26:
DerivedSources/ForwardingHeaders/wtf/Vector.h: In instantiation of ‘static void WTF::VectorInitializer&lt;true, false, T&gt;::initializeIfNonPOD(T*, T*) [with T = WebCore::GstMappedBuffer]’:
DerivedSources/ForwardingHeaders/wtf/Vector.h:245:129:   required from ‘static void WTF::VectorTypeOperations&lt;T&gt;::initializeIfNonPOD(T*, T*) [with T = WebCore::GstMappedBuffer]’
DerivedSources/ForwardingHeaders/wtf/Vector.h:631:47:   required from ‘WTF::Vector&lt; &lt;template-parameter-1-1&gt;, &lt;anonymous&gt;, &lt;template-parameter-1-3&gt;, &lt;anonymous&gt; &gt;::Vector(size_t) [with T = WebCore::GstMappedBuffer; long unsigned int inlineCapacity = 0; OverflowHandler = WTF::CrashOnOverflow; long unsigned int minCapacity = 16; size_t = long unsigned int]’
../../Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:329:63:   required from here
DerivedSources/ForwardingHeaders/wtf/Vector.h:85:13: error: no matching function for call to ‘WebCore::GstMappedBuffer::GstMappedBuffer()’
             new (NotNull, cur) T();
             ^~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:28:
../../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:99:5: note: candidate: ‘WebCore::GstMappedBuffer::GstMappedBuffer(GstBuffer*, int)’
     GstMappedBuffer(GstBuffer* buffer, int flags)
     ^~~~~~~~~~~~~~~
../../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:99:5: note:   candidate expects 2 arguments, 0 provided
../../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:91:5: note: candidate: ‘WebCore::GstMappedBuffer::GstMappedBuffer(GstBuffer*, GstMapFlags)’
     GstMappedBuffer(GstBuffer* buffer, GstMapFlags flags)
     ^~~~~~~~~~~~~~~
../../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:91:5: note:   candidate expects 2 arguments, 0 provided
../../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:83:5: note: candidate: ‘WebCore::GstMappedBuffer::GstMappedBuffer(WebCore::GstMappedBuffer&amp;&amp;)’
     GstMappedBuffer(GstMappedBuffer&amp;&amp; other)
     ^~~~~~~~~~~~~~~
../../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:83:5: note:   candidate expects 1 argument, 0 provided</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461280</commentid>
    <comment_count>14</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-20 02:18:19 -0700</bug_when>
    <thetext>Committed r236255: &lt;https://trac.webkit.org/changeset/236255&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461281</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-20 02:19:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/44634143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462031</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-21 13:06:15 -0700</bug_when>
    <thetext>This introduced ~35 webaudio test crashes:

Results: https://build.webkit.org/results/GTK%20Linux%2064-bit%20Release%20(Tests)/r236255%20(8237)/results.html

Example backtrace:

Thread 1 (Thread 0x7fbe579ff700 (LWP 41612)):
#0  __memset_avx2_unaligned_erms () at ../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:163
#1  0x00007fbed0c4653b in _ZN7WebCore8AudioBus16speakersCopyFromERKS0_ () from /home/slave/webkitgtk/gtk-linux-64-release/build/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#2  0x00007fbed040bb95 in _ZN7WebCore20AudioDestinationNode6renderEPNS_8AudioBusES2_m () from /home/slave/webkitgtk/gtk-linux-64-release/build/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#3  0x00007fbed12a36e7 in _ZL21webKitWebAudioSrcLoopP18_WebKitWebAudioSrc () from /home/slave/webkitgtk/gtk-linux-64-release/build/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#4  0x00007fbec9f43361 in gst_task_func () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/gstreamer-1.14.3/gst/gsttask.c:332
#5  0x00007fbec8e885ae in g_thread_pool_thread_proxy () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/glib-2.54.2/glib/gthreadpool.c:307
#6  0x00007fbec8e87bd5 in g_thread_proxy () at /home/slave/webkitgtk/gtk-linux-64-release-tests/build/WebKitBuild/DependenciesGTK/Source/glib-2.54.2/glib/gthread.c:784
#7  0x00007fbecab43494 in start_thread (arg=0x7fbe579ff700) at pthread_create.c:333
#8  0x00007fbec6f6793f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462035</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-21 13:07:07 -0700</bug_when>
    <thetext>Reverted r236255 for reason:

Many WebAudio crashes

Committed r236352: &lt;https://trac.webkit.org/changeset/236352&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462058</commentid>
    <comment_count>18</comment_count>
      <attachid>350417</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-21 13:44:32 -0700</bug_when>
    <thetext>Created attachment 350417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462060</commentid>
    <comment_count>19</comment_count>
      <attachid>350417</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-21 13:45:18 -0700</bug_when>
    <thetext>Comment on attachment 350417
Patch

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

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:331
&gt; +    mappedBuffers.reserveInitialCapacity(priv-&gt;sources.size());

Turns out it was a bad idea to not call this....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462325</commentid>
    <comment_count>20</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-22 01:43:13 -0700</bug_when>
    <thetext>*** Bug 189875 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462620</commentid>
    <comment_count>21</comment_count>
      <attachid>350417</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2018-09-23 23:00:15 -0700</bug_when>
    <thetext>Comment on attachment 350417
Patch

I agree on the changes but I guess they have to apply on what is on trunk, right? Cause the diff looks like the old one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462642</commentid>
    <comment_count>22</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-24 00:58:33 -0700</bug_when>
    <thetext>They apply on trunk. Original patch was rolled-out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462664</commentid>
    <comment_count>23</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-09-24 03:21:01 -0700</bug_when>
    <thetext>Committed r236396: &lt;https://trac.webkit.org/changeset/236396&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350030</attachid>
            <date>2018-09-18 10:19:22 -0700</date>
            <delta_ts>2018-09-19 02:57:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189699-20180918181921.patch</filename>
            <type>text/plain</type>
            <size>14200</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc4ZGYxNTIxMjMyMTRi
MWEyZmIxYTVmZjM3MGY2ODdiZTdmOTVhNi4uMzM3NDk5ZWM0ZDBkNjM3ZmEzMTk0ZDNhZGFmNDFi
NWQzNDAxZGZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE4LTA5LTE4ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBVdGlsaXRpZXMgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4OTY5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBHc3RNYXBwZWRCdWZmZXIgaXMgbm93IHJlZmNvdW50ZWQgc28gdGhh
dCBpdCBjYW4gYmUgZWFzaWx5CisgICAgICAgIHJldXNlZCBpbiB0aGUgd2ViYXVkaW9zcmMgZWxl
bWVudC4gVGhlIG5vdy11bnVzZWQgY29ycmVzcG9uZGluZworICAgICAgICBidWZmZXItbWFwcGlu
ZyB1dGlsaXRpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgY29kZS1iYXNlLgorCisgICAgICAgIFRo
ZSBIVFRQIHNvdXJjZSBlbGVtZW50IHVzZWQgdG8gaGFuZGxlIGEgR3N0QnVmZmVyIGluIGl0cyBw
cml2YXRlCisgICAgICAgIHN0cnVjdHVyZSBidXQgdGhpcyBpcyBubyBsb25nZXIgcmVxdWlyZWQg
c2luY2UgZGF0YSBpcyBub3cgcHVzaGVkCisgICAgICAgIGluIGNodW5rcywgc2VlIGJ1ZyAjMTgy
ODI5LgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlv
U291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU3JjTG9vcCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHc3RCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlR3N0QnVmZmVyRm9yRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjptYXBHc3RCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dW5tYXBHc3RCdWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRl
KTogTmV3IG1ldGhvZCByZXR1cm5pbmcgYQorICAgICAgICByZWZlcmVuY2UgdG8gYSBuZXdseSBj
cmVhdGVkIEdzdE1hcHBlZEJ1ZmZlciBpbnN0YW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdl
YktpdFdlYlNyY1N0b3ApOiBSZW1vdmUgcmVmZXJlbmNlIHRvIHVudXNlZCBHc3RCdWZmZXIuCisg
ICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKTogRGl0
dG8uCisKIDIwMTgtMDktMTggIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbRU1FXVtHU3RyZWFtZXJdIFRoZSBjdXJyZW50IEVNRSBpbXBs
ZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgdGhlIHdhaXRpbmdmb3JrZXkgZXZlbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9n
c3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDU1Y2RiNDJj
YzZlZGQwMTU4ZmM5MTY0NWQ0MDk5OGI2NjgyZjk1ZmMuLmZkOTk1YWJmZTQ1NDQ4YzE4ZWVjMGY3
N2M3NTQyYjg1MWM4MWMwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmNwcApAQCAtMzI3LDM3ICszMjcsMzkgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2Vi
QXVkaW9TcmNMb29wKFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMpCiAKICAgICBWZWN0b3I8R1JlZlB0
cjxHc3RCdWZmZXI+PiBjaGFubmVsQnVmZmVyTGlzdDsKICAgICBjaGFubmVsQnVmZmVyTGlzdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHByaXYtPnNvdXJjZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcHJpdi0+c291cmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBH
UmVmUHRyPEdzdEJ1ZmZlcj4gYnVmZmVyOwotICAgICAgICBHc3RGbG93UmV0dXJuIHJldCA9IGdz
dF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcihwcml2LT5wb29sLmdldCgpLCAmYnVmZmVyLm91
dFB0cigpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAg
ICAgICAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBjaGFubmVsQnVmZmVyTGlzdCkKLSAgICAgICAg
ICAgICAgICB1bm1hcEdzdEJ1ZmZlcihidWZmZXIuZ2V0KCkpOwogCi0gICAgICAgICAgICAvLyBG
TFVTSElORyBhbmQgRU9TIGFyZSBub3QgZXJyb3JzLgotICAgICAgICAgICAgaWYgKHJldCA8IEdT
VF9GTE9XX0VPUyB8fCByZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkKLSAgICAgICAgICAgICAg
ICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIFBBRCwgKCJJbnRlcm5hbCBXZWJBdWRpb1Ny
YyBlcnJvciIpLCAoIkZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGZsb3c6ICVzIiwgZ3N0
X2Zsb3dfZ2V0X25hbWUocmV0KSkpOwotICAgICAgICAgICAgZ3N0X3Rhc2tfc3RvcChzcmMtPnBy
aXYtPnRhc2suZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+PiBtYXBwZWRCdWZmZXJzOworICAgICAgICBtYXBw
ZWRCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJpdi0+c291cmNlcy5zaXplKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJpdi0+c291cmNlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlcjsKKyAgICAgICAgICAg
IEdzdEZsb3dSZXR1cm4gcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKHByaXYt
PnBvb2wuZ2V0KCksICZidWZmZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICAgICAgaWYg
KHJldCAhPSBHU1RfRkxPV19PSykgeworICAgICAgICAgICAgICAgIC8vIEZMVVNISU5HIGFuZCBF
T1MgYXJlIG5vdCBlcnJvcnMuCisgICAgICAgICAgICAgICAgaWYgKHJldCA8IEdTVF9GTE9XX0VP
UyB8fCByZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkKKyAgICAgICAgICAgICAgICAgICAgR1NU
X0VMRU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBQQUQsICgiSW50ZXJuYWwgV2ViQXVkaW9TcmMgZXJy
b3IiKSwgKCJGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBmbG93OiAlcyIsIGdzdF9mbG93
X2dldF9uYW1lKHJldCkpKTsKKyAgICAgICAgICAgICAgICBnc3RfdGFza19zdG9wKHNyYy0+cHJp
di0+dGFzay5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBBU1NFUlQoYnVmZmVyKTsKKyAgICAgICAgICAgIEdTVF9CVUZGRVJfVElN
RVNUQU1QKGJ1ZmZlci5nZXQoKSkgPSB0aW1lc3RhbXA7CisgICAgICAgICAgICBHU1RfQlVGRkVS
X0RVUkFUSU9OKGJ1ZmZlci5nZXQoKSkgPSBkdXJhdGlvbjsKKyAgICAgICAgICAgIGF1dG8gbWFw
cGVkQnVmZmVyID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmZmVyLmdldCgpLCBHU1RfTUFQ
X1JFQURXUklURSk7CisgICAgICAgICAgICBBU1NFUlQobWFwcGVkQnVmZmVyKTsKKyAgICAgICAg
ICAgIG1hcHBlZEJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobWFwcGVkQnVmZmVyKSk7
CisgICAgICAgICAgICBwcml2LT5idXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KG1hcHBlZEJ1ZmZlcnNbaV0tPmRhdGEoKSksIHByaXYtPmZyYW1lc1RvUHVs
bCk7CisgICAgICAgICAgICBjaGFubmVsQnVmZmVyTGlzdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShidWZmZXIpKTsKICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChidWZmZXIpOwotICAgICAg
ICBHU1RfQlVGRkVSX1RJTUVTVEFNUChidWZmZXIuZ2V0KCkpID0gdGltZXN0YW1wOwotICAgICAg
ICBHU1RfQlVGRkVSX0RVUkFUSU9OKGJ1ZmZlci5nZXQoKSkgPSBkdXJhdGlvbjsKLSAgICAgICAg
bWFwR3N0QnVmZmVyKGJ1ZmZlci5nZXQoKSwgR1NUX01BUF9SRUFEV1JJVEUpOwotICAgICAgICBw
cml2LT5idXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGdl
dEdzdEJ1ZmZlckRhdGFQb2ludGVyKGJ1ZmZlci5nZXQoKSkpLCBwcml2LT5mcmFtZXNUb1B1bGwp
OwotICAgICAgICBjaGFubmVsQnVmZmVyTGlzdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShidWZm
ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBsb2NhbC9saXZlIGF1ZGlv
IGlucHV0LgorICAgICAgICBwcml2LT5wcm92aWRlci0+cmVuZGVyKG51bGxwdHIsIHByaXYtPmJ1
cywgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCi0gICAgcHJpdi0+cHJvdmlkZXItPnJlbmRl
cihudWxscHRyLCBwcml2LT5idXMsIHByaXYtPmZyYW1lc1RvUHVsbCk7Ci0KICAgICBBU1NFUlQo
Y2hhbm5lbEJ1ZmZlckxpc3Quc2l6ZSgpID09IHByaXYtPnNvdXJjZXMuc2l6ZSgpKTsKICAgICBi
b29sIGZhaWxlZCA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcml2LT5z
b3VyY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIFVubWFwIGJlZm9yZSBwYXNzaW5nIG9u
IHRoZSBidWZmZXIuCiAgICAgICAgIGF1dG8mIGJ1ZmZlciA9IGNoYW5uZWxCdWZmZXJMaXN0W2ld
OwotICAgICAgICB1bm1hcEdzdEJ1ZmZlcihidWZmZXIuZ2V0KCkpOwogCiAgICAgICAgIGlmIChw
cml2LT5lbmFibGVHYXBCdWZmZXJTdXBwb3J0ICYmIHByaXYtPmJ1cy0+Y2hhbm5lbChpKS0+aXNT
aWxlbnQoKSkKICAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQoYnVmZmVyLmdldCgpLCBH
U1RfQlVGRkVSX0ZMQUdfR0FQKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKaW5kZXggNjIz
NTNlNGYzZTY4NDdmOWYwY2VkMzVkZTI0NmIwNTFhODJkZDk2My4uNjA1ZDY3MjcyMTQ0OTI5MDRi
MzJlMzdhN2MxM2M5NDUyMTk5OThhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKQEAg
LTQwLDggKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBjaGFyKiB3ZWJr
aXRHc3RNYXBJbmZvUXVhcmtTdHJpbmcgPSAid2Via2l0LWdzdC1tYXAtaW5mbyI7Ci0KIEdzdFBh
ZCogd2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUoR3N0U3RhdGljUGFkVGVtcGxh
dGUqIHN0YXRpY1BhZFRlbXBsYXRlLCBjb25zdCBnY2hhciogbmFtZSwgR3N0UGFkKiB0YXJnZXQp
CiB7CiAgICAgR3N0UGFkKiBwYWQ7CkBAIC0xNDMsMjYgKzE0MSw2IEBAIGJvb2wgZ2V0U2FtcGxl
VmlkZW9JbmZvKEdzdFNhbXBsZSogc2FtcGxlLCBHc3RWaWRlb0luZm8mIHZpZGVvSW5mbykKIH0K
ICNlbmRpZgogCi1Hc3RCdWZmZXIqIGNyZWF0ZUdzdEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlcikK
LXsKLSAgICBnc2l6ZSBidWZmZXJTaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOwot
ICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGJ1ZmZl
clNpemUpOwotCi0gICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Z3N0X2J1ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZmZXIsIHN0YXRpY19jYXN0PEdzdEJ1
ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBKSwgMCwgYnVmZmVyU2l6ZSk7
Ci0gICAgcmV0dXJuIG5ld0J1ZmZlcjsKLX0KLQotR3N0QnVmZmVyKiBjcmVhdGVHc3RCdWZmZXJG
b3JEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgR3N0QnVmZmVyKiBi
dWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MobGVuZ3RoKTsKLQotICAgIGdzdF9idWZm
ZXJfZmlsbChidWZmZXIsIDAsIGRhdGEsIGxlbmd0aCk7Ci0KLSAgICByZXR1cm4gYnVmZmVyOwot
fQogCiBjb25zdCBjaGFyKiBjYXBzTWVkaWFUeXBlKGNvbnN0IEdzdENhcHMqIGNhcHMpCiB7CkBA
IC0yMDUsMzggKzE4Myw2IEBAIGJvb2wgYXJlRW5jcnlwdGVkQ2Fwcyhjb25zdCBHc3RDYXBzKiBj
YXBzKQogI2VuZGlmCiB9CiAKLWNoYXIqIGdldEdzdEJ1ZmZlckRhdGFQb2ludGVyKEdzdEJ1ZmZl
ciogYnVmZmVyKQotewotICAgIEdzdE1pbmlPYmplY3QqIG1pbmlPYmplY3QgPSByZWludGVycHJl
dF9jYXN0PEdzdE1pbmlPYmplY3QqPihidWZmZXIpOwotICAgIEdzdE1hcEluZm8qIG1hcEluZm8g
PSBzdGF0aWNfY2FzdDxHc3RNYXBJbmZvKj4oZ3N0X21pbmlfb2JqZWN0X2dldF9xZGF0YShtaW5p
T2JqZWN0LCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyh3ZWJraXRHc3RNYXBJbmZvUXVhcmtT
dHJpbmcpKSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcEluZm8tPmRh
dGEpOwotfQotCi12b2lkIG1hcEdzdEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgdWludDMyX3Qg
ZmxhZ3MpCi17Ci0gICAgR3N0TWFwSW5mbyogbWFwSW5mbyA9IHN0YXRpY19jYXN0PEdzdE1hcElu
Zm8qPihmYXN0TWFsbG9jKHNpemVvZihHc3RNYXBJbmZvKSkpOwotICAgIGlmICghZ3N0X2J1ZmZl
cl9tYXAoYnVmZmVyLCBtYXBJbmZvLCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oZmxhZ3MpKSkg
ewotICAgICAgICBmYXN0RnJlZShtYXBJbmZvKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihi
dWZmZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR3N0TWluaU9iamVjdCogbWlu
aU9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWluaU9iamVjdCo+KGJ1ZmZlcik7Ci0gICAg
Z3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YShtaW5pT2JqZWN0LCBnX3F1YXJrX2Zyb21fc3RhdGlj
X3N0cmluZyh3ZWJraXRHc3RNYXBJbmZvUXVhcmtTdHJpbmcpLCBtYXBJbmZvLCBudWxscHRyKTsK
LX0KLQotdm9pZCB1bm1hcEdzdEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBHc3RN
aW5pT2JqZWN0KiBtaW5pT2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNaW5pT2JqZWN0Kj4o
YnVmZmVyKTsKLSAgICBHc3RNYXBJbmZvKiBtYXBJbmZvID0gc3RhdGljX2Nhc3Q8R3N0TWFwSW5m
byo+KGdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YShtaW5pT2JqZWN0LCBnX3F1YXJrX2Zyb21f
c3RhdGljX3N0cmluZyh3ZWJraXRHc3RNYXBJbmZvUXVhcmtTdHJpbmcpKSk7Ci0KLSAgICBpZiAo
IW1hcEluZm8pCi0gICAgICAgIHJldHVybjsKLQotICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVy
LCBtYXBJbmZvKTsKLSAgICBmYXN0RnJlZShtYXBJbmZvKTsKLX0KLQogVmVjdG9yPFN0cmluZz4g
ZXh0cmFjdEdTdHJlYW1lck9wdGlvbnNGcm9tQ29tbWFuZExpbmUoKQogewogICAgIEdVbmlxdWVP
dXRQdHI8Y2hhcj4gY29udGVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKaW5kZXggNzkzYjRk
ZDc1NjQ4OTdmZDEzMzhlZWMyMDNjZTllOTcxMTQ5OWIxMS4uOWI1Zjg1NWIxYmU3NjM1NmZlZjIz
ZTc4Njg2NzUzMzU1NTU1NGY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApAQCAtNjMsMTQg
KzYzLDkgQEAgYm9vbCBnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhHc3RDYXBzKiwgV2Vi
Q29yZTo6SW50U2l6ZSYsIEdzdFZpZGVvRm9ybWF0JiwKIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXpl
PiBnZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2Fwcyhjb25zdCBHc3RDYXBzKik7CiBib29sIGdldFNh
bXBsZVZpZGVvSW5mbyhHc3RTYW1wbGUqLCBHc3RWaWRlb0luZm8mKTsKICNlbmRpZgotR3N0QnVm
ZmVyKiBjcmVhdGVHc3RCdWZmZXIoR3N0QnVmZmVyKik7Ci1Hc3RCdWZmZXIqIGNyZWF0ZUdzdEJ1
ZmZlckZvckRhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7Ci1jaGFyKiBnZXRHc3RC
dWZmZXJEYXRhUG9pbnRlcihHc3RCdWZmZXIqKTsKIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUo
Y29uc3QgR3N0Q2FwcyopOwogYm9vbCBkb0NhcHNIYXZlVHlwZShjb25zdCBHc3RDYXBzKiwgY29u
c3QgY2hhciopOwogYm9vbCBhcmVFbmNyeXB0ZWRDYXBzKGNvbnN0IEdzdENhcHMqKTsKLXZvaWQg
bWFwR3N0QnVmZmVyKEdzdEJ1ZmZlciosIHVpbnQzMl90KTsKLXZvaWQgdW5tYXBHc3RCdWZmZXIo
R3N0QnVmZmVyKik7CiBWZWN0b3I8U3RyaW5nPiBleHRyYWN0R1N0cmVhbWVyT3B0aW9uc0Zyb21D
b21tYW5kTGluZSgpOwogYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyKHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPFN0cmluZz4+JiYgPSBzdGQ6Om51bGxvcHQpOwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWco
Y29uc3QgY2hhciogbmljayk7CkBAIC04MSwxNCArNzYsMTkgQEAgaW5saW5lIEdzdENsb2NrVGlt
ZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPih0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlhVGltZSkp
OwogfQogCi1jbGFzcyBHc3RNYXBwZWRCdWZmZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEdzdE1hcHBlZEJ1ZmZlcik7CitjbGFzcyBHc3RNYXBwZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxHc3RNYXBwZWRCdWZmZXI+IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdzdE1hcHBl
ZEJ1ZmZlcj4gY3JlYXRlKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdzdE1hcHBlZEJ1ZmZlcihidWZmZXIs
IGZsYWdzKSk7CisgICAgfQorCiAgICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciogYnVmZmVy
LCBHc3RNYXBGbGFncyBmbGFncykKICAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgewog
ICAgICAgICBtX2lzVmFsaWQgPSBnc3RfYnVmZmVyX21hcChtX2J1ZmZlciwgJm1faW5mbywgZmxh
Z3MpOwogICAgIH0KKwogICAgIC8vIFVuZm9ydHVuYXRlbHksIEdTVF9NQVBfUkVBRFdSSVRFIGlz
IGRlZmluZWQgb3V0IG9mIGxpbmUgZnJvbSB0aGUgTWFwRmxhZ3MKICAgICAvLyBlbnVtIGFzIGFu
IGludCwgYW5kIEMrKyBpcyBjYXJlZnVsIHRvIG5vdCBpbXBsaWNpdHkgY29udmVydCBpdCB0byBh
biBlbnVtLgogICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgaW50IGZsYWdz
KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CiBwcml2YXRlOgogICAgIEdzdEJ1ZmZlciog
bV9idWZmZXI7Ci0gICAgR3N0TWFwSW5mbyBtX2luZm87CisgICAgR3N0TWFwSW5mbyBtX2luZm8g
R1NUX01BUF9JTkZPX0lOSVQ7CiAgICAgYm9vbCBtX2lzVmFsaWQgeyBmYWxzZSB9OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCA0ZjFhMDJm
ZDJlYjNhNmQyMDA0ZDRhOGJmNTUwNjgwMzhmODlmMDEzLi4yMzFjZmQyZDFmMzA5Yzc5Yjk4NWNj
ZDU2ZDMwODI1YTEyYjEwM2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcApAQCAtMTAzLDcgKzEwMyw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0
ZSB7CiAgICAgdWludDY0X3QgbWluaW11bUJsb2Nrc2l6ZTsKIAogICAgIFJlZlB0cjxNYWluVGhy
ZWFkTm90aWZpZXI8TWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbj4+IG5vdGlmaWVyOwotICAg
IEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXI7CiB9OwogCiBlbnVtIHsKQEAgLTM2NiwxMSArMzY1
LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYykKIAog
ICAgIGJvb2wgd2FzU2Vla2luZyA9IHN0ZDo6ZXhjaGFuZ2UocHJpdi0+aXNTZWVraW5nLCBmYWxz
ZSk7CiAKLSAgICBpZiAocHJpdi0+YnVmZmVyKSB7Ci0gICAgICAgIHVubWFwR3N0QnVmZmVyKHBy
aXYtPmJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigpOwotICAgIH0K
LQogICAgIHByaXYtPnBhdXNlZCA9IGZhbHNlOwogCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKQEAg
LTg5MSwxNiArODg1LDggQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0
YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IGMKICAgICBXZWJLaXRXZWJT
cmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKICAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiSGF2
ZSAlbGxkIGJ5dGVzIG9mIGRhdGEiLCBwcml2LT5idWZmZXIgPyBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KGdzdF9idWZmZXJfZ2V0X3NpemUocHJpdi0+YnVmZmVyLmdldCgpKSkgOiBsZW5ndGgpOwot
Ci0gICAgQVNTRVJUKCFwcml2LT5idWZmZXIgfHwgZGF0YSA9PSBnZXRHc3RCdWZmZXJEYXRhUG9p
bnRlcihwcml2LT5idWZmZXIuZ2V0KCkpKTsKLQotICAgIGlmIChwcml2LT5idWZmZXIpCi0gICAg
ICAgIHVubWFwR3N0QnVmZmVyKHByaXYtPmJ1ZmZlci5nZXQoKSk7Ci0KICAgICBpZiAocHJpdi0+
aXNTZWVraW5nKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayBpbiBwcm9n
cmVzcywgaWdub3JpbmcgZGF0YSIpOwotICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTA5LDcgKzg5NSw2IEBAIHZvaWQgQ2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
LCBjb25zdCBjCiAgICAgICAgIGlmIChwcml2LT5vZmZzZXQgKyBsZW5ndGggPD0gcHJpdi0+cmVx
dWVzdGVkT2Zmc2V0KSB7CiAgICAgICAgICAgICAvLyBEaXNjYXJkIGFsbCB0aGUgYnVmZmVycyBj
b21pbmcgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbi4KICAgICAgICAgICAgIHBy
aXYtPm9mZnNldCArPSBsZW5ndGg7Ci0gICAgICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05MTcsMjEgKzkwMiwxMiBAQCB2
b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1N
ZWRpYVJlc291cmNlJiwgY29uc3QgYwogICAgICAgICAgICAgZ3VpbnQ2NCBvZmZzZXQgPSBwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQgLSBwcml2LT5vZmZzZXQ7CiAgICAgICAgICAgICBkYXRhICs9IG9m
ZnNldDsKICAgICAgICAgICAgIGxlbmd0aCAtPSBvZmZzZXQ7Ci0gICAgICAgICAgICBpZiAocHJp
di0+YnVmZmVyKQotICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfcmVzaXplKHByaXYtPmJ1ZmZl
ci5nZXQoKSwgb2Zmc2V0LCAtMSk7CiAgICAgICAgICAgICBwcml2LT5vZmZzZXQgPSBwcml2LT5y
ZXF1ZXN0ZWRPZmZzZXQ7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZz
ZXQgPSAwOwogICAgIH0KIAotICAgIC8vIFBvcnRzIHVzaW5nIHRoZSBHU3RyZWFtZXIgYmFja2Vu
ZCBidXQgbm90IHRoZSBzb3VwIGltcGxlbWVudGF0aW9uIG9mIFJlc291cmNlSGFuZGxlCi0gICAg
Ly8gd29uJ3QgYmUgdXNpbmcgYnVmZmVycyBwcm92aWRlZCBieSB0aGlzIGNsaWVudCwgdGhlIGJ1
ZmZlciBpcyBjcmVhdGVkIGhlcmUgaW4gdGhhdCBjYXNlLgotICAgIGlmICghcHJpdi0+YnVmZmVy
KQotICAgICAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoY3JlYXRlR3N0QnVmZmVyRm9yRGF0
YShkYXRhLCBsZW5ndGgpKTsKLSAgICBlbHNlCi0gICAgICAgIGdzdF9idWZmZXJfc2V0X3NpemUo
cHJpdi0+YnVmZmVyLmdldCgpLCBzdGF0aWNfY2FzdDxnc3NpemU+KGxlbmd0aCkpOwotCiAgICAg
Y2hlY2tVcGRhdGVCbG9ja3NpemUobGVuZ3RoKTsKIAogICAgIHVpbnQ2NF90IHN0YXJ0aW5nT2Zm
c2V0ID0gcHJpdi0+b2Zmc2V0OwpAQCAtOTU2LDcgKzkzMiw3IEBAIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBj
b25zdCBjCiAgICAgICAgIHVpbnQ2NF90IHN1YkJ1ZmZlck9mZnNldCA9IHN0YXJ0aW5nT2Zmc2V0
ICsgY3VycmVudE9mZnNldDsKICAgICAgICAgdWludDY0X3QgY3VycmVudE9mZnNldFNpemUgPSBz
dGQ6Om1pbihibG9ja1NpemUsIGJ1ZmZlclNpemUgLSBjdXJyZW50T2Zmc2V0KTsKIAotICAgICAg
ICBHc3RCdWZmZXIqIHN1YkJ1ZmZlciA9IGdzdF9idWZmZXJfY29weV9yZWdpb24ocHJpdi0+YnVm
ZmVyLmdldCgpLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBjdXJyZW50T2Zmc2V0LCBjdXJyZW50T2Zm
c2V0U2l6ZSk7CisgICAgICAgIEdzdEJ1ZmZlciogc3ViQnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdf
d3JhcHBlZChnX21lbWR1cChkYXRhICsgY3VycmVudE9mZnNldCwgY3VycmVudE9mZnNldFNpemUp
LCBjdXJyZW50T2Zmc2V0U2l6ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghc3ViQnVmZmVyKSkg
ewogICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBGQUlMRUQsICgiRmFp
bGVkIHRvIGFsbG9jYXRlIHN1Yi1idWZmZXIiKSwgKG51bGxwdHIpKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtOTg1LDggKzk2MSw2IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBjCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIHByaXYtPmJ1ZmZlci5jbGVhcigp
OwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjphY2Nlc3NDb250cm9s
Q2hlY2tGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350100</attachid>
            <date>2018-09-19 02:57:36 -0700</date>
            <delta_ts>2018-09-19 07:49:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189699-20180919105734.patch</filename>
            <type>text/plain</type>
            <size>14363</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc4ZGYxNTIxMjMyMTRi
MWEyZmIxYTVmZjM3MGY2ODdiZTdmOTVhNi4uZTRjMzY4OTRmOGY0N2UyMWVkMmJkNDc1N2Q0Mjg3
N2UyNGM0Nzg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE4LTA5LTE5ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBVdGlsaXRpZXMgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4OTY5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBHc3RNYXBwZWRCdWZmZXIgbm93IGhhcyBhIG1vdmUgY29uc3RydWN0
b3Igc28gdGhhdCBpdCBjYW4gYmUgZWFzaWx5CisgICAgICAgIHJldXNlZCBpbiB0aGUgd2ViYXVk
aW9zcmMgZWxlbWVudC4gVGhlIG5vdy11bnVzZWQgY29ycmVzcG9uZGluZworICAgICAgICBidWZm
ZXItbWFwcGluZyB1dGlsaXRpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgY29kZS1iYXNlLgorCisg
ICAgICAgIFRoZSBIVFRQIHNvdXJjZSBlbGVtZW50IHVzZWQgdG8gaGFuZGxlIGEgR3N0QnVmZmVy
IGluIGl0cyBwcml2YXRlCisgICAgICAgIHN0cnVjdHVyZSBidXQgdGhpcyBpcyBubyBsb25nZXIg
cmVxdWlyZWQgc2luY2UgZGF0YSBpcyBub3cgcHVzaGVkCisgICAgICAgIGluIGNodW5rcywgc2Vl
IGJ1ZyAjMTgyODI5LgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU3Jj
TG9vcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNv
bW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHc3RCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3N0QnVmZmVyRm9yRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjptYXBHc3RCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dW5t
YXBHc3RCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKTogTmV3IG1ldGhvZCByZXR1cm5pbmcgYQorICAgICAgICByZWZlcmVuY2UgdG8g
YSBuZXdseSBjcmVhdGVkIEdzdE1hcHBlZEJ1ZmZlciBpbnN0YW5jZS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOiBSZW1vdmUgcmVmZXJlbmNlIHRvIHVudXNlZCBHc3RC
dWZmZXIuCisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2Vp
dmVkKTogRGl0dG8uCisKIDIwMTgtMDktMTggIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2Fs
dmFyaXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbRU1FXVtHU3RyZWFtZXJdIFRoZSBjdXJyZW50
IEVNRSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgdGhlIHdhaXRpbmdmb3JrZXkgZXZl
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9X
ZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4
IDU1Y2RiNDJjYzZlZGQwMTU4ZmM5MTY0NWQ0MDk5OGI2NjgyZjk1ZmMuLmE2NGNmY2NjNTdkMWYy
YjZiZjllMDc3MWFjYWM2NjYwMTU0NjZjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1
ZGlvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMzA4LDcgKzMwOCw3IEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBHVmFsCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3Ao
V2ViS2l0V2ViQXVkaW9TcmMqIHNyYykKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxHUmVm
UHRyPEdzdEJ1ZmZlcj4+PiB3ZWJLaXRXZWJBdWRpb1NyY0FsbG9jYXRlQnVmZmVyc0FuZFJlbmRl
ckF1ZGlvKFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViQXVkaW9Tb3Vy
Y2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCkBAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGlj
IHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNMb29wKFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMpCiAgICAg
aWYgKCFwcml2LT5wcm92aWRlciB8fCAhcHJpdi0+YnVzKSB7CiAgICAgICAgIEdTVF9FTEVNRU5U
X0VSUk9SKHNyYywgQ09SRSwgRkFJTEVELCAoIkludGVybmFsIFdlYkF1ZGlvU3JjIGVycm9yIiks
ICgiQ2FuJ3Qgc3RhcnQgd2l0aG91dCBwcm92aWRlciBvciBidXMiKSk7CiAgICAgICAgIGdzdF90
YXNrX3N0b3Aoc3JjLT5wcml2LT50YXNrLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KIAogICAgIEFTU0VSVChwcml2LT5wb29sKTsK
QEAgLTMyNywzNyArMzI3LDUwIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjTG9vcChX
ZWJLaXRXZWJBdWRpb1NyYyogc3JjKQogCiAgICAgVmVjdG9yPEdSZWZQdHI8R3N0QnVmZmVyPj4g
Y2hhbm5lbEJ1ZmZlckxpc3Q7CiAgICAgY2hhbm5lbEJ1ZmZlckxpc3QucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShwcml2LT5zb3VyY2VzLnNpemUoKSk7CisKKyAgICBWZWN0b3I8R3N0TWFwcGVkQnVm
ZmVyPiBtYXBwZWRCdWZmZXJzOworICAgIG1hcHBlZEJ1ZmZlcnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShwcml2LT5zb3VyY2VzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHByaXYtPnNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgR1JlZlB0cjxHc3RCdWZmZXI+
IGJ1ZmZlcjsKICAgICAgICAgR3N0Rmxvd1JldHVybiByZXQgPSBnc3RfYnVmZmVyX3Bvb2xfYWNx
dWlyZV9idWZmZXIocHJpdi0+cG9vbC5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgbnVsbHB0cik7
CiAgICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgYnVmZmVyIDogY2hhbm5lbEJ1ZmZlckxpc3QpCi0gICAgICAgICAgICAgICAgdW5tYXBHc3RC
dWZmZXIoYnVmZmVyLmdldCgpKTsKLQogICAgICAgICAgICAgLy8gRkxVU0hJTkcgYW5kIEVPUyBh
cmUgbm90IGVycm9ycy4KICAgICAgICAgICAgIGlmIChyZXQgPCBHU1RfRkxPV19FT1MgfHwgcmV0
ID09IEdTVF9GTE9XX05PVF9MSU5LRUQpCiAgICAgICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJS
T1Ioc3JjLCBDT1JFLCBQQUQsICgiSW50ZXJuYWwgV2ViQXVkaW9TcmMgZXJyb3IiKSwgKCJGYWls
ZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBmbG93OiAlcyIsIGdzdF9mbG93X2dldF9uYW1lKHJl
dCkpKTsKLSAgICAgICAgICAgIGdzdF90YXNrX3N0b3Aoc3JjLT5wcml2LT50YXNrLmdldCgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAg
ICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoYnVmZmVyKTsKICAgICAgICAgR1NUX0JVRkZFUl9U
SU1FU1RBTVAoYnVmZmVyLmdldCgpKSA9IHRpbWVzdGFtcDsKICAgICAgICAgR1NUX0JVRkZFUl9E
VVJBVElPTihidWZmZXIuZ2V0KCkpID0gZHVyYXRpb247Ci0gICAgICAgIG1hcEdzdEJ1ZmZlcihi
dWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgICAgICAgcHJpdi0+YnVzLT5zZXRD
aGFubmVsTWVtb3J5KGksIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihnZXRHc3RCdWZmZXJEYXRh
UG9pbnRlcihidWZmZXIuZ2V0KCkpKSwgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKKyAgICAgICAgR3N0
TWFwcGVkQnVmZmVyIG1hcHBlZEJ1ZmZlcihidWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRFdSSVRF
KTsKKyAgICAgICAgQVNTRVJUKG1hcHBlZEJ1ZmZlcik7CisgICAgICAgIG1hcHBlZEJ1ZmZlcnMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUobWFwcGVkQnVmZmVyKSk7CisgICAgICAgIHByaXYtPmJ1
cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4obWFwcGVkQnVm
ZmVyc1tpXS5kYXRhKCkpLCBwcml2LT5mcmFtZXNUb1B1bGwpOwogICAgICAgICBjaGFubmVsQnVm
ZmVyTGlzdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShidWZmZXIpKTsKICAgICB9CiAKICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCiAgICAgcHJp
di0+cHJvdmlkZXItPnJlbmRlcihudWxscHRyLCBwcml2LT5idXMsIHByaXYtPmZyYW1lc1RvUHVs
bCk7CiAKLSAgICBBU1NFUlQoY2hhbm5lbEJ1ZmZlckxpc3Quc2l6ZSgpID09IHByaXYtPnNvdXJj
ZXMuc2l6ZSgpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKGNoYW5uZWxCdWZmZXJM
aXN0KTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNMb29wKFdlYktpdFdlYkF1
ZGlvU3JjKiBzcmMpCit7CisgICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0g
c3JjLT5wcml2OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8R1JlZlB0cjxHc3RCdWZmZXI+
Pj4gY2hhbm5lbEJ1ZmZlckxpc3QgPSB3ZWJLaXRXZWJBdWRpb1NyY0FsbG9jYXRlQnVmZmVyc0Fu
ZFJlbmRlckF1ZGlvKHNyYyk7CisgICAgaWYgKCFjaGFubmVsQnVmZmVyTGlzdCkgeworICAgICAg
ICBnc3RfdGFza19zdG9wKHNyYy0+cHJpdi0+dGFzay5nZXQoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlQoY2hhbm5lbEJ1ZmZlckxpc3QtPnNpemUoKSA9PSBwcml2LT5z
b3VyY2VzLnNpemUoKSk7CisKICAgICBib29sIGZhaWxlZCA9IGZhbHNlOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcml2LT5zb3VyY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8v
IFVubWFwIGJlZm9yZSBwYXNzaW5nIG9uIHRoZSBidWZmZXIuCi0gICAgICAgIGF1dG8mIGJ1ZmZl
ciA9IGNoYW5uZWxCdWZmZXJMaXN0W2ldOwotICAgICAgICB1bm1hcEdzdEJ1ZmZlcihidWZmZXIu
Z2V0KCkpOworICAgICAgICBhdXRvJiBidWZmZXIgPSBjaGFubmVsQnVmZmVyTGlzdC52YWx1ZSgp
W2ldOwogCiAgICAgICAgIGlmIChwcml2LT5lbmFibGVHYXBCdWZmZXJTdXBwb3J0ICYmIHByaXYt
PmJ1cy0+Y2hhbm5lbChpKS0+aXNTaWxlbnQoKSkKICAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxB
R19TRVQoYnVmZmVyLmdldCgpLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5jcHAKaW5kZXggNjIzNTNlNGYzZTY4NDdmOWYwY2VkMzVkZTI0NmIwNTFhODJkZDk2
My4uNjA1ZDY3MjcyMTQ0OTI5MDRiMzJlMzdhN2MxM2M5NDUyMTk5OThhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5jcHAKQEAgLTQwLDggKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jb25zdCBjaGFyKiB3ZWJraXRHc3RNYXBJbmZvUXVhcmtTdHJpbmcgPSAid2Via2l0LWdz
dC1tYXAtaW5mbyI7Ci0KIEdzdFBhZCogd2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxh
dGUoR3N0U3RhdGljUGFkVGVtcGxhdGUqIHN0YXRpY1BhZFRlbXBsYXRlLCBjb25zdCBnY2hhciog
bmFtZSwgR3N0UGFkKiB0YXJnZXQpCiB7CiAgICAgR3N0UGFkKiBwYWQ7CkBAIC0xNDMsMjYgKzE0
MSw2IEBAIGJvb2wgZ2V0U2FtcGxlVmlkZW9JbmZvKEdzdFNhbXBsZSogc2FtcGxlLCBHc3RWaWRl
b0luZm8mIHZpZGVvSW5mbykKIH0KICNlbmRpZgogCi1Hc3RCdWZmZXIqIGNyZWF0ZUdzdEJ1ZmZl
cihHc3RCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBnc2l6ZSBidWZmZXJTaXplID0gZ3N0X2J1ZmZl
cl9nZXRfc2l6ZShidWZmZXIpOwotICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gZ3N0X2J1ZmZl
cl9uZXdfYW5kX2FsbG9jKGJ1ZmZlclNpemUpOwotCi0gICAgaWYgKCFuZXdCdWZmZXIpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZm
ZXIsIHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFE
QVRBKSwgMCwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIG5ld0J1ZmZlcjsKLX0KLQotR3N0QnVm
ZmVyKiBjcmVhdGVHc3RCdWZmZXJGb3JEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
Ci17Ci0gICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MobGVu
Z3RoKTsKLQotICAgIGdzdF9idWZmZXJfZmlsbChidWZmZXIsIDAsIGRhdGEsIGxlbmd0aCk7Ci0K
LSAgICByZXR1cm4gYnVmZmVyOwotfQogCiBjb25zdCBjaGFyKiBjYXBzTWVkaWFUeXBlKGNvbnN0
IEdzdENhcHMqIGNhcHMpCiB7CkBAIC0yMDUsMzggKzE4Myw2IEBAIGJvb2wgYXJlRW5jcnlwdGVk
Q2Fwcyhjb25zdCBHc3RDYXBzKiBjYXBzKQogI2VuZGlmCiB9CiAKLWNoYXIqIGdldEdzdEJ1ZmZl
ckRhdGFQb2ludGVyKEdzdEJ1ZmZlciogYnVmZmVyKQotewotICAgIEdzdE1pbmlPYmplY3QqIG1p
bmlPYmplY3QgPSByZWludGVycHJldF9jYXN0PEdzdE1pbmlPYmplY3QqPihidWZmZXIpOwotICAg
IEdzdE1hcEluZm8qIG1hcEluZm8gPSBzdGF0aWNfY2FzdDxHc3RNYXBJbmZvKj4oZ3N0X21pbmlf
b2JqZWN0X2dldF9xZGF0YShtaW5pT2JqZWN0LCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyh3
ZWJraXRHc3RNYXBJbmZvUXVhcmtTdHJpbmcpKSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG1hcEluZm8tPmRhdGEpOwotfQotCi12b2lkIG1hcEdzdEJ1ZmZlcihHc3RCdWZm
ZXIqIGJ1ZmZlciwgdWludDMyX3QgZmxhZ3MpCi17Ci0gICAgR3N0TWFwSW5mbyogbWFwSW5mbyA9
IHN0YXRpY19jYXN0PEdzdE1hcEluZm8qPihmYXN0TWFsbG9jKHNpemVvZihHc3RNYXBJbmZvKSkp
OwotICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCBtYXBJbmZvLCBzdGF0aWNfY2FzdDxH
c3RNYXBGbGFncz4oZmxhZ3MpKSkgewotICAgICAgICBmYXN0RnJlZShtYXBJbmZvKTsKLSAgICAg
ICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgR3N0TWluaU9iamVjdCogbWluaU9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWluaU9i
amVjdCo+KGJ1ZmZlcik7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YShtaW5pT2JqZWN0
LCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyh3ZWJraXRHc3RNYXBJbmZvUXVhcmtTdHJpbmcp
LCBtYXBJbmZvLCBudWxscHRyKTsKLX0KLQotdm9pZCB1bm1hcEdzdEJ1ZmZlcihHc3RCdWZmZXIq
IGJ1ZmZlcikKLXsKLSAgICBHc3RNaW5pT2JqZWN0KiBtaW5pT2JqZWN0ID0gcmVpbnRlcnByZXRf
Y2FzdDxHc3RNaW5pT2JqZWN0Kj4oYnVmZmVyKTsKLSAgICBHc3RNYXBJbmZvKiBtYXBJbmZvID0g
c3RhdGljX2Nhc3Q8R3N0TWFwSW5mbyo+KGdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YShtaW5p
T2JqZWN0LCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyh3ZWJraXRHc3RNYXBJbmZvUXVhcmtT
dHJpbmcpKSk7Ci0KLSAgICBpZiAoIW1hcEluZm8pCi0gICAgICAgIHJldHVybjsKLQotICAgIGdz
dF9idWZmZXJfdW5tYXAoYnVmZmVyLCBtYXBJbmZvKTsKLSAgICBmYXN0RnJlZShtYXBJbmZvKTsK
LX0KLQogVmVjdG9yPFN0cmluZz4gZXh0cmFjdEdTdHJlYW1lck9wdGlvbnNGcm9tQ29tbWFuZExp
bmUoKQogewogICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gY29udGVudHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKaW5kZXggNzkzYjRkZDc1NjQ4OTdmZDEzMzhlZWMyMDNjZTllOTcxMTQ5OWIxMS4u
ZjU1MzMxMTVjYzQ2MTE4Yzk3YzVjOTlhZjUzMzIwNDI1MjQ1ZTIxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaApAQCAtNjMsMTQgKzYzLDkgQEAgYm9vbCBnZXRWaWRlb1NpemVBbmRGb3JtYXRG
cm9tQ2FwcyhHc3RDYXBzKiwgV2ViQ29yZTo6SW50U2l6ZSYsIEdzdFZpZGVvRm9ybWF0JiwKIHN0
ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBnZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2Fwcyhjb25zdCBH
c3RDYXBzKik7CiBib29sIGdldFNhbXBsZVZpZGVvSW5mbyhHc3RTYW1wbGUqLCBHc3RWaWRlb0lu
Zm8mKTsKICNlbmRpZgotR3N0QnVmZmVyKiBjcmVhdGVHc3RCdWZmZXIoR3N0QnVmZmVyKik7Ci1H
c3RCdWZmZXIqIGNyZWF0ZUdzdEJ1ZmZlckZvckRhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCk7Ci1jaGFyKiBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihHc3RCdWZmZXIqKTsKIGNvbnN0
IGNoYXIqIGNhcHNNZWRpYVR5cGUoY29uc3QgR3N0Q2FwcyopOwogYm9vbCBkb0NhcHNIYXZlVHlw
ZShjb25zdCBHc3RDYXBzKiwgY29uc3QgY2hhciopOwogYm9vbCBhcmVFbmNyeXB0ZWRDYXBzKGNv
bnN0IEdzdENhcHMqKTsKLXZvaWQgbWFwR3N0QnVmZmVyKEdzdEJ1ZmZlciosIHVpbnQzMl90KTsK
LXZvaWQgdW5tYXBHc3RCdWZmZXIoR3N0QnVmZmVyKik7CiBWZWN0b3I8U3RyaW5nPiBleHRyYWN0
R1N0cmVhbWVyT3B0aW9uc0Zyb21Db21tYW5kTGluZSgpOwogYm9vbCBpbml0aWFsaXplR1N0cmVh
bWVyKHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+JiYgPSBzdGQ6Om51bGxvcHQpOwogdW5z
aWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3QgY2hhciogbmljayk7CkBAIC04MiwxMyArNzcsMjIg
QEAgaW5saW5lIEdzdENsb2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1l
ZGlhVGltZSkKIH0KIAogY2xhc3MgR3N0TWFwcGVkQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShHc3RNYXBwZWRCdWZmZXIpOwogcHVibGljOgorCisgICAgR3N0TWFwcGVkQnVmZmVy
KEdzdE1hcHBlZEJ1ZmZlciYmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9pc1ZhbGlkID0gb3Ro
ZXIubV9pc1ZhbGlkOworICAgICAgICBtX2luZm8gPSBvdGhlci5tX2luZm87CisgICAgICAgIG1f
YnVmZmVyID0gb3RoZXIubV9idWZmZXI7CisgICAgICAgIG90aGVyLm1faXNWYWxpZCA9IGZhbHNl
OworICAgIH0KKwogICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0TWFw
RmxhZ3MgZmxhZ3MpCiAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgIHsKICAgICAgICAg
bV9pc1ZhbGlkID0gZ3N0X2J1ZmZlcl9tYXAobV9idWZmZXIsICZtX2luZm8sIGZsYWdzKTsKICAg
ICB9CisKICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBHU1RfTUFQX1JFQURXUklURSBpcyBkZWZpbmVk
IG91dCBvZiBsaW5lIGZyb20gdGhlIE1hcEZsYWdzCiAgICAgLy8gZW51bSBhcyBhbiBpbnQsIGFu
ZCBDKysgaXMgY2FyZWZ1bCB0byBub3QgaW1wbGljaXR5IGNvbnZlcnQgaXQgdG8gYW4gZW51bS4K
ICAgICBHc3RNYXBwZWRCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIsIGludCBmbGFncykKQEAgLTEw
Niw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNWYWxpZDsgfQogcHJpdmF0ZToKICAgICBHc3RCdWZmZXIqIG1fYnVmZmVy
OwotICAgIEdzdE1hcEluZm8gbV9pbmZvOworICAgIEdzdE1hcEluZm8gbV9pbmZvIEdTVF9NQVBf
SU5GT19JTklUOwogICAgIGJvb2wgbV9pc1ZhbGlkIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJT
b3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggNGYxYTAyZmQyZWIzYTZk
MjAwNGQ0YThiZjU1MDY4MDM4Zjg5ZjAxMy4uMjMxY2ZkMmQxZjMwOWM3OWI5ODVjY2Q1NmQzMDgy
NWExMmIxMDNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5j
cHAKQEAgLTEwMyw3ICsxMDMsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogICAg
IHVpbnQ2NF90IG1pbmltdW1CbG9ja3NpemU7CiAKICAgICBSZWZQdHI8TWFpblRocmVhZE5vdGlm
aWVyPE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAgICBHUmVmUHRy
PEdzdEJ1ZmZlcj4gYnVmZmVyOwogfTsKIAogZW51bSB7CkBAIC0zNjYsMTEgKzM2NSw2IEBAIHN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBib29s
IHdhc1NlZWtpbmcgPSBzdGQ6OmV4Y2hhbmdlKHByaXYtPmlzU2Vla2luZywgZmFsc2UpOwogCi0g
ICAgaWYgKHByaXYtPmJ1ZmZlcikgewotICAgICAgICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5idWZm
ZXIuZ2V0KCkpOwotICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKLSAgICB9Ci0KICAgICBw
cml2LT5wYXVzZWQgPSBmYWxzZTsKIAogICAgIHByaXYtPm9mZnNldCA9IDA7CkBAIC04OTEsMTYg
Kzg4NSw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZl
ZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBjCiAgICAgV2ViS2l0V2ViU3JjKiBzcmMg
PSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9MT0dfT0JKRUNUKHNyYywgIkhhdmUgJWxsZCBi
eXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVyID8gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihnc3Rf
YnVmZmVyX2dldF9zaXplKHByaXYtPmJ1ZmZlci5nZXQoKSkpIDogbGVuZ3RoKTsKLQotICAgIEFT
U0VSVCghcHJpdi0+YnVmZmVyIHx8IGRhdGEgPT0gZ2V0R3N0QnVmZmVyRGF0YVBvaW50ZXIocHJp
di0+YnVmZmVyLmdldCgpKSk7Ci0KLSAgICBpZiAocHJpdi0+YnVmZmVyKQotICAgICAgICB1bm1h
cEdzdEJ1ZmZlcihwcml2LT5idWZmZXIuZ2V0KCkpOwotCiAgICAgaWYgKHByaXYtPmlzU2Vla2lu
ZykgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgaW4gcHJvZ3Jlc3MsIGln
bm9yaW5nIGRhdGEiKTsKLSAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTkwOSw3ICs4OTUsNiBAQCB2b2lkIENhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3Qg
YwogICAgICAgICBpZiAocHJpdi0+b2Zmc2V0ICsgbGVuZ3RoIDw9IHByaXYtPnJlcXVlc3RlZE9m
ZnNldCkgewogICAgICAgICAgICAgLy8gRGlzY2FyZCBhbGwgdGhlIGJ1ZmZlcnMgY29taW5nIGJl
Zm9yZSB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24uCiAgICAgICAgICAgICBwcml2LT5vZmZz
ZXQgKz0gbGVuZ3RoOwotICAgICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtOTE3LDIxICs5MDIsMTIgQEAgdm9pZCBDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYsIGNvbnN0IGMKICAgICAgICAgICAgIGd1aW50NjQgb2Zmc2V0ID0gcHJpdi0+cmVxdWVz
dGVkT2Zmc2V0IC0gcHJpdi0+b2Zmc2V0OwogICAgICAgICAgICAgZGF0YSArPSBvZmZzZXQ7CiAg
ICAgICAgICAgICBsZW5ndGggLT0gb2Zmc2V0OwotICAgICAgICAgICAgaWYgKHByaXYtPmJ1ZmZl
cikKLSAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3Jlc2l6ZShwcml2LT5idWZmZXIuZ2V0KCks
IG9mZnNldCwgLTEpOwogICAgICAgICAgICAgcHJpdi0+b2Zmc2V0ID0gcHJpdi0+cmVxdWVzdGVk
T2Zmc2V0OwogICAgICAgICB9CiAKICAgICAgICAgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID0gMDsK
ICAgICB9CiAKLSAgICAvLyBQb3J0cyB1c2luZyB0aGUgR1N0cmVhbWVyIGJhY2tlbmQgYnV0IG5v
dCB0aGUgc291cCBpbXBsZW1lbnRhdGlvbiBvZiBSZXNvdXJjZUhhbmRsZQotICAgIC8vIHdvbid0
IGJlIHVzaW5nIGJ1ZmZlcnMgcHJvdmlkZWQgYnkgdGhpcyBjbGllbnQsIHRoZSBidWZmZXIgaXMg
Y3JlYXRlZCBoZXJlIGluIHRoYXQgY2FzZS4KLSAgICBpZiAoIXByaXYtPmJ1ZmZlcikKLSAgICAg
ICAgcHJpdi0+YnVmZmVyID0gYWRvcHRHUmVmKGNyZWF0ZUdzdEJ1ZmZlckZvckRhdGEoZGF0YSwg
bGVuZ3RoKSk7Ci0gICAgZWxzZQotICAgICAgICBnc3RfYnVmZmVyX3NldF9zaXplKHByaXYtPmJ1
ZmZlci5nZXQoKSwgc3RhdGljX2Nhc3Q8Z3NzaXplPihsZW5ndGgpKTsKLQogICAgIGNoZWNrVXBk
YXRlQmxvY2tzaXplKGxlbmd0aCk7CiAKICAgICB1aW50NjRfdCBzdGFydGluZ09mZnNldCA9IHBy
aXYtPm9mZnNldDsKQEAgLTk1Niw3ICs5MzIsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgYwog
ICAgICAgICB1aW50NjRfdCBzdWJCdWZmZXJPZmZzZXQgPSBzdGFydGluZ09mZnNldCArIGN1cnJl
bnRPZmZzZXQ7CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRPZmZzZXRTaXplID0gc3RkOjptaW4o
YmxvY2tTaXplLCBidWZmZXJTaXplIC0gY3VycmVudE9mZnNldCk7CiAKLSAgICAgICAgR3N0QnVm
ZmVyKiBzdWJCdWZmZXIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uKHByaXYtPmJ1ZmZlci5nZXQo
KSwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgY3VycmVudE9mZnNldCwgY3VycmVudE9mZnNldFNpemUp
OworICAgICAgICBHc3RCdWZmZXIqIHN1YkJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQo
Z19tZW1kdXAoZGF0YSArIGN1cnJlbnRPZmZzZXQsIGN1cnJlbnRPZmZzZXRTaXplKSwgY3VycmVu
dE9mZnNldFNpemUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXN1YkJ1ZmZlcikpIHsKICAgICAg
ICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09SRSwgRkFJTEVELCAoIkZhaWxlZCB0byBh
bGxvY2F0ZSBzdWItYnVmZmVyIiksIChudWxscHRyKSk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTk4NSw4ICs5NjEsNiBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRh
UmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgYwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKIH0KIAog
dm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFp
bGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350115</attachid>
            <date>2018-09-19 07:49:10 -0700</date>
            <delta_ts>2018-09-21 13:44:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189699-20180919154909.patch</filename>
            <type>text/plain</type>
            <size>14836</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjk0YjU4Zjg2YmZlZmJm
NzRmYWEwMmU3YjVhYWJmYTA0ZjMxNjU0ZS4uZDhkNjE2Yjk3MWYwZDhmOTZkZWU1MDc5NzQ2ZmEy
OGEwMjBkNjBiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE4LTA5LTE5ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBVdGlsaXRpZXMgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4OTY5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBHc3RNYXBwZWRCdWZmZXIgbm93IGhhcyBhIG1vdmUgY29uc3RydWN0
b3Igc28gdGhhdCBpdCBjYW4gYmUgZWFzaWx5CisgICAgICAgIHJldXNlZCBpbiB0aGUgd2ViYXVk
aW9zcmMgZWxlbWVudC4gVGhlIG5vdy11bnVzZWQgY29ycmVzcG9uZGluZworICAgICAgICBidWZm
ZXItbWFwcGluZyB1dGlsaXRpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgY29kZS1iYXNlLgorCisg
ICAgICAgIFRoZSBIVFRQIHNvdXJjZSBlbGVtZW50IHVzZWQgdG8gaGFuZGxlIGEgR3N0QnVmZmVy
IGluIGl0cyBwcml2YXRlCisgICAgICAgIHN0cnVjdHVyZSBidXQgdGhpcyBpcyBubyBsb25nZXIg
cmVxdWlyZWQgc2luY2UgZGF0YSBpcyBub3cgcHVzaGVkCisgICAgICAgIGluIGNodW5rcywgc2Vl
IGJ1ZyAjMTgyODI5LgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU3Jj
TG9vcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNv
bW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHc3RCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3N0QnVmZmVyRm9yRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjptYXBHc3RCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dW5t
YXBHc3RCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKTogTmV3IG1ldGhvZCByZXR1cm5pbmcgYQorICAgICAgICByZWZlcmVuY2UgdG8g
YSBuZXdseSBjcmVhdGVkIEdzdE1hcHBlZEJ1ZmZlciBpbnN0YW5jZS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOiBSZW1vdmUgcmVmZXJlbmNlIHRvIHVudXNlZCBHc3RC
dWZmZXIuCisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2Vp
dmVkKTogRGl0dG8uCisKIDIwMTgtMDktMTkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjIzNjAwNik6IE5ldyB3YWl0aW5nRm9yS2V5KCkg
cmVxdWlyZW1lbnQgYnJlYWtzIE1vZGVybiBFTUUgdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCA1NWNkYjQyY2M2ZWRkMDE1OGZjOTE2
NDVkNDA5OThiNjY4MmY5NWZjLi41MTI2NGFjNjliOTljYmE5YWY2MjBjNTZhNzJjNmJiYjUyNDhj
MWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
V2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAK
QEAgLTMwOCw3ICszMDgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0dldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbAogICAgIH0KIH0KIAot
c3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNMb29wKFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMp
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8R1JlZlB0cjxHc3RCdWZmZXI+Pj4gd2ViS2l0
V2ViQXVkaW9TcmNBbGxvY2F0ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyhXZWJLaXRXZWJBdWRpb1Ny
Yyogc3JjKQogewogICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKIApAQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3Jj
TG9vcChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQogICAgIGlmICghcHJpdi0+cHJvdmlkZXIgfHwg
IXByaXYtPmJ1cykgewogICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIEZBSUxF
RCwgKCJJbnRlcm5hbCBXZWJBdWRpb1NyYyBlcnJvciIpLCAoIkNhbid0IHN0YXJ0IHdpdGhvdXQg
cHJvdmlkZXIgb3IgYnVzIikpOwogICAgICAgICBnc3RfdGFza19zdG9wKHNyYy0+cHJpdi0+dGFz
ay5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICB9CiAKICAgICBBU1NFUlQocHJpdi0+cG9vbCk7CkBAIC0zMjUsMzkgKzMyNSw0OSBAQCBz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2ViQXVkaW9TcmMqIHNyYykK
ICAgICBwcml2LT5udW1iZXJPZlNhbXBsZXMgKz0gcHJpdi0+ZnJhbWVzVG9QdWxsOwogICAgIEdz
dENsb2NrVGltZSBkdXJhdGlvbiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZShwcml2LT5udW1iZXJP
ZlNhbXBsZXMsIEdTVF9TRUNPTkQsIHByaXYtPnNhbXBsZVJhdGUpIC0gdGltZXN0YW1wOwogCi0g
ICAgVmVjdG9yPEdSZWZQdHI8R3N0QnVmZmVyPj4gY2hhbm5lbEJ1ZmZlckxpc3Q7Ci0gICAgY2hh
bm5lbEJ1ZmZlckxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwcml2LT5zb3VyY2VzLnNpemUo
KSk7CisgICAgVmVjdG9yPEdSZWZQdHI8R3N0QnVmZmVyPj4gY2hhbm5lbEJ1ZmZlckxpc3QocHJp
di0+c291cmNlcy5zaXplKCkpOworICAgIFZlY3RvcjxHc3RNYXBwZWRCdWZmZXI+IG1hcHBlZEJ1
ZmZlcnMocHJpdi0+c291cmNlcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcml2LT5zb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEdSZWZQdHI8R3N0QnVmZmVy
PiBidWZmZXI7CiAgICAgICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2Fj
cXVpcmVfYnVmZmVyKHByaXYtPnBvb2wuZ2V0KCksICZidWZmZXIub3V0UHRyKCksIG51bGxwdHIp
OwogICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IGNoYW5uZWxCdWZmZXJMaXN0KQotICAgICAgICAgICAgICAgIHVubWFwR3N0
QnVmZmVyKGJ1ZmZlci5nZXQoKSk7Ci0KICAgICAgICAgICAgIC8vIEZMVVNISU5HIGFuZCBFT1Mg
YXJlIG5vdCBlcnJvcnMuCiAgICAgICAgICAgICBpZiAocmV0IDwgR1NUX0ZMT1dfRU9TIHx8IHJl
dCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKQogICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VS
Uk9SKHNyYywgQ09SRSwgUEFELCAoIkludGVybmFsIFdlYkF1ZGlvU3JjIGVycm9yIiksICgiRmFp
bGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZShy
ZXQpKSk7Ci0gICAgICAgICAgICBnc3RfdGFza19zdG9wKHNyYy0+cHJpdi0+dGFzay5nZXQoKSk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
ICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGJ1ZmZlcik7CiAgICAgICAgIEdTVF9CVUZGRVJf
VElNRVNUQU1QKGJ1ZmZlci5nZXQoKSkgPSB0aW1lc3RhbXA7CiAgICAgICAgIEdTVF9CVUZGRVJf
RFVSQVRJT04oYnVmZmVyLmdldCgpKSA9IGR1cmF0aW9uOwotICAgICAgICBtYXBHc3RCdWZmZXIo
YnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQURXUklURSk7Ci0gICAgICAgIHByaXYtPmJ1cy0+c2V0
Q2hhbm5lbE1lbW9yeShpLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oZ2V0R3N0QnVmZmVyRGF0
YVBvaW50ZXIoYnVmZmVyLmdldCgpKSksIHByaXYtPmZyYW1lc1RvUHVsbCk7CisgICAgICAgIEdz
dE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWZmZXIoYnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQURXUklU
RSk7CisgICAgICAgIEFTU0VSVChtYXBwZWRCdWZmZXIpOworICAgICAgICBtYXBwZWRCdWZmZXJz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1hcHBlZEJ1ZmZlcikpOworICAgICAgICBwcml2LT5i
dXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG1hcHBlZEJ1
ZmZlcnNbaV0uZGF0YSgpKSwgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKICAgICAgICAgY2hhbm5lbEJ1
ZmZlckxpc3QudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfQogCiAgICAg
Ly8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBsb2NhbC9saXZlIGF1ZGlvIGlucHV0LgogICAgIHBy
aXYtPnByb3ZpZGVyLT5yZW5kZXIobnVsbHB0ciwgcHJpdi0+YnVzLCBwcml2LT5mcmFtZXNUb1B1
bGwpOwogCi0gICAgQVNTRVJUKGNoYW5uZWxCdWZmZXJMaXN0LnNpemUoKSA9PSBwcml2LT5zb3Vy
Y2VzLnNpemUoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbChjaGFubmVsQnVmZmVy
TGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjTG9vcChXZWJLaXRXZWJB
dWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdiA9
IHNyYy0+cHJpdjsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEdSZWZQdHI8R3N0QnVmZmVy
Pj4+IGNoYW5uZWxCdWZmZXJMaXN0ID0gd2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0ZUJ1ZmZlcnNB
bmRSZW5kZXJBdWRpbyhzcmMpOworICAgIGlmICghY2hhbm5lbEJ1ZmZlckxpc3QpIHsKKyAgICAg
ICAgZ3N0X3Rhc2tfc3RvcChzcmMtPnByaXYtPnRhc2suZ2V0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUKGNoYW5uZWxCdWZmZXJMaXN0LT5zaXplKCkgPT0gcHJpdi0+
c291cmNlcy5zaXplKCkpOworCiAgICAgYm9vbCBmYWlsZWQgPSBmYWxzZTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcHJpdi0+c291cmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAv
LyBVbm1hcCBiZWZvcmUgcGFzc2luZyBvbiB0aGUgYnVmZmVyLgotICAgICAgICBhdXRvJiBidWZm
ZXIgPSBjaGFubmVsQnVmZmVyTGlzdFtpXTsKLSAgICAgICAgdW5tYXBHc3RCdWZmZXIoYnVmZmVy
LmdldCgpKTsKKyAgICAgICAgYXV0byYgYnVmZmVyID0gY2hhbm5lbEJ1ZmZlckxpc3QudmFsdWUo
KVtpXTsKIAogICAgICAgICBpZiAocHJpdi0+ZW5hYmxlR2FwQnVmZmVyU3VwcG9ydCAmJiBwcml2
LT5idXMtPmNoYW5uZWwoaSktPmlzU2lsZW50KCkpCiAgICAgICAgICAgICBHU1RfQlVGRkVSX0ZM
QUdfU0VUKGJ1ZmZlci5nZXQoKSwgR1NUX0JVRkZFUl9GTEFHX0dBUCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uY3BwCmluZGV4IDYyMzUzZTRmM2U2ODQ3ZjlmMGNlZDM1ZGUyNDZiMDUxYTgyZGQ5
NjMuLjYwNWQ2NzI3MjE0NDkyOTA0YjMyZTM3YTdjMTNjOTQ1MjE5OTk4YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwCkBAIC00MCw4ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY29uc3QgY2hhciogd2Via2l0R3N0TWFwSW5mb1F1YXJrU3RyaW5nID0gIndlYmtpdC1n
c3QtbWFwLWluZm8iOwotCiBHc3RQYWQqIHdlYmtpdEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBs
YXRlKEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBzdGF0aWNQYWRUZW1wbGF0ZSwgY29uc3QgZ2NoYXIq
IG5hbWUsIEdzdFBhZCogdGFyZ2V0KQogewogICAgIEdzdFBhZCogcGFkOwpAQCAtMTQzLDI2ICsx
NDEsNiBAQCBib29sIGdldFNhbXBsZVZpZGVvSW5mbyhHc3RTYW1wbGUqIHNhbXBsZSwgR3N0Vmlk
ZW9JbmZvJiB2aWRlb0luZm8pCiB9CiAjZW5kaWYKIAotR3N0QnVmZmVyKiBjcmVhdGVHc3RCdWZm
ZXIoR3N0QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZm
ZXJfZ2V0X3NpemUoYnVmZmVyKTsKLSAgICBHc3RCdWZmZXIqIG5ld0J1ZmZlciA9IGdzdF9idWZm
ZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKLQotICAgIGlmICghbmV3QnVmZmVyKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1ZmZlciwgYnVm
ZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9NRVRB
REFUQSksIDAsIGJ1ZmZlclNpemUpOwotICAgIHJldHVybiBuZXdCdWZmZXI7Ci19Ci0KLUdzdEJ1
ZmZlciogY3JlYXRlR3N0QnVmZmVyRm9yRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQotewotICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGxl
bmd0aCk7Ci0KLSAgICBnc3RfYnVmZmVyX2ZpbGwoYnVmZmVyLCAwLCBkYXRhLCBsZW5ndGgpOwot
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KIAogY29uc3QgY2hhciogY2Fwc01lZGlhVHlwZShjb25z
dCBHc3RDYXBzKiBjYXBzKQogewpAQCAtMjA1LDM4ICsxODMsNiBAQCBib29sIGFyZUVuY3J5cHRl
ZENhcHMoY29uc3QgR3N0Q2FwcyogY2FwcykKICNlbmRpZgogfQogCi1jaGFyKiBnZXRHc3RCdWZm
ZXJEYXRhUG9pbnRlcihHc3RCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBHc3RNaW5pT2JqZWN0KiBt
aW5pT2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNaW5pT2JqZWN0Kj4oYnVmZmVyKTsKLSAg
ICBHc3RNYXBJbmZvKiBtYXBJbmZvID0gc3RhdGljX2Nhc3Q8R3N0TWFwSW5mbyo+KGdzdF9taW5p
X29iamVjdF9nZXRfcWRhdGEobWluaU9iamVjdCwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmco
d2Via2l0R3N0TWFwSW5mb1F1YXJrU3RyaW5nKSkpOwotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihtYXBJbmZvLT5kYXRhKTsKLX0KLQotdm9pZCBtYXBHc3RCdWZmZXIoR3N0QnVm
ZmVyKiBidWZmZXIsIHVpbnQzMl90IGZsYWdzKQotewotICAgIEdzdE1hcEluZm8qIG1hcEluZm8g
PSBzdGF0aWNfY2FzdDxHc3RNYXBJbmZvKj4oZmFzdE1hbGxvYyhzaXplb2YoR3N0TWFwSW5mbykp
KTsKLSAgICBpZiAoIWdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgbWFwSW5mbywgc3RhdGljX2Nhc3Q8
R3N0TWFwRmxhZ3M+KGZsYWdzKSkpIHsKLSAgICAgICAgZmFzdEZyZWUobWFwSW5mbyk7Ci0gICAg
ICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEdzdE1pbmlPYmplY3QqIG1pbmlPYmplY3QgPSByZWludGVycHJldF9jYXN0PEdzdE1pbmlP
YmplY3QqPihidWZmZXIpOwotICAgIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEobWluaU9iamVj
dCwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcod2Via2l0R3N0TWFwSW5mb1F1YXJrU3RyaW5n
KSwgbWFwSW5mbywgbnVsbHB0cik7Ci19Ci0KLXZvaWQgdW5tYXBHc3RCdWZmZXIoR3N0QnVmZmVy
KiBidWZmZXIpCi17Ci0gICAgR3N0TWluaU9iamVjdCogbWluaU9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0TWluaU9iamVjdCo+KGJ1ZmZlcik7Ci0gICAgR3N0TWFwSW5mbyogbWFwSW5mbyA9
IHN0YXRpY19jYXN0PEdzdE1hcEluZm8qPihnc3RfbWluaV9vYmplY3Rfc3RlYWxfcWRhdGEobWlu
aU9iamVjdCwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcod2Via2l0R3N0TWFwSW5mb1F1YXJr
U3RyaW5nKSkpOwotCi0gICAgaWYgKCFtYXBJbmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
c3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgbWFwSW5mbyk7Ci0gICAgZmFzdEZyZWUobWFwSW5mbyk7
Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IGV4dHJhY3RHU3RyZWFtZXJPcHRpb25zRnJvbUNvbW1hbmRM
aW5lKCkKIHsKICAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGNvbnRlbnRzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5oCmluZGV4IDc5M2I0ZGQ3NTY0ODk3ZmQxMzM4ZWVjMjAzY2U5ZTk3MTE0OTliMTEu
LjVkNzA3ZDRiMzhmYmE0ZWRjMmViODNhNmNhNzM5MTk2MmQ4NTJmMjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmgKQEAgLTYzLDE0ICs2Myw5IEBAIGJvb2wgZ2V0VmlkZW9TaXplQW5kRm9ybWF0
RnJvbUNhcHMoR3N0Q2FwcyosIFdlYkNvcmU6OkludFNpemUmLCBHc3RWaWRlb0Zvcm1hdCYsCiBz
dGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY29uc3Qg
R3N0Q2FwcyopOwogYm9vbCBnZXRTYW1wbGVWaWRlb0luZm8oR3N0U2FtcGxlKiwgR3N0VmlkZW9J
bmZvJik7CiAjZW5kaWYKLUdzdEJ1ZmZlciogY3JlYXRlR3N0QnVmZmVyKEdzdEJ1ZmZlciopOwot
R3N0QnVmZmVyKiBjcmVhdGVHc3RCdWZmZXJGb3JEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpOwotY2hhciogZ2V0R3N0QnVmZmVyRGF0YVBvaW50ZXIoR3N0QnVmZmVyKik7CiBjb25z
dCBjaGFyKiBjYXBzTWVkaWFUeXBlKGNvbnN0IEdzdENhcHMqKTsKIGJvb2wgZG9DYXBzSGF2ZVR5
cGUoY29uc3QgR3N0Q2FwcyosIGNvbnN0IGNoYXIqKTsKIGJvb2wgYXJlRW5jcnlwdGVkQ2Fwcyhj
b25zdCBHc3RDYXBzKik7Ci12b2lkIG1hcEdzdEJ1ZmZlcihHc3RCdWZmZXIqLCB1aW50MzJfdCk7
Ci12b2lkIHVubWFwR3N0QnVmZmVyKEdzdEJ1ZmZlciopOwogVmVjdG9yPFN0cmluZz4gZXh0cmFj
dEdTdHJlYW1lck9wdGlvbnNGcm9tQ29tbWFuZExpbmUoKTsKIGJvb2wgaW5pdGlhbGl6ZUdTdHJl
YW1lcihzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiYmID0gc3RkOjpudWxsb3B0KTsKIHVu
c2lnbmVkIGdldEdzdFBsYXlGbGFnKGNvbnN0IGNoYXIqIG5pY2spOwpAQCAtODQsMTEgKzc5LDIy
IEBAIGlubGluZSBHc3RDbG9ja1RpbWUgdG9Hc3RDbG9ja1RpbWUoY29uc3QgTWVkaWFUaW1lICZt
ZWRpYVRpbWUpCiBjbGFzcyBHc3RNYXBwZWRCdWZmZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEdzdE1hcHBlZEJ1ZmZlcik7CiBwdWJsaWM6CisKKyAgICBHc3RNYXBwZWRCdWZmZXIoKSA9
IGRlZmF1bHQ7CisgICAgR3N0TWFwcGVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYmIG90aGVyKQor
ICAgICAgICA6IG1fYnVmZmVyKG90aGVyLm1fYnVmZmVyKQorICAgICAgICAsIG1faW5mbyhvdGhl
ci5tX2luZm8pCisgICAgICAgICwgbV9pc1ZhbGlkKG90aGVyLm1faXNWYWxpZCkKKyAgICB7Cisg
ICAgICAgIG90aGVyLm1faXNWYWxpZCA9IGZhbHNlOworICAgIH0KKwogICAgIEdzdE1hcHBlZEJ1
ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCiAgICAgICAgIDogbV9i
dWZmZXIoYnVmZmVyKQogICAgIHsKICAgICAgICAgbV9pc1ZhbGlkID0gZ3N0X2J1ZmZlcl9tYXAo
bV9idWZmZXIsICZtX2luZm8sIGZsYWdzKTsKICAgICB9CisKICAgICAvLyBVbmZvcnR1bmF0ZWx5
LCBHU1RfTUFQX1JFQURXUklURSBpcyBkZWZpbmVkIG91dCBvZiBsaW5lIGZyb20gdGhlIE1hcEZs
YWdzCiAgICAgLy8gZW51bSBhcyBhbiBpbnQsIGFuZCBDKysgaXMgY2FyZWZ1bCB0byBub3QgaW1w
bGljaXR5IGNvbnZlcnQgaXQgdG8gYW4gZW51bS4KICAgICBHc3RNYXBwZWRCdWZmZXIoR3N0QnVm
ZmVyKiBidWZmZXIsIGludCBmbGFncykKQEAgLTk4LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIChtX2lzVmFsaWQpCiAgICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG1f
YnVmZmVyLCAmbV9pbmZvKTsKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgfQogCiAg
ICAgdWludDhfdCogZGF0YSgpIHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9CkBAIC0xMDUsOCArMTEyLDggQEAgcHVibGljOgog
CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsg
fQogcHJpdmF0ZToKLSAgICBHc3RCdWZmZXIqIG1fYnVmZmVyOwotICAgIEdzdE1hcEluZm8gbV9p
bmZvOworICAgIEdzdEJ1ZmZlciogbV9idWZmZXIgeyBudWxscHRyIH07CisgICAgR3N0TWFwSW5m
byBtX2luZm8gR1NUX01BUF9JTkZPX0lOSVQ7CiAgICAgYm9vbCBtX2lzVmFsaWQgeyBmYWxzZSB9
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRl
eCA0ZjFhMDJmZDJlYjNhNmQyMDA0ZDRhOGJmNTUwNjgwMzhmODlmMDEzLi4yMzFjZmQyZDFmMzA5
Yzc5Yjk4NWNjZDU2ZDMwODI1YTEyYjEwM2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcApAQCAtMTAzLDcgKzEwMyw2IEBAIHN0cnVjdCBfV2ViS2l0V2Vi
U3JjUHJpdmF0ZSB7CiAgICAgdWludDY0X3QgbWluaW11bUJsb2Nrc2l6ZTsKIAogICAgIFJlZlB0
cjxNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbj4+IG5vdGlm
aWVyOwotICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXI7CiB9OwogCiBlbnVtIHsKQEAgLTM2
NiwxMSArMzY1LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMq
IHNyYykKIAogICAgIGJvb2wgd2FzU2Vla2luZyA9IHN0ZDo6ZXhjaGFuZ2UocHJpdi0+aXNTZWVr
aW5nLCBmYWxzZSk7CiAKLSAgICBpZiAocHJpdi0+YnVmZmVyKSB7Ci0gICAgICAgIHVubWFwR3N0
QnVmZmVyKHByaXYtPmJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigp
OwotICAgIH0KLQogICAgIHByaXYtPnBhdXNlZCA9IGZhbHNlOwogCiAgICAgcHJpdi0+b2Zmc2V0
ID0gMDsKQEAgLTg5MSwxNiArODg1LDggQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IGMKICAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKICAgICBXZWJL
aXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgR1NUX0xPR19PQkpFQ1Qo
c3JjLCAiSGF2ZSAlbGxkIGJ5dGVzIG9mIGRhdGEiLCBwcml2LT5idWZmZXIgPyBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KGdzdF9idWZmZXJfZ2V0X3NpemUocHJpdi0+YnVmZmVyLmdldCgpKSkgOiBs
ZW5ndGgpOwotCi0gICAgQVNTRVJUKCFwcml2LT5idWZmZXIgfHwgZGF0YSA9PSBnZXRHc3RCdWZm
ZXJEYXRhUG9pbnRlcihwcml2LT5idWZmZXIuZ2V0KCkpKTsKLQotICAgIGlmIChwcml2LT5idWZm
ZXIpCi0gICAgICAgIHVubWFwR3N0QnVmZmVyKHByaXYtPmJ1ZmZlci5nZXQoKSk7Ci0KICAgICBp
ZiAocHJpdi0+aXNTZWVraW5nKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vl
ayBpbiBwcm9ncmVzcywgaWdub3JpbmcgZGF0YSIpOwotICAgICAgICBwcml2LT5idWZmZXIuY2xl
YXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTA5LDcgKzg5NSw2IEBAIHZvaWQg
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmLCBjb25zdCBjCiAgICAgICAgIGlmIChwcml2LT5vZmZzZXQgKyBsZW5ndGggPD0g
cHJpdi0+cmVxdWVzdGVkT2Zmc2V0KSB7CiAgICAgICAgICAgICAvLyBEaXNjYXJkIGFsbCB0aGUg
YnVmZmVycyBjb21pbmcgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbi4KICAgICAg
ICAgICAgIHByaXYtPm9mZnNldCArPSBsZW5ndGg7Ci0gICAgICAgICAgICBwcml2LT5idWZmZXIu
Y2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC05MTcsMjEgKzkw
MiwxMiBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQo
UGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgYwogICAgICAgICAgICAgZ3VpbnQ2NCBvZmZz
ZXQgPSBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgLSBwcml2LT5vZmZzZXQ7CiAgICAgICAgICAgICBk
YXRhICs9IG9mZnNldDsKICAgICAgICAgICAgIGxlbmd0aCAtPSBvZmZzZXQ7Ci0gICAgICAgICAg
ICBpZiAocHJpdi0+YnVmZmVyKQotICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfcmVzaXplKHBy
aXYtPmJ1ZmZlci5nZXQoKSwgb2Zmc2V0LCAtMSk7CiAgICAgICAgICAgICBwcml2LT5vZmZzZXQg
PSBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQ7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2LT5yZXF1
ZXN0ZWRPZmZzZXQgPSAwOwogICAgIH0KIAotICAgIC8vIFBvcnRzIHVzaW5nIHRoZSBHU3RyZWFt
ZXIgYmFja2VuZCBidXQgbm90IHRoZSBzb3VwIGltcGxlbWVudGF0aW9uIG9mIFJlc291cmNlSGFu
ZGxlCi0gICAgLy8gd29uJ3QgYmUgdXNpbmcgYnVmZmVycyBwcm92aWRlZCBieSB0aGlzIGNsaWVu
dCwgdGhlIGJ1ZmZlciBpcyBjcmVhdGVkIGhlcmUgaW4gdGhhdCBjYXNlLgotICAgIGlmICghcHJp
di0+YnVmZmVyKQotICAgICAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoY3JlYXRlR3N0QnVm
ZmVyRm9yRGF0YShkYXRhLCBsZW5ndGgpKTsKLSAgICBlbHNlCi0gICAgICAgIGdzdF9idWZmZXJf
c2V0X3NpemUocHJpdi0+YnVmZmVyLmdldCgpLCBzdGF0aWNfY2FzdDxnc3NpemU+KGxlbmd0aCkp
OwotCiAgICAgY2hlY2tVcGRhdGVCbG9ja3NpemUobGVuZ3RoKTsKIAogICAgIHVpbnQ2NF90IHN0
YXJ0aW5nT2Zmc2V0ID0gcHJpdi0+b2Zmc2V0OwpAQCAtOTU2LDcgKzkzMiw3IEBAIHZvaWQgQ2Fj
aGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmLCBjb25zdCBjCiAgICAgICAgIHVpbnQ2NF90IHN1YkJ1ZmZlck9mZnNldCA9IHN0YXJ0
aW5nT2Zmc2V0ICsgY3VycmVudE9mZnNldDsKICAgICAgICAgdWludDY0X3QgY3VycmVudE9mZnNl
dFNpemUgPSBzdGQ6Om1pbihibG9ja1NpemUsIGJ1ZmZlclNpemUgLSBjdXJyZW50T2Zmc2V0KTsK
IAotICAgICAgICBHc3RCdWZmZXIqIHN1YkJ1ZmZlciA9IGdzdF9idWZmZXJfY29weV9yZWdpb24o
cHJpdi0+YnVmZmVyLmdldCgpLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBjdXJyZW50T2Zmc2V0LCBj
dXJyZW50T2Zmc2V0U2l6ZSk7CisgICAgICAgIEdzdEJ1ZmZlciogc3ViQnVmZmVyID0gZ3N0X2J1
ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChkYXRhICsgY3VycmVudE9mZnNldCwgY3VycmVudE9m
ZnNldFNpemUpLCBjdXJyZW50T2Zmc2V0U2l6ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghc3Vi
QnVmZmVyKSkgewogICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBGQUlM
RUQsICgiRmFpbGVkIHRvIGFsbG9jYXRlIHN1Yi1idWZmZXIiKSwgKG51bGxwdHIpKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtOTg1LDggKzk2MSw2IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBj
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIHByaXYtPmJ1ZmZl
ci5jbGVhcigpOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjphY2Nl
c3NDb250cm9sQ2hlY2tGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350417</attachid>
            <date>2018-09-21 13:44:32 -0700</date>
            <delta_ts>2018-09-23 23:00:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189699-20180921224430.patch</filename>
            <type>text/plain</type>
            <size>14604</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkwNzhlZDgzYmIxMzNm
NDExNTllNzQzNjhkMWU2MGNjNGI3YzY5Ni4uYmFkZmMyOTY2MTc3N2Q2MzIyNjgwNTNmMDg0MzYw
OTY3MDhiMDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE4LTA5LTIxICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBVdGlsaXRpZXMgY2xlYW51cHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4OTY5OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDQ2MzQxNDM+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEdzdE1h
cHBlZEJ1ZmZlciBub3cgaGFzIGEgbW92ZSBjb25zdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBl
YXNpbHkKKyAgICAgICAgcmV1c2VkIGluIHRoZSB3ZWJhdWRpb3NyYyBlbGVtZW50LiBUaGUgbm93
LXVudXNlZCBjb3JyZXNwb25kaW5nCisgICAgICAgIGJ1ZmZlci1tYXBwaW5nIHV0aWxpdGllcyBh
cmUgcmVtb3ZlZCBmcm9tIHRoZSBjb2RlLWJhc2UuCisKKyAgICAgICAgVGhlIEhUVFAgc291cmNl
IGVsZW1lbnQgdXNlZCB0byBoYW5kbGUgYSBHc3RCdWZmZXIgaW4gaXRzIHByaXZhdGUKKyAgICAg
ICAgc3RydWN0dXJlIGJ1dCB0aGlzIGlzIG5vIGxvbmdlciByZXF1aXJlZCBzaW5jZSBkYXRhIGlz
IG5vdyBwdXNoZWQKKyAgICAgICAgaW4gY2h1bmtzLCBzZWUgYnVnICMxODI4MjkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNMb29wKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUdzdEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVHc3RCdWZmZXJGb3JEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldEdzdEJ1
ZmZlckRhdGFQb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1hcEdzdEJ1ZmZl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bm1hcEdzdEJ1ZmZlcik6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
OgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUpOiBOZXcgbWV0aG9k
IHJldHVybmluZyBhCisgICAgICAgIHJlZmVyZW5jZSB0byBhIG5ld2x5IGNyZWF0ZWQgR3N0TWFw
cGVkQnVmZmVyIGluc3RhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViU3JjU3Rv
cCk6IFJlbW92ZSByZWZlcmVuY2UgdG8gdW51c2VkIEdzdEJ1ZmZlci4KKyAgICAgICAgKENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQpOiBEaXR0by4KKwogMjAxOC0w
OS0yMSAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIzNjI1NS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0
V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDU1Y2RiNDJjYzZlZGQwMTU4ZmM5MTY0
NWQ0MDk5OGI2NjgyZjk1ZmMuLjlhMWQxOTc5ZDQ1OGEzNzk2ZmZhMGFmOTQyMzYyYTZlMmNlNzMz
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9X
ZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApA
QCAtMzA4LDcgKzMwOCw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsCiAgICAgfQogfQogCi1z
dGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2ViQXVkaW9TcmMqIHNyYykK
K3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxHUmVmUHRyPEdzdEJ1ZmZlcj4+PiB3ZWJLaXRX
ZWJBdWRpb1NyY0FsbG9jYXRlQnVmZmVyc0FuZFJlbmRlckF1ZGlvKFdlYktpdFdlYkF1ZGlvU3Jj
KiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwogCkBAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNM
b29wKFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMpCiAgICAgaWYgKCFwcml2LT5wcm92aWRlciB8fCAh
cHJpdi0+YnVzKSB7CiAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09SRSwgRkFJTEVE
LCAoIkludGVybmFsIFdlYkF1ZGlvU3JjIGVycm9yIiksICgiQ2FuJ3Qgc3RhcnQgd2l0aG91dCBw
cm92aWRlciBvciBidXMiKSk7CiAgICAgICAgIGdzdF90YXNrX3N0b3Aoc3JjLT5wcml2LT50YXNr
LmdldCgpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
ICAgIH0KIAogICAgIEFTU0VSVChwcml2LT5wb29sKTsKQEAgLTMyNywzNyArMzI3LDQ5IEBAIHN0
YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjTG9vcChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQog
CiAgICAgVmVjdG9yPEdSZWZQdHI8R3N0QnVmZmVyPj4gY2hhbm5lbEJ1ZmZlckxpc3Q7CiAgICAg
Y2hhbm5lbEJ1ZmZlckxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwcml2LT5zb3VyY2VzLnNp
emUoKSk7CisgICAgVmVjdG9yPEdzdE1hcHBlZEJ1ZmZlcj4gbWFwcGVkQnVmZmVyczsKKyAgICBt
YXBwZWRCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJpdi0+c291cmNlcy5zaXplKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcml2LT5zb3VyY2VzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXI7CiAgICAgICAgIEdzdEZsb3dS
ZXR1cm4gcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKHByaXYtPnBvb2wuZ2V0
KCksICZidWZmZXIub3V0UHRyKCksIG51bGxwdHIpOwogICAgICAgICBpZiAocmV0ICE9IEdTVF9G
TE9XX09LKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IGNoYW5uZWxCdWZmZXJM
aXN0KQotICAgICAgICAgICAgICAgIHVubWFwR3N0QnVmZmVyKGJ1ZmZlci5nZXQoKSk7Ci0KICAg
ICAgICAgICAgIC8vIEZMVVNISU5HIGFuZCBFT1MgYXJlIG5vdCBlcnJvcnMuCiAgICAgICAgICAg
ICBpZiAocmV0IDwgR1NUX0ZMT1dfRU9TIHx8IHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKQog
ICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09SRSwgUEFELCAoIkludGVy
bmFsIFdlYkF1ZGlvU3JjIGVycm9yIiksICgiRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3Ig
ZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZShyZXQpKSk7Ci0gICAgICAgICAgICBnc3RfdGFz
a19zdG9wKHNyYy0+cHJpdi0+dGFzay5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KGJ1ZmZlcik7CiAgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QKGJ1ZmZlci5nZXQoKSkgPSB0
aW1lc3RhbXA7CiAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04oYnVmZmVyLmdldCgpKSA9IGR1
cmF0aW9uOwotICAgICAgICBtYXBHc3RCdWZmZXIoYnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQURX
UklURSk7Ci0gICAgICAgIHByaXYtPmJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4oZ2V0R3N0QnVmZmVyRGF0YVBvaW50ZXIoYnVmZmVyLmdldCgpKSksIHBy
aXYtPmZyYW1lc1RvUHVsbCk7CisgICAgICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWZmZXIo
YnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQURXUklURSk7CisgICAgICAgIEFTU0VSVChtYXBwZWRC
dWZmZXIpOworICAgICAgICBtYXBwZWRCdWZmZXJzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1h
cHBlZEJ1ZmZlcikpOworICAgICAgICBwcml2LT5idXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KG1hcHBlZEJ1ZmZlcnNbaV0uZGF0YSgpKSwgcHJpdi0+ZnJh
bWVzVG9QdWxsKTsKICAgICAgICAgY2hhbm5lbEJ1ZmZlckxpc3QudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBs
b2NhbC9saXZlIGF1ZGlvIGlucHV0LgogICAgIHByaXYtPnByb3ZpZGVyLT5yZW5kZXIobnVsbHB0
ciwgcHJpdi0+YnVzLCBwcml2LT5mcmFtZXNUb1B1bGwpOwogCi0gICAgQVNTRVJUKGNoYW5uZWxC
dWZmZXJMaXN0LnNpemUoKSA9PSBwcml2LT5zb3VyY2VzLnNpemUoKSk7CisgICAgcmV0dXJuIHN0
ZDo6bWFrZV9vcHRpb25hbChjaGFubmVsQnVmZmVyTGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YktpdFdlYkF1ZGlvU3JjTG9vcChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktp
dFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPEdSZWZQdHI8R3N0QnVmZmVyPj4+IGNoYW5uZWxCdWZmZXJMaXN0ID0gd2Vi
S2l0V2ViQXVkaW9TcmNBbGxvY2F0ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyhzcmMpOworICAgIGlm
ICghY2hhbm5lbEJ1ZmZlckxpc3QpIHsKKyAgICAgICAgZ3N0X3Rhc2tfc3RvcChzcmMtPnByaXYt
PnRhc2suZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGNoYW5u
ZWxCdWZmZXJMaXN0LT5zaXplKCkgPT0gcHJpdi0+c291cmNlcy5zaXplKCkpOworCiAgICAgYm9v
bCBmYWlsZWQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJpdi0+c291
cmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBVbm1hcCBiZWZvcmUgcGFzc2luZyBvbiB0
aGUgYnVmZmVyLgotICAgICAgICBhdXRvJiBidWZmZXIgPSBjaGFubmVsQnVmZmVyTGlzdFtpXTsK
LSAgICAgICAgdW5tYXBHc3RCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICAgICAgYXV0byYgYnVm
ZmVyID0gY2hhbm5lbEJ1ZmZlckxpc3QudmFsdWUoKVtpXTsKIAogICAgICAgICBpZiAocHJpdi0+
ZW5hYmxlR2FwQnVmZmVyU3VwcG9ydCAmJiBwcml2LT5idXMtPmNoYW5uZWwoaSktPmlzU2lsZW50
KCkpCiAgICAgICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUKGJ1ZmZlci5nZXQoKSwgR1NUX0JV
RkZFUl9GTEFHX0dBUCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDYyMzUzZTRm
M2U2ODQ3ZjlmMGNlZDM1ZGUyNDZiMDUxYTgyZGQ5NjMuLjYwNWQ2NzI3MjE0NDkyOTA0YjMyZTM3
YTdjMTNjOTQ1MjE5OTk4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC00MCw4
ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgY2hhciogd2Via2l0R3N0
TWFwSW5mb1F1YXJrU3RyaW5nID0gIndlYmtpdC1nc3QtbWFwLWluZm8iOwotCiBHc3RQYWQqIHdl
YmtpdEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBz
dGF0aWNQYWRUZW1wbGF0ZSwgY29uc3QgZ2NoYXIqIG5hbWUsIEdzdFBhZCogdGFyZ2V0KQogewog
ICAgIEdzdFBhZCogcGFkOwpAQCAtMTQzLDI2ICsxNDEsNiBAQCBib29sIGdldFNhbXBsZVZpZGVv
SW5mbyhHc3RTYW1wbGUqIHNhbXBsZSwgR3N0VmlkZW9JbmZvJiB2aWRlb0luZm8pCiB9CiAjZW5k
aWYKIAotR3N0QnVmZmVyKiBjcmVhdGVHc3RCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIpCi17Ci0g
ICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKLSAgICBH
c3RCdWZmZXIqIG5ld0J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXpl
KTsKLQotICAgIGlmICghbmV3QnVmZmVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGdzdF9i
dWZmZXJfY29weV9pbnRvKG5ld0J1ZmZlciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJD
b3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSksIDAsIGJ1ZmZlclNpemUpOwotICAg
IHJldHVybiBuZXdCdWZmZXI7Ci19Ci0KLUdzdEJ1ZmZlciogY3JlYXRlR3N0QnVmZmVyRm9yRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGxlbmd0aCk7Ci0KLSAgICBnc3RfYnVmZmVyX2Zp
bGwoYnVmZmVyLCAwLCBkYXRhLCBsZW5ndGgpOwotCi0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KIAog
Y29uc3QgY2hhciogY2Fwc01lZGlhVHlwZShjb25zdCBHc3RDYXBzKiBjYXBzKQogewpAQCAtMjA1
LDM4ICsxODMsNiBAQCBib29sIGFyZUVuY3J5cHRlZENhcHMoY29uc3QgR3N0Q2FwcyogY2FwcykK
ICNlbmRpZgogfQogCi1jaGFyKiBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihHc3RCdWZmZXIqIGJ1
ZmZlcikKLXsKLSAgICBHc3RNaW5pT2JqZWN0KiBtaW5pT2JqZWN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxHc3RNaW5pT2JqZWN0Kj4oYnVmZmVyKTsKLSAgICBHc3RNYXBJbmZvKiBtYXBJbmZvID0gc3Rh
dGljX2Nhc3Q8R3N0TWFwSW5mbyo+KGdzdF9taW5pX29iamVjdF9nZXRfcWRhdGEobWluaU9iamVj
dCwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcod2Via2l0R3N0TWFwSW5mb1F1YXJrU3RyaW5n
KSkpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBJbmZvLT5kYXRhKTsK
LX0KLQotdm9pZCBtYXBHc3RCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIsIHVpbnQzMl90IGZsYWdz
KQotewotICAgIEdzdE1hcEluZm8qIG1hcEluZm8gPSBzdGF0aWNfY2FzdDxHc3RNYXBJbmZvKj4o
ZmFzdE1hbGxvYyhzaXplb2YoR3N0TWFwSW5mbykpKTsKLSAgICBpZiAoIWdzdF9idWZmZXJfbWFw
KGJ1ZmZlciwgbWFwSW5mbywgc3RhdGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KGZsYWdzKSkpIHsKLSAg
ICAgICAgZmFzdEZyZWUobWFwSW5mbyk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVy
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdzdE1pbmlPYmplY3QqIG1pbmlPYmpl
Y3QgPSByZWludGVycHJldF9jYXN0PEdzdE1pbmlPYmplY3QqPihidWZmZXIpOwotICAgIGdzdF9t
aW5pX29iamVjdF9zZXRfcWRhdGEobWluaU9iamVjdCwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJp
bmcod2Via2l0R3N0TWFwSW5mb1F1YXJrU3RyaW5nKSwgbWFwSW5mbywgbnVsbHB0cik7Ci19Ci0K
LXZvaWQgdW5tYXBHc3RCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgR3N0TWluaU9i
amVjdCogbWluaU9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWluaU9iamVjdCo+KGJ1ZmZl
cik7Ci0gICAgR3N0TWFwSW5mbyogbWFwSW5mbyA9IHN0YXRpY19jYXN0PEdzdE1hcEluZm8qPihn
c3RfbWluaV9vYmplY3Rfc3RlYWxfcWRhdGEobWluaU9iamVjdCwgZ19xdWFya19mcm9tX3N0YXRp
Y19zdHJpbmcod2Via2l0R3N0TWFwSW5mb1F1YXJrU3RyaW5nKSkpOwotCi0gICAgaWYgKCFtYXBJ
bmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgbWFw
SW5mbyk7Ci0gICAgZmFzdEZyZWUobWFwSW5mbyk7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IGV4dHJh
Y3RHU3RyZWFtZXJPcHRpb25zRnJvbUNvbW1hbmRMaW5lKCkKIHsKICAgICBHVW5pcXVlT3V0UHRy
PGNoYXI+IGNvbnRlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCmluZGV4IDc5M2I0ZGQ3NTY0
ODk3ZmQxMzM4ZWVjMjAzY2U5ZTk3MTE0OTliMTEuLjk2YjRjOTMyZjkwYmFlMmU0MTU2NWE5NGJk
YTI3ODI5NGYxNTg1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTYzLDE0ICs2Myw5
IEBAIGJvb2wgZ2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoR3N0Q2FwcyosIFdlYkNvcmU6
OkludFNpemUmLCBHc3RWaWRlb0Zvcm1hdCYsCiBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gZ2V0
VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY29uc3QgR3N0Q2FwcyopOwogYm9vbCBnZXRTYW1wbGVW
aWRlb0luZm8oR3N0U2FtcGxlKiwgR3N0VmlkZW9JbmZvJik7CiAjZW5kaWYKLUdzdEJ1ZmZlciog
Y3JlYXRlR3N0QnVmZmVyKEdzdEJ1ZmZlciopOwotR3N0QnVmZmVyKiBjcmVhdGVHc3RCdWZmZXJG
b3JEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwotY2hhciogZ2V0R3N0QnVmZmVy
RGF0YVBvaW50ZXIoR3N0QnVmZmVyKik7CiBjb25zdCBjaGFyKiBjYXBzTWVkaWFUeXBlKGNvbnN0
IEdzdENhcHMqKTsKIGJvb2wgZG9DYXBzSGF2ZVR5cGUoY29uc3QgR3N0Q2FwcyosIGNvbnN0IGNo
YXIqKTsKIGJvb2wgYXJlRW5jcnlwdGVkQ2Fwcyhjb25zdCBHc3RDYXBzKik7Ci12b2lkIG1hcEdz
dEJ1ZmZlcihHc3RCdWZmZXIqLCB1aW50MzJfdCk7Ci12b2lkIHVubWFwR3N0QnVmZmVyKEdzdEJ1
ZmZlciopOwogVmVjdG9yPFN0cmluZz4gZXh0cmFjdEdTdHJlYW1lck9wdGlvbnNGcm9tQ29tbWFu
ZExpbmUoKTsKIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lcihzdGQ6Om9wdGlvbmFsPFZlY3RvcjxT
dHJpbmc+PiYmID0gc3RkOjpudWxsb3B0KTsKIHVuc2lnbmVkIGdldEdzdFBsYXlGbGFnKGNvbnN0
IGNoYXIqIG5pY2spOwpAQCAtODQsMTEgKzc5LDIxIEBAIGlubGluZSBHc3RDbG9ja1RpbWUgdG9H
c3RDbG9ja1RpbWUoY29uc3QgTWVkaWFUaW1lICZtZWRpYVRpbWUpCiBjbGFzcyBHc3RNYXBwZWRC
dWZmZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdzdE1hcHBlZEJ1ZmZlcik7CiBwdWJs
aWM6CisKKyAgICBHc3RNYXBwZWRCdWZmZXIoR3N0TWFwcGVkQnVmZmVyJiYgb3RoZXIpCisgICAg
ICAgIDogbV9idWZmZXIob3RoZXIubV9idWZmZXIpCisgICAgICAgICwgbV9pbmZvKG90aGVyLm1f
aW5mbykKKyAgICAgICAgLCBtX2lzVmFsaWQob3RoZXIubV9pc1ZhbGlkKQorICAgIHsKKyAgICAg
ICAgb3RoZXIubV9pc1ZhbGlkID0gZmFsc2U7CisgICAgfQorCiAgICAgR3N0TWFwcGVkQnVmZmVy
KEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykKICAgICAgICAgOiBtX2J1ZmZl
cihidWZmZXIpCiAgICAgewogICAgICAgICBtX2lzVmFsaWQgPSBnc3RfYnVmZmVyX21hcChtX2J1
ZmZlciwgJm1faW5mbywgZmxhZ3MpOwogICAgIH0KKwogICAgIC8vIFVuZm9ydHVuYXRlbHksIEdT
VF9NQVBfUkVBRFdSSVRFIGlzIGRlZmluZWQgb3V0IG9mIGxpbmUgZnJvbSB0aGUgTWFwRmxhZ3MK
ICAgICAvLyBlbnVtIGFzIGFuIGludCwgYW5kIEMrKyBpcyBjYXJlZnVsIHRvIG5vdCBpbXBsaWNp
dHkgY29udmVydCBpdCB0byBhbiBlbnVtLgogICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIq
IGJ1ZmZlciwgaW50IGZsYWdzKQpAQCAtOTgsNiArMTAzLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKG1faXNWYWxpZCkKICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAobV9idWZm
ZXIsICZtX2luZm8pOworICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICB9CiAKICAgICB1
aW50OF90KiBkYXRhKCkgeyBBU1NFUlQobV9pc1ZhbGlkKTsgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihtX2luZm8uZGF0YSk7IH0KQEAgLTEwNSw4ICsxMTEsOCBAQCBwdWJsaWM6CiAKICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CiBw
cml2YXRlOgotICAgIEdzdEJ1ZmZlciogbV9idWZmZXI7Ci0gICAgR3N0TWFwSW5mbyBtX2luZm87
CisgICAgR3N0QnVmZmVyKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKKyAgICBHc3RNYXBJbmZvIG1f
aW5mbyBHU1RfTUFQX0lORk9fSU5JVDsKICAgICBib29sIG1faXNWYWxpZCB7IGZhbHNlIH07CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDRm
MWEwMmZkMmViM2E2ZDIwMDRkNGE4YmY1NTA2ODAzOGY4OWYwMTMuLjIzMWNmZDJkMWYzMDljNzli
OTg1Y2NkNTZkMzA4MjVhMTJiMTAzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwCkBAIC0xMDMsNyArMTAzLDYgQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQ
cml2YXRlIHsKICAgICB1aW50NjRfdCBtaW5pbXVtQmxvY2tzaXplOwogCiAgICAgUmVmUHRyPE1h
aW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uPj4gbm90aWZpZXI7
Ci0gICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlcjsKIH07CiAKIGVudW0gewpAQCAtMzY2LDEx
ICszNjUsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3Jj
KQogCiAgICAgYm9vbCB3YXNTZWVraW5nID0gc3RkOjpleGNoYW5nZShwcml2LT5pc1NlZWtpbmcs
IGZhbHNlKTsKIAotICAgIGlmIChwcml2LT5idWZmZXIpIHsKLSAgICAgICAgdW5tYXBHc3RCdWZm
ZXIocHJpdi0+YnVmZmVyLmdldCgpKTsKLSAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7Ci0g
ICAgfQotCiAgICAgcHJpdi0+cGF1c2VkID0gZmFsc2U7CiAKICAgICBwcml2LT5vZmZzZXQgPSAw
OwpAQCAtODkxLDE2ICs4ODUsOCBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgYwogICAgIFdlYktp
dFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwogICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBHU1RfTE9HX09CSkVDVChzcmMs
ICJIYXZlICVsbGQgYnl0ZXMgb2YgZGF0YSIsIHByaXYtPmJ1ZmZlciA/IHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4oZ3N0X2J1ZmZlcl9nZXRfc2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpKSA6IGxlbmd0
aCk7Ci0KLSAgICBBU1NFUlQoIXByaXYtPmJ1ZmZlciB8fCBkYXRhID09IGdldEdzdEJ1ZmZlckRh
dGFQb2ludGVyKHByaXYtPmJ1ZmZlci5nZXQoKSkpOwotCi0gICAgaWYgKHByaXYtPmJ1ZmZlcikK
LSAgICAgICAgdW5tYXBHc3RCdWZmZXIocHJpdi0+YnVmZmVyLmdldCgpKTsKLQogICAgIGlmIChw
cml2LT5pc1NlZWtpbmcpIHsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIGlu
IHByb2dyZXNzLCBpZ25vcmluZyBkYXRhIik7Ci0gICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05MDksNyArODk1LDYgQEAgdm9pZCBDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYsIGNvbnN0IGMKICAgICAgICAgaWYgKHByaXYtPm9mZnNldCArIGxlbmd0aCA8PSBwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQpIHsKICAgICAgICAgICAgIC8vIERpc2NhcmQgYWxsIHRoZSBidWZm
ZXJzIGNvbWluZyBiZWZvcmUgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLgogICAgICAgICAg
ICAgcHJpdi0+b2Zmc2V0ICs9IGxlbmd0aDsKLSAgICAgICAgICAgIHByaXYtPmJ1ZmZlci5jbGVh
cigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTkxNywyMSArOTAyLDEy
IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBjCiAgICAgICAgICAgICBndWludDY0IG9mZnNldCA9
IHByaXYtPnJlcXVlc3RlZE9mZnNldCAtIHByaXYtPm9mZnNldDsKICAgICAgICAgICAgIGRhdGEg
Kz0gb2Zmc2V0OwogICAgICAgICAgICAgbGVuZ3RoIC09IG9mZnNldDsKLSAgICAgICAgICAgIGlm
IChwcml2LT5idWZmZXIpCi0gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZXNpemUocHJpdi0+
YnVmZmVyLmdldCgpLCBvZmZzZXQsIC0xKTsKICAgICAgICAgICAgIHByaXYtPm9mZnNldCA9IHBy
aXYtPnJlcXVlc3RlZE9mZnNldDsKICAgICAgICAgfQogCiAgICAgICAgIHByaXYtPnJlcXVlc3Rl
ZE9mZnNldCA9IDA7CiAgICAgfQogCi0gICAgLy8gUG9ydHMgdXNpbmcgdGhlIEdTdHJlYW1lciBi
YWNrZW5kIGJ1dCBub3QgdGhlIHNvdXAgaW1wbGVtZW50YXRpb24gb2YgUmVzb3VyY2VIYW5kbGUK
LSAgICAvLyB3b24ndCBiZSB1c2luZyBidWZmZXJzIHByb3ZpZGVkIGJ5IHRoaXMgY2xpZW50LCB0
aGUgYnVmZmVyIGlzIGNyZWF0ZWQgaGVyZSBpbiB0aGF0IGNhc2UuCi0gICAgaWYgKCFwcml2LT5i
dWZmZXIpCi0gICAgICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZihjcmVhdGVHc3RCdWZmZXJG
b3JEYXRhKGRhdGEsIGxlbmd0aCkpOwotICAgIGVsc2UKLSAgICAgICAgZ3N0X2J1ZmZlcl9zZXRf
c2l6ZShwcml2LT5idWZmZXIuZ2V0KCksIHN0YXRpY19jYXN0PGdzc2l6ZT4obGVuZ3RoKSk7Ci0K
ICAgICBjaGVja1VwZGF0ZUJsb2Nrc2l6ZShsZW5ndGgpOwogCiAgICAgdWludDY0X3Qgc3RhcnRp
bmdPZmZzZXQgPSBwcml2LT5vZmZzZXQ7CkBAIC05NTYsNyArOTMyLDcgQEAgdm9pZCBDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYsIGNvbnN0IGMKICAgICAgICAgdWludDY0X3Qgc3ViQnVmZmVyT2Zmc2V0ID0gc3RhcnRpbmdP
ZmZzZXQgKyBjdXJyZW50T2Zmc2V0OwogICAgICAgICB1aW50NjRfdCBjdXJyZW50T2Zmc2V0U2l6
ZSA9IHN0ZDo6bWluKGJsb2NrU2l6ZSwgYnVmZmVyU2l6ZSAtIGN1cnJlbnRPZmZzZXQpOwogCi0g
ICAgICAgIEdzdEJ1ZmZlciogc3ViQnVmZmVyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbihwcml2
LT5idWZmZXIuZ2V0KCksIEdTVF9CVUZGRVJfQ09QWV9BTEwsIGN1cnJlbnRPZmZzZXQsIGN1cnJl
bnRPZmZzZXRTaXplKTsKKyAgICAgICAgR3N0QnVmZmVyKiBzdWJCdWZmZXIgPSBnc3RfYnVmZmVy
X25ld193cmFwcGVkKGdfbWVtZHVwKGRhdGEgKyBjdXJyZW50T2Zmc2V0LCBjdXJyZW50T2Zmc2V0
U2l6ZSksIGN1cnJlbnRPZmZzZXRTaXplKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWJCdWZm
ZXIpKSB7CiAgICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIEZBSUxFRCwg
KCJGYWlsZWQgdG8gYWxsb2NhdGUgc3ViLWJ1ZmZlciIpLCAobnVsbHB0cikpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC05ODUsOCArOTYxLDYgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IGMKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcHJpdi0+YnVmZmVyLmNs
ZWFyKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmFjY2Vzc0Nv
bnRyb2xDaGVja0ZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikK
</data>
<flag name="review"
          id="367878"
          type_id="1"
          status="+"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>