<?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>124440</bug_id>
          
          <creation_ts>2013-11-15 16:18:40 -0800</creation_ts>
          <short_desc>Add the CFNetwork implementation of the asynchronous ResourceHandle</short_desc>
          <delta_ts>2013-12-25 23:26:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>psolanki</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>951257</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-11-15 16:18:40 -0800</bug_when>
    <thetext>Add the CFNetwork implementation of the asynchronous ResourceHandle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951262</commentid>
    <comment_count>1</comment_count>
      <attachid>217096</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-11-15 16:24:04 -0800</bug_when>
    <thetext>Created attachment 217096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951263</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-15 16:25:57 -0800</bug_when>
    <thetext>Attachment 217096 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleInternal.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:230:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:314:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:356:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:391:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:412:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:440:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:483:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:517:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:547:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:581:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:615:  Missing space before {  [whitespace/braces] [5]
Total errors found: 11 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951267</commentid>
    <comment_count>3</comment_count>
      <attachid>217096</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-11-15 16:32:27 -0800</bug_when>
    <thetext>Comment on attachment 217096
Patch

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

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:236
&gt; +        willSendRequest(conn, cfRequest, originalRedirectResponse, clientInfo);

My bad, this should be:
    handle-&gt;willSendRequest(request, redirectResponse.get());

I&apos;ll fix that before landing if everything else is okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951291</commentid>
    <comment_count>4</comment_count>
      <attachid>217096</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-15 17:05:26 -0800</bug_when>
    <thetext>Comment on attachment 217096
Patch

Attachment 217096 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/24258057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951295</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-15 17:09:48 -0800</bug_when>
    <thetext>I&apos;ll take a look at this ASAP, I promise!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951315</commentid>
    <comment_count>6</comment_count>
      <attachid>217112</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-11-15 20:06:08 -0800</bug_when>
    <thetext>Created attachment 217112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951316</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-15 20:09:33 -0800</bug_when>
    <thetext>Attachment 217112 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleInternal.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:230:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:313:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:355:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:390:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:411:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:439:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:482:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:516:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:546:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:580:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:614:  Missing space before {  [whitespace/braces] [5]
Total errors found: 11 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951323</commentid>
    <comment_count>8</comment_count>
      <attachid>217112</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-15 21:49:52 -0800</bug_when>
    <thetext>Comment on attachment 217112
Patch

Attachment 217112 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/24718051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951339</commentid>
    <comment_count>9</comment_count>
      <attachid>217112</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-16 00:08:21 -0800</bug_when>
    <thetext>Comment on attachment 217112
Patch

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

Looks pretty good!

This will need to be very carefully tested on Windows - iOS and Windows both use CFNetwork directly, but they use very different versions of it. So if this patch accidentally removes a workaround to an old bug, Windows may still be affected.

I think that threading may need another look, please see comments below.

&gt; Source/WebCore/platform/network/ResourceHandle.h:209
&gt;      // Called in response to ResourceHandleClient::willCacheResponseAsync().

This comment applies to both versions, strange to see it between them.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:56
&gt; +#include &quot;Settings.h&quot;

This is a layering violation, Settings is not a platform class. Settings::networkDataUsageTrackingEnabled should be accessed via NetworkingContext.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:88
&gt; +static void reportNetworkDataUsage(NetworkingContext* context, CFURLConnectionRef conn)

Please don&apos;t abbr.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:157
&gt; +static ResourceRequest createResourceRequest(CFURLRequestRef cfRequest, const RetainPtr&lt;CFURLResponseRef&gt;&amp; redirectResponse, ResourceHandle&amp; handle)

&quot;const RetainPtr&lt;CFURLResponseRef&gt;&amp;&quot; arguments look so ugly and dangerous, I prefer .get() at call sites - and I think that this is the common WebKit style.

And the reference doesn&apos;t tell the reader that the response in non-null anyway.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:220
&gt; +    RefPtr&lt;ResourceHandle&gt; handle = static_cast&lt;ResourceHandle*&gt;(const_cast&lt;void*&gt;(clientInfo));

This looks very suspicious to me. Handle is captured and used on another thread, don&apos;t we get in trouble with changing refcount from multiple threads? ResourceHandle is not ThreadSafeRefCounted.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:247
&gt; +    if (connectionWasCancelled(handle))
&gt; +        return 0;
&gt; +
&gt; +    if (handleInternal-&gt;m_requestResult.isNull())
&gt; +        return 0;
&gt; +
&gt; +    cfRequest = handleInternal-&gt;m_requestResult.cfURLRequest(UpdateHTTPBody);

This all runs on a secondary thread? I don&apos;t think that is OK.

Mac uses an NSURLRequest as m_requestResult because ResourceRequest is not safe to use from a secondary thread.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:253
&gt; +static void adjustResponseMimeTypeIfNecessary(ResourceHandle&amp; handle, CFURLResponseRef cfResponse)

s/Mime/MIME/

Also, it looks like we now have two functions, adjustResponseMimeTypeIfNecessary and adjustMIMETypeIfNecessary(CFURLResponseRef). Can there have more distinctive names?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:265
&gt; +    if (_CFURLRequestCopyProtocolPropertyForKey(handle.firstRequest().cfURLRequest(DoNotUpdateHTTPBody), CFSTR(&quot;ForceHTMLMIMEType&quot;)))
&gt;          wkSetCFURLResponseMIMEType(cfResponse, CFSTR(&quot;text/html&quot;));

Is this actually necessary on Windows? I thought it was only necessary on Mac when external applications opened documents via AppleScript, as a workaround for some weird 3rd party application.

This code is super annoying because it creates a hidden control channel for API clients - instead of using WebKit API, they can add secret properties and control CFNetwork directly.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:326
&gt; +    dispatch_semaphore_wait(handleInternal-&gt;m_semaphore, DISPATCH_TIME_FOREVER);

This function doesn&apos;t return anything, why do we need to wait?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:-284
&gt; -    // Workaround for &lt;rdar://problem/6300990&gt; Caching does not respect Vary HTTP header.

This looks like code that can&apos;t be deleted on Windows.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:747
&gt; +    if (client() &amp;&amp; client()-&gt;usesAsyncCallbacks()) {
&gt; +        connectionClient.willSendRequest = willSendRequestAsync;

It&apos;s sightly confusing that the client structure is initialized differently in sync vs async modes.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:1233
&gt; +#if USE(QUICK_LOOK) &amp;&amp; USE(CFNETWORK)

We probably don&apos;t need USE(CFNETWORK) in a *CFNet.cpp file.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:1234
&gt; +CFURLConnectionClient_V6* ResourceHandle::connectionClientCallbacks()

Hmm, this gets even more confusing with a third way to initialize the client structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951340</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-11-16 00:28:33 -0800</bug_when>
    <thetext>The lifetime problem of ResourceHandle is a very good catch. I will need to revisit each function to see if there is a solution. We may have to use ThreadSafeRefCounted as you said.

Thanks a lot for having a look Alexey. I will make a complete update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951346</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-16 01:14:08 -0800</bug_when>
    <thetext>To be clear, it&apos;s not my suggestion to use ThreadSafeRefCounted, we should try to not have WebCore objects accessed from multiple threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951347</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-11-16 01:17:07 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; To be clear, it&apos;s not my suggestion to use ThreadSafeRefCounted, we should try to not have WebCore objects accessed from multiple threads.

I understand. It is also my position that we should avoid it.
I am just not certain we will be able to avoid that here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955754</commentid>
    <comment_count>13</comment_count>
      <attachid>218259</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-02 20:12:19 -0800</bug_when>
    <thetext>Created attachment 218259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955755</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-02 20:15:35 -0800</bug_when>
    <thetext>Attachment 218259 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleInternal.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:205:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:280:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:317:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:357:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:382:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:420:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:450:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:496:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:529:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:568:  Missing space before {  [whitespace/braces] [5]
Total errors found: 10 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955762</commentid>
    <comment_count>15</comment_count>
      <attachid>218259</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-02 20:42:20 -0800</bug_when>
    <thetext>Comment on attachment 218259
Patch

Attachment 218259 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/39358206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955788</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-02 23:29:42 -0800</bug_when>
    <thetext>Looks like I will have to do something special for Windows. Working on the two branches sucks. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955800</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-12-03 00:13:55 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Looks like I will have to do something special for Windows. Working on the two branches sucks. :(

I&apos;ll apply the patch in the morning and resolve the build issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955801</commentid>
    <comment_count>18</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-03 00:16:08 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Looks like I will have to do something special for Windows. Working on the two branches sucks. :(
&gt; 
&gt; I&apos;ll apply the patch in the morning and resolve the build issue.

Oh! Awesome! Thanks!

You may have to #ifdef everything. I am not sure what works and what does not from libdispatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955966</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-12-03 10:30:12 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; Looks like I will have to do something special for Windows. Working on the two branches sucks. :(
&gt; &gt; 
&gt; &gt; I&apos;ll apply the patch in the morning and resolve the build issue.
&gt; 
&gt; Oh! Awesome! Thanks!
&gt; 
&gt; You may have to #ifdef everything. I am not sure what works and what does not from libdispatch.

The problem isn&apos;t libdispatch; it&apos;s that MSVC doesn&apos;t understand the block syntax.  We only have a couple of choices:

1. Change from using a block in &quot;willSendRequestAsync&quot; to a function taking some kind of context value (which is what I had to do in the AVFoundationCF stuff).
2. Switch from using dispatch_async to using the WTF CallOnMainThread thing
3. #if/def it out on Windows and maybe not have the functionality?

The logic in that block is all fine on Windows, and the dispatch_async is fine, so I&apos;d prefer if we could recast the block as a static function if you don&apos;t mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955968</commentid>
    <comment_count>20</comment_count>
      <attachid>218259</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-12-03 10:31:31 -0800</bug_when>
    <thetext>Comment on attachment 218259
Patch

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

r- because we cannot use block syntax in the Windows code. :-(

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:205
&gt; +    dispatch_async(dispatch_get_main_queue(), ^{

Unfortunately, this won&apos;t work on Windows.  MSVC doesn&apos;t support the block syntax, and I&apos;m not aware of a tool we can use to convert it to something we can compile cleanly (at least, not using the Open Source toolset).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956051</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-03 12:19:31 -0800</bug_when>
    <thetext>I think that this makes the call for a separate file with async parts even stronger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958548</commentid>
    <comment_count>22</comment_count>
      <attachid>218916</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-10 16:02:39 -0800</bug_when>
    <thetext>Created attachment 218916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958549</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-10 16:04:02 -0800</bug_when>
    <thetext>Attachment 218916 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:47:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:78:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:105:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:135:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:148:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:162:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:193:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:206:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:218:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:236:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:264:  Missing space before {  [whitespace/braces] [5]
Total errors found: 12 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958554</commentid>
    <comment_count>24</comment_count>
      <attachid>218918</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-10 16:12:48 -0800</bug_when>
    <thetext>Created attachment 218918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958555</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-10 16:15:44 -0800</bug_when>
    <thetext>Attachment 218918 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:47:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:78:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:105:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:135:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:148:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:162:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:193:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:206:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:218:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:236:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:264:  Missing space before {  [whitespace/braces] [5]
Total errors found: 12 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958565</commentid>
    <comment_count>26</comment_count>
      <attachid>218922</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-10 16:52:22 -0800</bug_when>
    <thetext>Created attachment 218922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958566</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-10 16:53:45 -0800</bug_when>
    <thetext>Attachment 218922 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:47:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:78:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:105:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:135:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:148:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:162:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:193:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:206:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:218:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:236:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:264:  Missing space before {  [whitespace/braces] [5]
Total errors found: 12 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958582</commentid>
    <comment_count>28</comment_count>
      <attachid>218922</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-10 17:35:19 -0800</bug_when>
    <thetext>Comment on attachment 218922
Patch

Attachment 218922 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/47218371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958585</commentid>
    <comment_count>29</comment_count>
      <attachid>218928</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-10 17:52:14 -0800</bug_when>
    <thetext>Created attachment 218928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958586</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-10 17:54:29 -0800</bug_when>
    <thetext>Attachment 218928 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:47:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:78:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:105:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:135:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:148:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:162:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:193:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:206:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:218:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:236:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:264:  Missing space before {  [whitespace/braces] [5]
Total errors found: 12 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958587</commentid>
    <comment_count>31</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-10 17:57:10 -0800</bug_when>
    <thetext>fuuuuuucking windows!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958617</commentid>
    <comment_count>32</comment_count>
      <attachid>218928</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-11 00:31:32 -0800</bug_when>
    <thetext>Comment on attachment 218928
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:9
&gt; +        Add a second subclass of ResourceHandleCFURLConnectionDelegate: AsynchronousResourceHandleCFURLConnectionDelegate.
&gt; +        The difference is those objects handle the network callback on a different queue.

This explanation should probably be somehow in the name (ResourceHandleCFURLConnectionQueueDelegate? ResourceHandleCFURLConnectionDelegateForOperationQueue?)

&gt; Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:63
&gt; +static bool connectionWasCancelled(ResourceHandle* handle)
&gt; +{
&gt; +    return !handle;
&gt; +}

This function is always called as connectionWasCancelled(protector-&gt;h_handle). It&apos;s quite a strange, because a null handle doesn&apos;t always say anything about any connection.

Can this be made a member function, to be called as protector-&gt;connectionWasCancelled()?

Or maybe you could just check &quot;if (!m_handle)&quot; everywhere?

&gt; Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:67
&gt; +void AsynchronousResourceHandleCFURLConnectionDelegate::setupRequest(CFMutableURLRequestRef)
&gt; +{
&gt; +}

Did performance measurement show that we no longer need CFURLRequestSetShouldStartSynchronously with NetworkProcess? This seems surprising.

&gt; Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:81
&gt; +        LOG(Network, &quot;CFNet - AsynchronousResourceHandleCFURLConnectionDelegate::willSendRequest(handle=%p) (%s)&quot;, m_handle, m_handle-&gt;firstRequest().url().string().utf8().data());
&gt; +
&gt; +        if (connectionWasCancelled(protector-&gt;m_handle)) {

This doesn&apos;t look right. We get m_handle from different places, and only null check after use.

The situation is the same in every callback below.

&gt; Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:127
&gt; +    dispatch_semaphore_wait(m_semaphore, DISPATCH_TIME_FOREVER);

We should have a comment here (and in Mac code too) explaining why we need to wait, even though this function doesn&apos;t return any result.

My understanding is that it&apos;s because WebKit could decide to convert the connection to a download while handling didReceiveResponse.

&gt; Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.cpp:251
&gt; +#if PLATFORM(IOS)
&gt; +        if (coreProtectionSpace.authenticationScheme() == ProtectionSpaceAuthenticationSchemeUnknown) {
&gt; +            m_boolResult = false;
&gt; +            dispatch_semaphore_signal(m_semaphore);
&gt; +            return;
&gt; +        }
&gt; +#endif // PLATFORM(IOS)

Can you easily find out why this is done, and why it&apos;s iOS only? A FIXME may be in order.

&gt; Source/WebCore/platform/network/cf/AsynchronousResourceHandleCFURLConnectionDelegate.h:41
&gt; +    ~AsynchronousResourceHandleCFURLConnectionDelegate();

virtual

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:300
&gt; +    if (ResourceHandleClient* client = this-&gt;client()) {
&gt; +        if (client-&gt;usesAsyncCallbacks())
&gt; +            client-&gt;shouldUseCredentialStorageAsync(this);
&gt; +        else
&gt; +            return client-&gt;shouldUseCredentialStorage(this);
&gt; +    }

This is a pretty ugly pattern, but the best I could come up with on Mac.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:41
&gt; +#if PLATFORM(MAC)
&gt; +#include &quot;WebCoreSystemInterface.h&quot;
&gt; +#endif // PLATFORM(MAC)
&gt; +
&gt; +#if PLATFORM(WIN)
&gt; +#include &lt;WebKitSystemInterface/WebKitSystemInterface.h&gt;
&gt; +#endif // PLATFORM(WIN)

Do we have a style rule requiring these comments after endif? They look somewhat silly here.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:130
&gt; +        return 0;

nullptr?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:146
&gt; +    if (httpMessage &amp;&amp; CFHTTPMessageGetResponseStatusCode(httpMessage) == 307) {

Is this code necessary on iOS and Mac? Please see &lt;rdar://problem/13625208&gt; for discussion.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:60
&gt; +    ResourceRequest createResourceRequest(CFURLRequestRef, const RetainPtr&lt;CFURLResponseRef&gt;&amp;);

What is the benefit of passing &quot;const RetainPtr&lt;CFURLResponseRef&gt;&amp;&quot; instead of CFURLResponseRef?

&gt; Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:277
&gt; +void SynchronousResourceHandleCFURLConnectionDelegate::continueWillSendRequest(CFURLRequestRef)
&gt; +{
&gt; +}

ASSERT_NOT_REACHED

&gt; Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:280
&gt; +{

Ditto.

&gt; Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:284
&gt; +{

Ditto.

&gt; Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:288
&gt; +{

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958919</commentid>
    <comment_count>33</comment_count>
      <attachid>219006</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-11 14:36:14 -0800</bug_when>
    <thetext>Created attachment 219006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958928</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-11 14:52:18 -0800</bug_when>
    <thetext>Attachment 219006 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:47:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:78:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:105:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:135:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:149:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:163:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:178:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:196:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:210:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:224:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:243:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:271:  Missing space before {  [whitespace/braces] [5]
Total errors found: 12 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958950</commentid>
    <comment_count>35</comment_count>
      <attachid>219010</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-11 15:28:58 -0800</bug_when>
    <thetext>Created attachment 219010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958955</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-11 15:43:11 -0800</bug_when>
    <thetext>Attachment 219010 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandle.h&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.cpp&apos;, u&apos;Source/WebCore/platform/network/ResourceHandleClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:78:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:105:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:135:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:149:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:163:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:178:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:196:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:210:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:224:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:243:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:271:  Missing space before {  [whitespace/braces] [5]
Total errors found: 11 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958991</commentid>
    <comment_count>37</comment_count>
      <attachid>219010</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-11 17:53:18 -0800</bug_when>
    <thetext>Comment on attachment 219010
Patch

Clearing flags on attachment: 219010

Committed r160467: &lt;http://trac.webkit.org/changeset/160467&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958992</commentid>
    <comment_count>38</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-11 17:53:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962863</commentid>
    <comment_count>39</comment_count>
      <attachid>219010</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-25 13:00:23 -0800</bug_when>
    <thetext>Comment on attachment 219010
Patch

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

&gt; Source/WebCore/ChangeLog:20
&gt; +        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp: Added.

Ugh, shouldn&apos;t it have been &quot;CFNet&quot; not &quot;CFURL&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962962</commentid>
    <comment_count>40</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-25 23:00:44 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; (From update of attachment 219010 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219010&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; +        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp: Added.
&gt; 
&gt; Ugh, shouldn&apos;t it have been &quot;CFNet&quot; not &quot;CFURL&quot;?

It is a delegate of CFURLConnection, that is why it was named like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962965</commentid>
    <comment_count>41</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-25 23:13:02 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; (From update of attachment 219010 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219010&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; &gt; +        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp: Added.
&gt; &gt; 
&gt; &gt; Ugh, shouldn&apos;t it have been &quot;CFNet&quot; not &quot;CFURL&quot;?
&gt; 
&gt; It is a delegate of CFURLConnection, that is why it was named like that.

Also, CFNet is a terrible prefix :(.  This is plenty clear.  I vote no change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962967</commentid>
    <comment_count>42</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-25 23:26:27 -0800</bug_when>
    <thetext>I don&apos;t care which it is, but it should be consistent between ResourceHandleCFNet.{h|cpp} and its delegates.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217096</attachid>
            <date>2013-11-15 16:24:04 -0800</date>
            <delta_ts>2013-11-15 20:06:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131115162403.patch</filename>
            <type>text/plain</type>
            <size>45024</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5MzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmMyZGIwOTcwZDNhYmE4
M2M2MjM2ZGMyYTM1NjdkNzIwNDBlZDg4MS4uNTQyZjIwZmMzNWJjNDA4Mjg2NzNiNjkwMTZhYTQ1
MWM0ODJhNGQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEzLTExLTE1ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDbGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OlJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXBvcnROZXR3b3JrRGF0YVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3Rpb25XYXND
YW5jZWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ondp
bGxTZW5kUmVxdWVzdEFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFJlc3BvbnNlTWlt
ZVR5cGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjp1c2VRdWlja0xvb2tSZXNwb25z
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJD
b3JlOjpkaWRSZWNlaXZlRGF0YUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVE
YXRhQXJyYXlBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaWRSZWNlaXZlRGF0YUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
ZFNlbmRCb2R5RGF0YUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpkaWRGaW5pc2hMb2FkaW5nQXN5bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpkaWRGYWlsQXN5bmMpOgorICAgICAgICAo
V2ViQ29yZTo6d2lsbENhY2hlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbENhY2hl
UmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlQXN5
bmMpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZUFzeW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNl
U3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3VycmVu
dFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6
Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb25uZWN0aW9u
Q2xpZW50Q2FsbGJhY2tzKToKKwogMjAxMy0xMS0xNSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBJREJJbmRleFdyaXRlciBhIExldmVsREIgc3BlY2lm
aWMgY29uY2VwdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCmluZGV4IDAyOTQ1ZTFiMjgxNDc3YTI2ZDQ3ZGE1N2QwYTM5MDczNWIzOGY4M2Eu
LmZkNWY4NDg3N2E4MWJmMjBhYTRhOTY1NzU3ZjIyNDUzZjA1NTBjZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKQEAgLTY4LDYgKzY4
LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwogdHlwZWRlZiBzdHJ1Y3QgX0NG
VVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwogdHlwZWRlZiBpbnQgQ0ZIVFRQQ29v
a2llU3RvcmFnZUFjY2VwdFBvbGljeTsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tp
ZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBf
Q0ZDYWNoZWRVUkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQpAQCAtMTU4LDcgKzE1OSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBpbnRlcm5ldFN0YXR1c0NhbGxiYWNrKEhJ
TlRFUk5FVCwgRFdPUkRfUFRSLCBEV09SRCwgTFBWT0lELCBEV09SRCk7CiAjZW5kaWYKIAotI2lm
IFVTRShDVVJMKSB8fCBVU0UoU09VUCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpZiBVU0Uo
Q0ZORVRXT1JLKSB8fCBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApIHx8IFBMQVRGT1JNKEJMQUNLQkVS
UlkpCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZ2V0SW50ZXJuYWwoKSB7IHJldHVybiBk
LmdldCgpOyB9CiAjZW5kaWYKIApAQCAtMjAxLDcgKzIwMiw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKICNl
bmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdm9pZCBj
b250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOworI2VsaWYg
UExBVEZPUk0oTUFDKQogICAgIC8vIENhbGxlZCBpbiByZXNwb25zZSB0byBSZXNvdXJjZUhhbmRs
ZUNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYygpLgogICAgIHZvaWQgY29udGludWVXaWxs
Q2FjaGVSZXNwb25zZShOU0NhY2hlZFVSTFJlc3BvbnNlICopOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQu
Y3BwCmluZGV4IDYzOTdkNzAyN2ViNGI0NDE5ZDFkYzhiMmUzYzA2MGQ1YjNhOWJmNmUuLjhlYjRl
ZWI2YWY1NDlmOWFhMGNkZTg1MjY0ZDdhOGZhYTgyYWMxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwCkBA
IC02MSw3ICs2MSwxMiBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ2xpZW50OjpjYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYQogfQogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShNQUMpCisjaWYgVVNFKENGTkVUV09SSykKK3ZvaWQgUmVzb3VyY2VIYW5kbGVD
bGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgQ0ZD
YWNoZWRVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKK3sKKyAgICBoYW5kbGUtPmNvbnRpbnVlV2ls
bENhY2hlUmVzcG9uc2UocmVzcG9uc2UpOworfQorI2VsaWYgUExBVEZPUk0oTUFDKQogdm9pZCBS
ZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlICpyZXNwb25zZSkKIHsKICAgICBoYW5kbGUt
PmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UocmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCmluZGV4IGMw
Y2E4OGFjMWI0NGYzYzIyZmU3MWUwNmY0M2YyZDU3ZDAxZWU4ZTcuLmI5YTk2NjlmMjM2MTcyMTc1
OTEwOTA3OTEyNDVkYTEzYjc0YmU5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKQEAgLTg4LDggKzg4LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQ2xpZW50IHdpbGwgcGFzcyBhbiB1cGRh
dGVkIHJlcXVlc3QgdXNpbmcgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZSgpIHdoZW4gcmVhZHkuCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykK
KwogICAgICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQgcmVxdWVzdCB1c2luZyBS
ZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZSgpIHdoZW4gcmVhZHkuCisj
aWYgVVNFKENGTkVUV09SSykKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNl
QXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKTsKKyNlbGlmIFBM
QVRGT1JNKE1BQykKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMo
UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopOwogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmgKaW5kZXggOWI4YTg5YWU2NmRhZDNjMmMzYjg3ZjE3MmE4MDkzNTQwZGU3NDY2Mi4u
MzY4MWY2MDI1NjFjNmMwNTliZDA5NDM0NjZmYzk5MmFmZTgwMjk2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmgKQEAgLTgzLDYgKzgzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBt
X3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25pZmYpCiAjaWYgVVNFKENGTkVUV09S
SykKICAgICAgICAgICAgICwgbV9jb25uZWN0aW9uKDApCisgICAgICAgICAgICAsIG1fY3VycmVu
dFJlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICwgbV9hc3luY1F1ZXVlKDApCisgICAgICAg
ICAgICAsIG1fc2VtYXBob3JlKDApCiAjZW5kaWYKICNpZiBVU0UoV0lOSU5FVCkKICAgICAgICAg
ICAgICwgbV9maWxlTG9hZFRpbWVyKGxvYWRlciwgJlJlc291cmNlSGFuZGxlOjpmaWxlTG9hZFRp
bWVyKQpAQCAtMTQ1LDYgKzE0OCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgbV9zaG91bGRDb250ZW50U25pZmY7CiAjaWYgVVNFKENGTkVUV09SSykKICAgICAgICAgUmV0
YWluUHRyPENGVVJMQ29ubmVjdGlvblJlZj4gbV9jb25uZWN0aW9uOworICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKKworICAgICAgICBkaXNwYXRjaF9xdWV1ZV90IG1f
YXN5bmNRdWV1ZTsKKyAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3QgbV9zZW1hcGhvcmU7Cisg
ICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3RSZXN1bHQ7CisgICAgICAgIFJldGFpblB0
cjxDRkNhY2hlZFVSTFJlc3BvbnNlUmVmPiBtX2NhY2hlZFJlc3BvbnNlUmVzdWx0OworICAgICAg
ICBib29sIG1fYm9vbFJlc3VsdDsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykgJiYgIVVTRShD
Rk5FVFdPUkspCiAgICAgICAgIFJldGFpblB0cjxOU1VSTENvbm5lY3Rpb24+IG1fY29ubmVjdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VIYW5kbGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jl
c291cmNlSGFuZGxlQ0ZOZXQuY3BwCmluZGV4IGZiODRkODFiNDlkY2Q1Y2VlODYzYjg0NjRlYzEy
NmUxODFmNDlhZjcuLjE0NDFmNjM1YjQzZjBlMWMzYmQ5MmU3YTgzNjVmYmJkMjA3YzM0NjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNv
dXJjZUhhbmRsZUNGTmV0LmNwcApAQCAtNTIsNiArNTIsMTEgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgi
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQ0ZORVRXT1JLKQpAQCAtNzksNiAr
ODQsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKENGTkVUV09SSykKIAorI2lm
IFBMQVRGT1JNKElPUykKK3N0YXRpYyB2b2lkIHJlcG9ydE5ldHdvcmtEYXRhVXNhZ2UoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIENGVVJMQ29ubmVjdGlvblJlZiBjb25uKQoreworICAgIGlm
ICghU2V0dGluZ3M6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIENGSW5kZXggcmF3Qnl0ZXNTZW50OworICAgIENGSW5kZXggcmF3Qnl0ZXNS
ZWNlaXZlZDsKKyAgICBDRkluZGV4IGNlbGx1bGFyQnl0ZXNTZW50OworICAgIENGSW5kZXggY2Vs
bHVsYXJCeXRlc1JlY2VpdmVkOworICAgIF9DRlVSTENvbm5lY3Rpb25HZXRSYXdCeXRlSW5mbyhj
b25uLCAmcmF3Qnl0ZXNTZW50LCAmcmF3Qnl0ZXNSZWNlaXZlZCwgJmNlbGx1bGFyQnl0ZXNTZW50
LCAmY2VsbHVsYXJCeXRlc1JlY2VpdmVkKTsKKyAgICBjb250ZXh0LT5yZXBvcnROZXR3b3JrRGF0
YVVzYWdlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYXdCeXRlc1NlbnQpLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4ocmF3Qnl0ZXNSZWNlaXZlZCksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihjZWxsdWxh
ckJ5dGVzU2VudCksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihjZWxsdWxhckJ5dGVzUmVjZWl2ZWQp
KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4m
IGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFN0cmluZz4sIGhvc3RzLCAoKSk7CkBAIC05Miw2ICsxMTEsMTEgQEAgc3Rh
dGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4mIGNsaWVudENlcnRzKCkK
ICAgICByZXR1cm4gY2VydHM7CiB9CiAKK3N0YXRpYyBib29sIGNvbm5lY3Rpb25XYXNDYW5jZWxs
ZWQoY29uc3QgUmVmUHRyPFJlc291cmNlSGFuZGxlPiYgaGFuZGxlKQoreworICAgIHJldHVybiAh
Y29uc3RfY2FzdDxSZWZQdHI8UmVzb3VyY2VIYW5kbGU+Jj4oaGFuZGxlKS0+Z2V0SW50ZXJuYWwo
KS0+bV9jb25uZWN0aW9uOworfQorCiAjaWYgIVBMQVRGT1JNKE1BQykKIHN0YXRpYyB2b2lkIHNl
dERlZmF1bHRNSU1FVHlwZShDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQogewpAQCAtMTA4LDUx
ICsxMzIsNzkgQEAgc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW4KICAgICByZXF1ZXN0LmFkZEhUVFBI
ZWFkZXJGaWVsZCgiQXV0aG9yaXphdGlvbiIsIGF1dGhlbnRpY2F0aW9uSGVhZGVyKTsKIH0KIAot
c3RhdGljIENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb25uZWN0aW9uUmVm
IGNvbm4sIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRp
cmVjdFJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorc3RhdGljIFJldGFpblB0cjxD
RlVSTFJlc3BvbnNlUmVmPiBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QsIENGVVJMUmVxdWVzdFJlZiBuZXdS
ZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVkaXJlY3RSZXNwb25zZSkKIHsKLSNpZiBMT0df
RElTQUJMRUQKLSAgICBVTlVTRURfUEFSQU0oY29ubik7Ci0jZW5kaWYKLSAgICBSZXNvdXJjZUhh
bmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZv
aWQqPihjbGllbnRJbmZvKSk7CisgICAgaWYgKGNmUmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAg
cmV0dXJuIGNmUmVkaXJlY3RSZXNwb25zZTsKIAotICAgIGlmICghY2ZSZWRpcmVjdFJlc3BvbnNl
KSB7Ci0gICAgICAgIENGUmV0YWluKGNmUmVxdWVzdCk7Ci0gICAgICAgIHJldHVybiBjZlJlcXVl
c3Q7Ci0gICAgfQorICAgIENGVVJMUmVmIG5ld1VSTCA9IENGVVJMUmVxdWVzdEdldFVSTChuZXdS
ZXF1ZXN0KTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld1NjaGVtZSA9IGFkb3B0Q0Yo
Q0ZVUkxDb3B5U2NoZW1lKG5ld1VSTCkpOwogCi0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIHdp
bGxTZW5kUmVxdWVzdChjb25uPSVwLCBoYW5kbGU9JXApICglcykiLCBjb25uLCBoYW5kbGUsIGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
Ly8gSWYgdGhlIHByb3RvY29scyBvZiB0aGUgbmV3IHJlcXVlc3QgYW5kIHRoZSBjdXJyZW50IHJl
cXVlc3QgbWF0Y2gsIHRoaXMgaXMgbm90IGFuIEhTVFMgcmVkaXJlY3QgYW5kIHdlIHNob3VsZG4n
dCBzeW50aGVzaXplIGEgcmVkaXJlY3QgcmVzcG9uc2UuCisgICAgaWYgKGN1cnJlbnRSZXF1ZXN0
LnVybCgpLnByb3RvY29sKCkgPT0gU3RyaW5nKG5ld1NjaGVtZS5nZXQoKSkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBjdXJyZW50VVJMID0gY3VycmVudFJl
cXVlc3QudXJsKCkuY3JlYXRlQ0ZVUkwoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJl
Zj4gcmVzcG9uc2VNZXNzYWdlID0gYWRvcHRDRihDRkhUVFBNZXNzYWdlQ3JlYXRlUmVzcG9uc2Uo
MCwgMzAyLCAwLCBrQ0ZIVFRQVmVyc2lvbjFfMSkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
bmV3QWJzb2x1dGVVUkwgPSBhZG9wdENGKENGVVJMQ29weUFic29sdXRlVVJMKG5ld1VSTCkpOwor
ICAgIENGSFRUUE1lc3NhZ2VTZXRIZWFkZXJGaWVsZFZhbHVlKHJlc3BvbnNlTWVzc2FnZS5nZXQo
KSwgQ0ZTVFIoIkxvY2F0aW9uIiksIENGVVJMR2V0U3RyaW5nKG5ld0Fic29sdXRlVVJMLmdldCgp
KSk7CisgICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdl
LmdldCgpLCBDRlNUUigiQ2FjaGUtQ29udHJvbCIpLCBDRlNUUigibm8tc3RvcmUiKSk7CiAKKyAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gbmV3UmVzcG9uc2UgPSBhZG9wdENGKENGVVJM
UmVzcG9uc2VDcmVhdGVXaXRoSFRUUFJlc3BvbnNlKDAsIGN1cnJlbnRVUkwuZ2V0KCksIHJlc3Bv
bnNlTWVzc2FnZS5nZXQoKSwga0NGVVJMQ2FjaGVTdG9yYWdlTm90QWxsb3dlZCkpOworICAgIHJl
dHVybiBuZXdSZXNwb25zZTsKK30KKworc3RhdGljIFJlc291cmNlUmVxdWVzdCBjcmVhdGVSZXNv
dXJjZVJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgY29uc3QgUmV0YWluUHRyPENG
VVJMUmVzcG9uc2VSZWY+JiByZWRpcmVjdFJlc3BvbnNlLCBSZXNvdXJjZUhhbmRsZSYgaGFuZGxl
KQorewogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OwotICAgIGlmIChjZlJlZGlyZWN0UmVz
cG9uc2UpIHsKLSAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVz
cG9uc2VHZXRIVFRQUmVzcG9uc2UoY2ZSZWRpcmVjdFJlc3BvbnNlKTsKLSAgICAgICAgaWYgKGh0
dHBNZXNzYWdlICYmIENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cE1lc3Nh
Z2UpID09IDMwNykgewotICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsYXN0SFRU
UE1ldGhvZCA9IGhhbmRsZS0+bGFzdEhUVFBNZXRob2QoKS5jcmVhdGVDRlN0cmluZygpOwotICAg
ICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuZXdNZXRob2QgPSBhZG9wdENGKENGVVJM
UmVxdWVzdENvcHlIVFRQUmVxdWVzdE1ldGhvZChjZlJlcXVlc3QpKTsKLSAgICAgICAgICAgIGlm
IChDRlN0cmluZ0NvbXBhcmVXaXRoT3B0aW9ucyhsYXN0SFRUUE1ldGhvZC5nZXQoKSwgbmV3TWV0
aG9kLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0aChsYXN0SFRUUE1ldGhv
ZC5nZXQoKSkpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSkgewotICAgICAgICAgICAgICAg
IFJldGFpblB0cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9IGFkb3B0
Q0YoQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7Ci0gICAgICAg
ICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24oaGFuZGxlLT5zdG9yYWdlU2Vzc2lv
bigpLCBtdXRhYmxlUmVxdWVzdC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0
U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9k
LmdldCgpKTsKLQotICAgICAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0gaGFuZGxlLT5maXJz
dFJlcXVlc3QoKS5odHRwQm9keSgpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCksICJHRVQiKSAmJiBib2R5
ICYmICFib2R5LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OnNldEhU
VFBCb2R5KG11dGFibGVSZXF1ZXN0LmdldCgpLCBib2R5KTsKLQotICAgICAgICAgICAgICAgIFN0
cmluZyBvcmlnaW5hbENvbnRlbnRUeXBlID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwQ29u
dGVudFR5cGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbmFsQ29udGVudFR5cGUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmll
bGRWYWx1ZShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIkNvbnRlbnQtVHlwZSIpLCBvcmln
aW5hbENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwotCi0gICAgICAgICAgICAg
ICAgcmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0LmdldCgpOwotICAgICAgICAgICAgfQorCisgICAg
Q0ZIVFRQTWVzc2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9u
c2UocmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7CisgICAgaWYgKGh0dHBNZXNzYWdlICYmIENGSFRU
UE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cE1lc3NhZ2UpID09IDMwNykgeworICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhc3RIVFRQTWV0aG9kID0gaGFuZGxlLmxhc3RI
VFRQTWV0aG9kKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBuZXdNZXRob2QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdE1ldGhv
ZChjZlJlcXVlc3QpKTsKKyAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZVdpdGhPcHRpb25zKGxh
c3RIVFRQTWV0aG9kLmdldCgpLCBuZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3Ry
aW5nR2V0TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdldCgpKSksIGtDRkNvbXBhcmVDYXNlSW5zZW5z
aXRpdmUpKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4g
bXV0YWJsZVJlcXVlc3QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5KDAs
IGNmUmVxdWVzdCkpOworICAgICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24oaGFu
ZGxlLnN0b3JhZ2VTZXNzaW9uKCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAg
IENGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0LmdldCgpLCBs
YXN0SFRUUE1ldGhvZC5nZXQoKSk7CisKKyAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0gaGFu
ZGxlLmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CisgICAgICAgICAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKGhhbmRsZS5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCksICJHRVQiKSAmJiBi
b2R5ICYmICFib2R5LT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgV2ViQ29yZTo6c2V0SFRU
UEJvZHkobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGJvZHkpOworCisgICAgICAgICAgICBTdHJpbmcg
b3JpZ2luYWxDb250ZW50VHlwZSA9IGhhbmRsZS5maXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5
cGUoKTsKKyAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRlckZpZWxkVmFsdWUobXV0YWJs
ZVJlcXVlc3QuZ2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwgb3JpZ2luYWxDb250ZW50VHlw
ZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKKworICAgICAgICAgICAgcmVxdWVzdCA9IG11dGFi
bGVSZXF1ZXN0LmdldCgpOwogICAgICAgICB9CiAgICAgfQorCiAgICAgaWYgKHJlcXVlc3QuaXNO
dWxsKCkpCiAgICAgICAgIHJlcXVlc3QgPSBjZlJlcXVlc3Q7CiAKICAgICAvLyBTaG91bGQgbm90
IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBu
b24tc2VjdXJlIG9uZS4KLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMi
KSAmJiBwcm90b2NvbElzKHJlcXVlc3QuaHR0cFJlZmVycmVyKCksICJodHRwcyIpICYmIGhhbmRs
ZS0+Y29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkp
CisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJ
cyhyZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCAiaHR0cHMiKSAmJiBoYW5kbGUuY29udGV4dCgpLT5z
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpCiAgICAgICAgIHJlcXVl
c3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworc3RhdGlj
IENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4s
IENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgb3JpZ2luYWxSZWRp
cmVjdFJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworI2lmIExPR19ESVNBQkxF
RAorICAgIFVOVVNFRF9QQVJBTShjb25uKTsKKyNlbmRpZgorICAgIFJlc291cmNlSGFuZGxlKiBo
YW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJlY3RSZXNw
b25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoaGFuZGxlLT5jdXJy
ZW50UmVxdWVzdCgpLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSk7CisKKyAg
ICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UpIHsKKyAgICAgICAgQ0ZSZXRhaW4oY2ZSZXF1ZXN0KTsK
KyAgICAgICAgcmV0dXJuIGNmUmVxdWVzdDsKKyAgICB9CisKKyAgICBMT0coTmV0d29yaywgIkNG
TmV0IC0gd2lsbFNlbmRSZXF1ZXN0KGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhh
bmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKIAotICAgIGhhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIGNmUmVkaXJlY3RSZXNw
b25zZSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVl
c3QoY2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLCAqaGFuZGxlKTsKKyAgICBoYW5kbGUtPndp
bGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKIAogICAgIGlm
IChyZXF1ZXN0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE2MywxOCArMjE1LDQ0
IEBAIHN0YXRpYyBDRlVSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0KENGVVJMQ29ubmVjdGlv
blJlZiBjb25uLCBDRlVSTFJlcXVlc3RSZWYKICAgICByZXR1cm4gY2ZSZXF1ZXN0OwogfQogCi1z
dGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENG
VVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3N0YXRp
YyBDRlVSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0QXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVm
IGNvbm4sIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgb3JpZ2lu
YWxSZWRpcmVjdFJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotI2lmIExPR19E
SVNBQkxFRAotICAgIFVOVVNFRF9QQVJBTShjb25uKTsKLSNlbmRpZgotICAgIFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9p
ZCo+KGNsaWVudEluZm8pKTsKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0
YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykp
OwogCi0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVSZXNwb25zZShjb25uPSVw
LCBoYW5kbGU9JXApICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVzcG9u
c2VSZWY+IHJlZGlyZWN0UmVzcG9uc2UgPSBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVj
ZXNzYXJ5KGhhbmRsZS0+Y3VycmVudFJlcXVlc3QoKSwgY2ZSZXF1ZXN0LCBvcmlnaW5hbFJlZGly
ZWN0UmVzcG9uc2UpOwogCi0gICAgaWYgKCFoYW5kbGUtPmNsaWVudCgpKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlKSB7CisgICAgICAgIENGUmV0YWluKGNmUmVx
dWVzdCk7CisgICAgICAgIHJldHVybiBjZlJlcXVlc3Q7CisgICAgfQorICAgIExPRyhOZXR3b3Jr
LCAiQ0ZOZXQgLSB3aWxsU2VuZFJlcXVlc3RBc3luYyhjb25uPSVwLCBoYW5kbGU9JXApICglcyki
LCBjb25uLCBoYW5kbGUuZ2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUp
KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKS0+bV9zZW1hcGhvcmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KGNm
UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSwgKmhhbmRsZSk7CisgICAgICAgIHdpbGxTZW5kUmVx
dWVzdChjb25uLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSwgY2xpZW50SW5m
byk7CisgICAgfSk7CiAKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBoYW5kbGVJbnRlcm5h
bCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdCho
YW5kbGVJbnRlcm5hbC0+bV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CisgICAg
aWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoaGFuZGxlSW50ZXJuYWwtPm1fcmVxdWVzdFJlc3VsdC5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBjZlJlcXVlc3QgPSBoYW5kbGVJbnRlcm5hbC0+bV9yZXF1ZXN0
UmVzdWx0LmNmVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9keSk7CisgICAgaGFuZGxlSW50ZXJuYWwt
Pm1fcmVxdWVzdFJlc3VsdCA9IFJlc291cmNlUmVxdWVzdCgpOworCisgICAgQ0ZSZXRhaW4oY2ZS
ZXF1ZXN0KTsKKyAgICByZXR1cm4gY2ZSZXF1ZXN0OworfQorCitzdGF0aWMgdm9pZCBhZGp1c3RS
ZXNwb25zZU1pbWVUeXBlSWZOZWNlc3NhcnkoUmVzb3VyY2VIYW5kbGUmIGhhbmRsZSwgQ0ZVUkxS
ZXNwb25zZVJlZiBjZlJlc3BvbnNlKQorewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBBdm9p
ZCBNSU1FIHR5cGUgc25pZmZpbmcgaWYgdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgYXMgMzA0IE5v
dCBNb2RpZmllZC4KICAgICBDRkhUVFBNZXNzYWdlUmVmIG1zZyA9IHdrR2V0Q0ZVUkxSZXNwb25z
ZUhUVFBSZXNwb25zZShjZlJlc3BvbnNlKTsKQEAgLTE4MywxOSArMjYxLDcyIEBAIHN0YXRpYyB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXNw
b25zZVJlZiBjZlJlc3BvCiAgICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0KQogICAgICAgICBhZGp1
c3RNSU1FVHlwZUlmTmVjZXNzYXJ5KGNmUmVzcG9uc2UpOwogCi0gICAgaWYgKF9DRlVSTFJlcXVl
c3RDb3B5UHJvdG9jb2xQcm9wZXJ0eUZvcktleShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmNmVVJM
UmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIoIkZvcmNlSFRNTE1JTUVUeXBlIikp
KQorI2lmICFQTEFURk9STShJT1MpCisgICAgaWYgKF9DRlVSTFJlcXVlc3RDb3B5UHJvdG9jb2xQ
cm9wZXJ0eUZvcktleShoYW5kbGUuZmlyc3RSZXF1ZXN0KCkuY2ZVUkxSZXF1ZXN0KERvTm90VXBk
YXRlSFRUUEJvZHkpLCBDRlNUUigiRm9yY2VIVE1MTUlNRVR5cGUiKSkpCiAgICAgICAgIHdrU2V0
Q0ZVUkxSZXNwb25zZU1JTUVUeXBlKGNmUmVzcG9uc2UsIENGU1RSKCJ0ZXh0L2h0bWwiKSk7CiAj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CisjZWxzZQogICAgIGlmICghQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBlKGNmUmVzcG9uc2UpKSB7
CiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhcHBseWluZyB0aGUgZGVmYXVsdCBNSU1F
VHlwZSBpZiB3ZSB0b2xkIHRoZSBuZXR3b3JraW5nIGxheWVyIHRvIGRvIGNvbnRlbnQgc25pZmZp
bmcgZm9yIGhhbmRsZS4KLSAgICAgICAgQVNTRVJUKCFoYW5kbGUtPnNob3VsZENvbnRlbnRTbmlm
ZigpKTsKKyAgICAgICAgQVNTRVJUKCFoYW5kbGUuc2hvdWxkQ29udGVudFNuaWZmKCkpOwogICAg
ICAgICBzZXREZWZhdWx0TUlNRVR5cGUoY2ZSZXNwb25zZSk7CiAgICAgfQogI2VuZGlmCi0gICAg
Cit9CisKK3N0YXRpYyBDRlVSTFJlc3BvbnNlUmVmIHVzZVF1aWNrTG9va1Jlc3BvbnNlSWZOZWNl
c3NhcnkoUmVzb3VyY2VIYW5kbGUmIGhhbmRsZSwgQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENG
VVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBo
YW5kbGUuc2V0UXVpY2tMb29rSGFuZGxlKFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKCZoYW5kbGUs
IGNvbm4sIGNmUmVzcG9uc2UpKTsKKyAgICBpZiAoaGFuZGxlLnF1aWNrTG9va0hhbmRsZSgpKQor
ICAgICAgICByZXR1cm4gaGFuZGxlLnF1aWNrTG9va0hhbmRsZSgpLT5jZlJlc3BvbnNlKCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpCisjZW5kaWYKKyAgICByZXR1cm4gY2ZSZXNw
b25zZTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlv
blJlZiBjb25uLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisjaWYgTE9HX0RJU0FCTEVEICYmICFVU0UoUVVJQ0tfTE9PSykKKyAgICBVTlVT
RURfUEFSQU0oY29ubik7CisjZW5kaWYKKyAgICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3Rh
dGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7
CisKKyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbm49JXAs
IGhhbmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghaGFuZGxlLT5jbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYWRqdXN0UmVzcG9uc2VNaW1lVHlwZUlmTmVjZXNz
YXJ5KCpoYW5kbGUsIGNmUmVzcG9uc2UpOworICAgIGNmUmVzcG9uc2UgPSB1c2VRdWlja0xvb2tS
ZXNwb25zZUlmTmVjZXNzYXJ5KCpoYW5kbGUsIGNvbm4sIGNmUmVzcG9uc2UpOworCiAgICAgaGFu
ZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgY2ZSZXNwb25zZSk7CiB9
CiAKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKENGVVJMQ29ubmVjdGlvblJl
ZiBjb25uLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICAgICAg
TE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKGNvbm49JXAsIGhh
bmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZS5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2Fu
Y2VsbGVkKGhhbmRsZSkpIHsKKyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwo
aGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3NlbWFwaG9yZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBDRlVSTFJlc3BvbnNlUmVmIGxvY2FsUmVzcG9uc2UgPSBj
ZlJlc3BvbnNlOworICAgICAgICBhZGp1c3RSZXNwb25zZU1pbWVUeXBlSWZOZWNlc3NhcnkoKmhh
bmRsZSwgbG9jYWxSZXNwb25zZSk7CisgICAgICAgIGxvY2FsUmVzcG9uc2UgPSB1c2VRdWlja0xv
b2tSZXNwb25zZUlmTmVjZXNzYXJ5KCpoYW5kbGUsIGNvbm4sIGxvY2FsUmVzcG9uc2UpOworICAg
ICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhoYW5kbGUuZ2V0
KCksIGxvY2FsUmVzcG9uc2UpOworICAgIH0pOworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogaGFuZGxlSW50ZXJuYWwgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisgICAgZGlzcGF0Y2hf
c2VtYXBob3JlX3dhaXQoaGFuZGxlSW50ZXJuYWwtPm1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1F
X0ZPUkVWRVIpOworfQorCiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQog
c3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwg
Q0ZBcnJheVJlZiBkYXRhQXJyYXksIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CkBAIC0yMDgs
OCArMzM5LDI3IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZVUkxDb25uZWN0
aW9uUmVmIGNvbm4sIENGQXJyYXlSZWYgZGF0YUFycmF5LCBjCiAKICAgICBMT0coTmV0d29yaywg
IkNGTmV0IC0gZGlkUmVjZWl2ZURhdGFBcnJheShjb25uPSVwLCBoYW5kbGU9JXAsIGFycmF5TGVu
Z3RoPSVsZCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgQ0ZBcnJheUdldENvdW50KGRhdGFBcnJheSks
IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAK
KyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAoaGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSAm
JiBoYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRSZWNlaXZlRGF0YUFycmF5KGRhdGFBcnJh
eSkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgaGFuZGxlLT5oYW5kbGVEYXRhQXJy
YXkoZGF0YUFycmF5KTsKIH0KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheUFzeW5j
KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkFycmF5UmVmIGRhdGFBcnJheSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0
YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykp
OworICAgIENGUmV0YWluKGNvbm4pOworICAgIENGUmV0YWluKGRhdGFBcnJheSk7CisKKyAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAo
IWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoaGFuZGxlKSkKKyAgICAgICAgICAgIGRpZFJlY2VpdmVE
YXRhQXJyYXkoY29ubiwgZGF0YUFycmF5LCBoYW5kbGUuZ2V0KCkpOworICAgICAgICBDRlJlbGVh
c2UoZGF0YUFycmF5KTsKKyAgICAgICAgQ0ZSZWxlYXNlKGNvbm4pOworICAgIH0pOworfQogI2Vu
ZGlmCiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlvblJlZiBjb25u
LCBDRkRhdGFSZWYgZGF0YSwgQ0ZJbmRleCBvcmlnaW5hbExlbmd0aCwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKQEAgLTIyMywxMCArMzczLDI5IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRh
KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkRhdGFSZWYgZGF0YSwgQ0ZJbmRleCBvcmlnCiAg
ICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVEYXRhKGNvbm49JXAsIGhhbmRsZT0l
cCwgYnl0ZXM9JWxkKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBsZW5ndGgsIGhhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIAorI2lmIFVT
RShRVUlDS19MT09LKQorICAgIGlmIChoYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpICYmIGhhbmRs
ZS0+cXVpY2tMb29rSGFuZGxlKCktPmRpZFJlY2VpdmVEYXRhKGRhdGEpKQorICAgICAgICByZXR1
cm47CisjZW5kaWYKKwogICAgIGlmIChSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFu
ZGxlLT5jbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlQnVmZmVyKGhhbmRsZSwg
U2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEpLCBvcmlnaW5hbExlbmd0aCk7CiB9CiAKK3N0
YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhQXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENG
RGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8
UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQ0ZS
ZXRhaW4oY29ubik7CisgICAgQ0ZSZXRhaW4oZGF0YSk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXND
YW5jZWxsZWQoaGFuZGxlKSkKKyAgICAgICAgICAgIGRpZFJlY2VpdmVEYXRhKGNvbm4sIGRhdGEs
IG9yaWdpbmFsTGVuZ3RoLCBoYW5kbGUuZ2V0KCkpOworICAgICAgICBDRlJldGFpbihkYXRhKTsK
KyAgICAgICAgQ0ZSZWxlYXNlKGNvbm4pOworICAgIH0pOworfQorCiBzdGF0aWMgdm9pZCBkaWRT
ZW5kQm9keURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkluZGV4LCBDRkluZGV4IHRvdGFsQnl0
ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIGNvbnN0IHZvaWQg
KmNsaWVudEluZm8pCiB7CiAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwpAQCAtMjM1
LDYgKzQwNCwxOCBAQCBzdGF0aWMgdm9pZCBkaWRTZW5kQm9keURhdGEoQ0ZVUkxDb25uZWN0aW9u
UmVmLCBDRkluZGV4LCBDRkluZGV4IHRvdGFsQnl0ZXNXcml0dAogICAgIGhhbmRsZS0+Y2xpZW50
KCktPmRpZFNlbmREYXRhKGhhbmRsZSwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBl
Y3RlZFRvV3JpdGUpOwogfQogCitzdGF0aWMgdm9pZCBkaWRTZW5kQm9keURhdGFBc3luYyhDRlVS
TENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZJbmRleCBieXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxC
eXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSwgY29uc3Qgdm9p
ZCAqY2xpZW50SW5mbykKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0
YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykp
OworICAgIENGUmV0YWluKGNvbm4pOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKGhh
bmRsZSkpCisgICAgICAgICAgICBkaWRTZW5kQm9keURhdGEoY29ubiwgYnl0ZXNXcml0dGVuLCB0
b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSwgaGFuZGxlLmdldCgp
KTsKKyAgICAgICAgQ0ZSZWxlYXNlKGNvbm4pOworICAgIH0pOworfQorCiBzdGF0aWMgQm9vbGVh
biBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrKENGVVJMQ29ubmVjdGlvblJlZiBj
b25uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogI2lmIExPR19ESVNBQkxFRApAQCAtMjUw
LDYgKzQzMSwyOSBAQCBzdGF0aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUNh
bGxiYWNrKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBjb25zdAogICAgIHJldHVybiBoYW5kbGUt
PnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CiB9CiAKK3N0YXRpYyBCb29sZWFuIHNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlQXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUg
PSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudElu
Zm8pKTsKKworICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShjb25uPSVwLCBoYW5kbGU9JXApICglcykiLCBjb25uLCBoYW5kbGUuZ2V0KCksIGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAo
Y29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUpKSB7CisgICAgICAgICAgICBkaXNwYXRjaF9z
ZW1hcGhvcmVfc2lnbmFsKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9zZW1hcGhvcmUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGhhbmRsZS0+c2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoKTsKKyAgICB9KTsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwq
IGhhbmRsZUludGVybmFsID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIGRpc3BhdGNoX3Nl
bWFwaG9yZV93YWl0KGhhbmRsZUludGVybmFsLT5tX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9G
T1JFVkVSKTsKKworICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKGhhbmRsZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBoYW5kbGVJbnRlcm5hbC0+bV9ib29sUmVz
dWx0OworfQorCiBzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKENGVVJMQ29ubmVjdGlvblJl
ZiBjb25uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogI2lmIExPR19ESVNBQkxFRApAQCAt
MjU5LDEwICs0NjMsMzAgQEAgc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZGluZyhDRlVSTENvbm5l
Y3Rpb25SZWYgY29ubiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIAogICAgIExPRyhOZXR3b3Jr
LCAiQ0ZOZXQgLSBkaWRGaW5pc2hMb2FkaW5nKGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNv
bm4sIGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXBvcnROZXR3b3JrRGF0YVVzYWdl
KGhhbmRsZS0+Y29udGV4dCgpLCBjb25uKTsKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNp
ZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAoaGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSAmJiBo
YW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRGaW5pc2hMb2FkaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyNlbmRpZgorCiAgICAgaWYgKGhhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIGhhbmRs
ZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLCAwKTsKIH0KIAorc3RhdGljIHZv
aWQgZGlkRmluaXNoTG9hZGluZ0FzeW5jKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0g
c3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSk7CisgICAgQ0ZSZXRhaW4oY29ubik7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKGhh
bmRsZSkpCisgICAgICAgICAgICBkaWRGaW5pc2hMb2FkaW5nKGNvbm4sIGhhbmRsZS5nZXQoKSk7
CisgICAgICAgIENGUmVsZWFzZShjb25uKTsKKyAgICB9KTsKK30KKwogc3RhdGljIHZvaWQgZGlk
RmFpbChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKIHsKICNpZiBMT0dfRElTQUJMRUQKQEAgLTI3MiwyMyArNDk2LDM1IEBA
IHN0YXRpYyB2b2lkIGRpZEZhaWwoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGRXJyb3JSZWYg
ZXJyb3IsIGNvbnN0IHZvaWQqIGNsaWVuCiAKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlk
RmFpbChjb25uPSVwLCBoYW5kbGU9JXAsIGVycm9yID0gJXApICglcykiLCBjb25uLCBoYW5kbGUs
IGVycm9yLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJlcG9ydE5ldHdvcmtEYXRhVXNhZ2UoaGFu
ZGxlLT5jb250ZXh0KCksIGNvbm4pOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFVT
RShRVUlDS19MT09LKQorICAgIGlmIChoYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpKQorICAgICAg
ICBoYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgpLT5kaWRGYWlsKCk7CisjZW5kaWYKKwogICAgIGlm
IChoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhh
bmRsZSwgUmVzb3VyY2VFcnJvcihlcnJvcikpOwogfQogCitzdGF0aWMgdm9pZCBkaWRGYWlsQXN5
bmMoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsK
KyAgICBDRlJldGFpbihjb25uKTsKKyAgICBDRlJldGFpbihlcnJvcik7CisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFjb25uZWN0
aW9uV2FzQ2FuY2VsbGVkKGhhbmRsZSkpCisgICAgICAgICAgICBkaWRGYWlsKGNvbm4sIGVycm9y
LCBoYW5kbGUuZ2V0KCkpOworICAgICAgICBDRlJlbGVhc2UoZXJyb3IpOworICAgICAgICBDRlJl
bGVhc2UoY29ubik7CisgICAgfSk7Cit9CisKIHN0YXRpYyBDRkNhY2hlZFVSTFJlc3BvbnNlUmVm
IHdpbGxDYWNoZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZDYWNoZWRVUkxSZXNwb25z
ZVJlZiBjYWNoZWRSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBSZXNv
dXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9j
YXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0gICAgQ0ZVUkxSZXNwb25zZVJlZiB3cmFwcGVkUmVz
cG9uc2UgPSBDRkNhY2hlZFVSTFJlc3BvbnNlR2V0V3JhcHBlZFJlc3BvbnNlKGNhY2hlZFJlc3Bv
bnNlKTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS82MzAwOTkwPiBD
YWNoaW5nIGRvZXMgbm90IHJlc3BlY3QgVmFyeSBIVFRQIGhlYWRlci4KLSAgICAvLyBGSVhNRTog
V2ViQ29yZSBjYWNoZSBoYXMgaXNzdWVzIHdpdGggVmFyeSwgdG9vIChidWcgNTg3OTcsIGJ1ZyA3
MTUwOSkuCi0gICAgaWYgKENGSFRUUE1lc3NhZ2VSZWYgaHR0cFJlc3BvbnNlID0gQ0ZVUkxSZXNw
b25zZUdldEhUVFBSZXNwb25zZSh3cmFwcGVkUmVzcG9uc2UpKSB7Ci0gICAgICAgIEFTU0VSVChD
RkhUVFBNZXNzYWdlSXNIZWFkZXJDb21wbGV0ZShodHRwUmVzcG9uc2UpKTsKLSAgICAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiB2YXJ5VmFsdWUgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDb3B5
SGVhZGVyRmllbGRWYWx1ZShodHRwUmVzcG9uc2UsIENGU1RSKCJWYXJ5IikpKTsKLSAgICAgICAg
aWYgKHZhcnlWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAogI2lmIFBMQVRG
T1JNKFdJTikKICAgICBpZiAoaGFuZGxlLT5jbGllbnQoKSAmJiAhaGFuZGxlLT5jbGllbnQoKS0+
c2hvdWxkQ2FjaGVSZXNwb25zZShoYW5kbGUsIGNhY2hlZFJlc3BvbnNlKSkKQEAgLTMwNCw2ICs1
NDAsMjcgQEAgc3RhdGljIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgd2lsbENhY2hlUmVzcG9uc2Uo
Q0ZVUkxDb25uZWN0aW9uUmVmLCBDRkNhY2hlZFVSTFIKICAgICByZXR1cm4gY2FjaGVkUmVzcG9u
c2U7CiB9CiAKK3N0YXRpYyBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3BvbnNl
QXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNhY2hlZFJl
c3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhh
bmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZv
aWQqPihjbGllbnRJbmZvKSk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUp
KSB7CisgICAgICAgICAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKS0+bV9zZW1hcGhvcmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoaGFuZGxlLmdl
dCgpLCBjYWNoZWRSZXNwb25zZSk7CisgICAgfSk7CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBoYW5kbGVJbnRlcm5hbCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKyAgICBkaXNwYXRj
aF9zZW1hcGhvcmVfd2FpdChoYW5kbGVJbnRlcm5hbC0+bV9zZW1hcGhvcmUsIERJU1BBVENIX1RJ
TUVfRk9SRVZFUik7CisKKyAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBoYW5kbGVJbnRlcm5hbC0+bV9jYWNoZWRS
ZXNwb25zZVJlc3VsdC5sZWFrUmVmKCk7Cit9CisKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVDaGFs
bGVuZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMQXV0aENoYWxsZW5nZVJlZiBjaGFs
bGVuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAjaWYgTE9HX0RJU0FCTEVECkBAIC0z
MTYsNiArNTczLDE5IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoQ0ZVUkxDb25u
ZWN0aW9uUmVmIGNvbm4sIENGVVJMQXV0aENoYWxsZW5nZVJlZiBjCiAgICAgaGFuZGxlLT5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hh
bGxlbmdlLCBoYW5kbGUpKTsKIH0KIAorc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZUFz
eW5jKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxl
bmdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZvaWQq
PihjbGllbnRJbmZvKSk7CisgICAgQ0ZSZXRhaW4oY29ubik7CisgICAgQ0ZSZXRhaW4oY2hhbGxl
bmdlKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoaGFuZGxlKSkKKyAgICAgICAgICAg
IGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29ubiwgY2hhbGxlbmdlLCBoYW5kbGUuZ2V0KCkpOworICAg
ICAgICBDRlJlbGVhc2UoY2hhbGxlbmdlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGNvbm4pOworICAg
IH0pOworfQorCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIHN0YXRp
YyBCb29sZWFuIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTENvbm5lY3Rpb25SZWYg
Y29ubiwgQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQogewpAQCAtMzI3LDggKzU5Nyw0NCBAQCBzdGF0aWMgQm9vbGVhbiBjYW5S
ZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUHJv
dGVjdAogCiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25T
cGFjZShjb25uPSVwLCBoYW5kbGU9JXAgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICBQcm90ZWN0aW9uU3BhY2UgY29yZVByb3RlY3Rpb25TcGFjZSA9IGNvcmUocHJv
dGVjdGlvblNwYWNlKTsKKyAgICBpZiAoY29yZVByb3RlY3Rpb25TcGFjZS5hdXRoZW50aWNhdGlv
blNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lVW5rbm93bikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBoYW5kbGUtPmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29yZVByb3RlY3Rpb25TcGFjZSk7CisjZWxzZQogICAg
IHJldHVybiBoYW5kbGUtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29y
ZShwcm90ZWN0aW9uU3BhY2UpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgQm9vbGVhbiBjYW5SZXNw
b25kVG9Qcm90ZWN0aW9uU3BhY2VBc3luYyhDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxQ
cm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVz
b3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgTE9HKE5l
dHdvcmssICJDRk5ldCAtIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZUFzeW5jKGNvbm49JXAs
IGhhbmRsZT0lcCAoJXMpIiwgY29ubiwgaGFuZGxlLmdldCgpLCBoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXND
YW5jZWxsZWQoaGFuZGxlKSkgeworICAgICAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25h
bChoYW5kbGUtPmdldEludGVybmFsKCktPm1fc2VtYXBob3JlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIFByb3RlY3Rpb25TcGFjZSBjb3JlUHJvdGVjdGlvblNw
YWNlID0gY29yZShwcm90ZWN0aW9uU3BhY2UpOworICAgICAgICBpZiAoY29yZVByb3RlY3Rpb25T
cGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lVW5rbm93bikgeworICAgICAgICAgICAgaGFuZGxlLT5jb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGhhbmRsZS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZShjb3JlUHJvdGVjdGlvblNwYWNlKTsKKyAgICB9KTsKKworICAgIFJlc291cmNl
SGFuZGxlSW50ZXJuYWwqIGhhbmRsZUludGVybmFsID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwor
ICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KGhhbmRsZUludGVybmFsLT5tX3NlbWFwaG9yZSwg
RElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKKworICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVk
KGhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBoYW5kbGVJbnRl
cm5hbC0+bV9ib29sUmVzdWx0OwogfQorCiAjZW5kaWYKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtMzM2LDcgKzY0MiwxNCBAQCBSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCiAgICAgaWYgKG1fY29u
bmVjdGlvbikgewogICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gQ2FuY2VsbGluZyBjb25u
ZWN0aW9uICVwICglcykiLCBtX2Nvbm5lY3Rpb24uZ2V0KCksIG1fZmlyc3RSZXF1ZXN0LnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBDRlVSTENvbm5lY3Rpb25DYW5jZWwo
bV9jb25uZWN0aW9uLmdldCgpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJlcG9ydE5l
dHdvcmtEYXRhVXNhZ2UobV9jb250ZXh0LmdldCgpLCBtX2Nvbm5lY3Rpb24uZ2V0KCkpOworI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKICAgICB9CisgICAgaWYgKG1fc2VtYXBob3JlKQorICAgICAg
ICBkaXNwYXRjaF9yZWxlYXNlKG1fc2VtYXBob3JlKTsKKyAgICBpZiAobV9hc3luY1F1ZXVlKQor
ICAgICAgICBkaXNwYXRjaF9yZWxlYXNlKG1fYXN5bmNRdWV1ZSk7CiB9CiAKIFJlc291cmNlSGFu
ZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQpAQCAtMzQ0LDcgKzY1NywxMSBAQCBSZXNvdXJjZUhhbmRs
ZTo6flJlc291cmNlSGFuZGxlKCkKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gRGVzdHJveWlu
ZyBqb2IgJXAgKCVzKSIsIHRoaXMsIGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
LCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKKyNlbHNlCit2b2lkIFJlc291cmNlSGFuZGxlOjpj
cmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9v
bCBzaG91bGRDb250ZW50U25pZmYsIENGRGljdGlvbmFyeVJlZiBjbGllbnRQcm9wZXJ0aWVzKQor
I2VuZGlmCiB7CiAgICAgaWYgKCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNzLmlz
RW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHko
KSkgewogICAgICAgICAvLyBDcmVkZW50aWFscyBmb3IgZnRwIGNhbiBvbmx5IGJlIHBhc3NlZCBp
biBVUkwsIHRoZSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgZGVsZWdhdGUgY2Fs
bCB3b24ndCBiZSBtYWRlLgpAQCAtMzgyLDYgKzY5OSw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6
OmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBi
b29sCiAKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gc3NsUHJvcHM7CiAK
KyNpZiBQTEFURk9STShJT1MpCisgICAgc3NsUHJvcHMgPSBhZG9wdENGKFJlc291cmNlSGFuZGxl
OjpjcmVhdGVTU0xQcm9wZXJ0aWVzRnJvbU5TVVJMUmVxdWVzdChmaXJzdFJlcXVlc3QoKSkpOwor
I2Vsc2UKICAgICBpZiAoYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuY29udGFpbnMo
Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2VyKCkpKSB7CiAgICAgICAgIHNzbFByb3Bz
ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0
KCksIGtDRlN0cmVhbVNTTEFsbG93c0FueVJvb3QsIGtDRkJvb2xlYW5UcnVlKTsKQEAgLTM5OCw2
ICs3MTgsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9v
bCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAgICAgICB3a1NldENsaWVudENl
cnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdldCgpLCAoY2xpZW50Q2VydC0+dmFs
dWUpLmdldCgpKTsKICNlbmRpZgogICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKICAg
ICBpZiAoc3NsUHJvcHMpCiAgICAgICAgIENGVVJMUmVxdWVzdFNldFNTTFByb3BlcnRpZXMocmVx
dWVzdC5nZXQoKSwgc3NsUHJvcHMuZ2V0KCkpOwpAQCAtNDA5LDcgKzczMCw3IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihib29sIHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlLCBib29sCiAgICAgfQogI2VuZGlmCiAKLSAgICBDRlVSTENvbm5lY3Rpb25DbGll
bnRfVjYgY2xpZW50ID0geyA2LCB0aGlzLCAwLCAwLCAwLCBXZWJDb3JlOjp3aWxsU2VuZFJlcXVl
c3QsIGRpZFJlY2VpdmVSZXNwb25zZSwgZGlkUmVjZWl2ZURhdGEsIDAsIGRpZEZpbmlzaExvYWRp
bmcsIGRpZEZhaWwsIHdpbGxDYWNoZVJlc3BvbnNlLCBkaWRSZWNlaXZlQ2hhbGxlbmdlLCBkaWRT
ZW5kQm9keURhdGEsIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlQ2FsbGJhY2ssIDAsCisgICAg
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IGNvbm5lY3Rpb25DbGllbnQgPSB7IDYsIHRoaXMsIDAs
IDAsIDAsIFdlYkNvcmU6OndpbGxTZW5kUmVxdWVzdCwgZGlkUmVjZWl2ZVJlc3BvbnNlLCBkaWRS
ZWNlaXZlRGF0YSwgMCwgZGlkRmluaXNoTG9hZGluZywgZGlkRmFpbCwgd2lsbENhY2hlUmVzcG9u
c2UsIGRpZFJlY2VpdmVDaGFsbGVuZ2UsIGRpZFNlbmRCb2R5RGF0YSwgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2VDYWxsYmFjaywgMCwKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NB
TExCQUNLKQogICAgICAgICBjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UsCiAjZWxzZQpAQCAt
NDIzLDYgKzc0NCwyNCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rp
b24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogI2VuZGlmCiAgICAgfTsK
IAorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpIHsK
KyAgICAgICAgY29ubmVjdGlvbkNsaWVudC53aWxsU2VuZFJlcXVlc3QgPSB3aWxsU2VuZFJlcXVl
c3RBc3luYzsKKyAgICAgICAgY29ubmVjdGlvbkNsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UgPSBk
aWRSZWNlaXZlUmVzcG9uc2VBc3luYzsKKyAgICAgICAgY29ubmVjdGlvbkNsaWVudC5kaWRSZWNl
aXZlRGF0YSA9IGRpZFJlY2VpdmVEYXRhQXN5bmM7CisgICAgICAgIGNvbm5lY3Rpb25DbGllbnQu
ZGlkRmluaXNoTG9hZGluZyA9IGRpZEZpbmlzaExvYWRpbmdBc3luYzsKKyAgICAgICAgY29ubmVj
dGlvbkNsaWVudC5kaWRGYWlsID0gZGlkRmFpbEFzeW5jOworICAgICAgICBjb25uZWN0aW9uQ2xp
ZW50LndpbGxDYWNoZVJlc3BvbnNlID0gd2lsbENhY2hlUmVzcG9uc2VBc3luYzsKKyAgICAgICAg
Y29ubmVjdGlvbkNsaWVudC5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBkaWRS
ZWNlaXZlQ2hhbGxlbmdlQXN5bmM7CisgICAgICAgIGNvbm5lY3Rpb25DbGllbnQuZGlkU2VuZEJv
ZHlEYXRhID0gZGlkU2VuZEJvZHlEYXRhQXN5bmM7CisgICAgICAgIGNvbm5lY3Rpb25DbGllbnQu
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPSBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUFz
eW5jOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgICAgIGNv
bm5lY3Rpb25DbGllbnQuY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlID0gY2FuUmVzcG9uZFRv
UHJvdGVjdGlvblNwYWNlQXN5bmM7CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVU
SF9DQUxMQkFDSykKKyNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisgICAg
ICAgIGNvbm5lY3Rpb25DbGllbnQuZGlkUmVjZWl2ZURhdGFBcnJheSA9IGRpZFJlY2VpdmVEYXRh
QXJyYXlBc3luYzsKKyNlbmRpZgorICAgIH0KKwogICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
c3RyZWFtUHJvcGVydGllcyAgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpOwogICAgIGlmICghc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCiAgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKHN0cmVhbVByb3BlcnRpZXMsIENGU1RSKCJfa0NGVVJMQ29ubmVjdGlv
blNlc3Npb25JRCIpLCBDRlNUUigiV2ViS2l0UHJpdmF0ZVNlc3Npb24iKSk7CkBAIC00MzQsMTAg
Kzc3MywyNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9v
bCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogI2VuZGlmCiAKICAgICBzdGF0aWMg
Y29uc3QgQ0ZTdHJpbmdSZWYga0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMg
PSBDRlNUUigia0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiKTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHByb3Bl
cnRpZXNEaWN0aW9uYXJ5OworICAgIGlmIChjbGllbnRQcm9wZXJ0aWVzKQorICAgICAgICBwcm9w
ZXJ0aWVzRGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgY2xpZW50UHJvcGVydGllcykpOworICAgIGVsc2UKKyAg
ICAgICAgcHJvcGVydGllc0RpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11
dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKHByb3BlcnRpZXNEaWN0aW9uYXJ5LmdldCgpLCBrQ0ZVUkxDb25uZWN0aW9uU29j
a2V0U3RyZWFtUHJvcGVydGllcywgc3RyZWFtUHJvcGVydGllcyk7CisKKyAgICBpZiAoU2V0dGlu
Z3M6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKSAmJiAhQ0ZEaWN0aW9uYXJ5Q29u
dGFpbnNLZXkocHJvcGVydGllc0RpY3Rpb25hcnkuZ2V0KCksIF9rQ0ZVUkxDb25uZWN0aW9uUHJv
cGVydHlSYXdCeXRlcykpCisgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHByb3BlcnRpZXNE
aWN0aW9uYXJ5LmdldCgpLCBfa0NGVVJMQ29ubmVjdGlvblByb3BlcnR5UmF3Qnl0ZXMsIGtDRkJv
b2xlYW5UcnVlKTsKKyNlbHNlCiAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVy
dGllc0RpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAoY29uc3Qgdm9p
ZCoqKSZrQ0ZVUkxDb25uZWN0aW9uU29ja2V0U3RyZWFtUHJvcGVydGllcywgKGNvbnN0IHZvaWQq
Kikmc3RyZWFtUHJvcGVydGllcywgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworI2VuZGlmCiAgICAgQ0ZSZWxlYXNl
KHN0cmVhbVByb3BlcnRpZXMpOwogCi0gICAgZC0+bV9jb25uZWN0aW9uID0gYWRvcHRDRihDRlVS
TENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcygwLCByZXF1ZXN0LmdldCgpLCByZWludGVy
cHJldF9jYXN0PENGVVJMQ29ubmVjdGlvbkNsaWVudCo+KCZjbGllbnQpLCBwcm9wZXJ0aWVzRGlj
dGlvbmFyeS5nZXQoKSkpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoIWNsaWVudCgpIHx8
ICFjbGllbnQoKS0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgIENGVVJMUmVxdWVzdFNl
dFNob3VsZFN0YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LmdldCgpLCAxKTsKKyNlbmRpZgorICAg
IGQtPm1fY29ubmVjdGlvbiA9IGFkb3B0Q0YoQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3Bl
cnRpZXMoMCwgcmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25D
bGllbnQqPigmY29ubmVjdGlvbkNsaWVudCksIHByb3BlcnRpZXNEaWN0aW9uYXJ5LmdldCgpKSk7
CiB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKQEAgLTQ1NCwxMyArODA5LDI5IEBA
IGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKIAogICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UgPSAhY2xpZW50KCkgfHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKHRoaXMpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBjcmVhdGVDRlVSTENvbm5l
Y3Rpb24oc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGQtPm1fc2hvdWxkQ29udGVudFNuaWZm
KTsKKyNlbHNlCisgICAgY3JlYXRlQ0ZVUkxDb25uZWN0aW9uKHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlLCBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZiwgY2xpZW50KCktPmNvbm5lY3Rpb25Qcm9w
ZXJ0aWVzKHRoaXMpLmdldCgpKTsKKyNlbmRpZgogCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVu
dCgpLT51c2VzQXN5bmNDYWxsYmFja3MoKSkgeworICAgICAgICBkLT5tX3NlbWFwaG9yZSA9IGRp
c3BhdGNoX3NlbWFwaG9yZV9jcmVhdGUoMCk7CisKKyAgICAgICAgZC0+bV9hc3luY1F1ZXVlID0g
ZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViQ29yZS9DRk5ldHdvcmsiLCBESVNQ
QVRDSF9RVUVVRV9TRVJJQUwpOworICAgICAgICBkaXNwYXRjaF9xdWV1ZV90IGJhY2tncm91bmRR
dWV1ZSA9IGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlf
SElHSCwgMCk7CisgICAgICAgIGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUoZC0+bV9hc3luY1F1
ZXVlLCBiYWNrZ3JvdW5kUXVldWUpOworCisgICAgICAgIENGVVJMQ29ubmVjdGlvblNldERlbGVn
YXRlRGlzcGF0Y2hRdWV1ZShkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIGQtPm1fYXN5bmNRdWV1ZSk7
CisgICAgfSBlbHNlIHsKICNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZVUkxDb25uZWN0aW9uU2No
ZWR1bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOworICAg
ICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVlKGQtPm1f
Y29ubmVjdGlvbi5nZXQoKSk7CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgICAgIENGVVJMQ29u
bmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBXZWJUaHJl
YWRSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAjZWxzZQotICAgIENGVVJMQ29u
bmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgICAgIENGVVJMQ29u
bmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAjZW5kaWYKKyAgICB9CiAg
ICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVEb3dubG9hZFdpdGhSdW5Mb29wKGQtPm1fY29ubmVj
dGlvbi5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogICAg
IENGVVJMQ29ubmVjdGlvblN0YXJ0KGQtPm1fY29ubmVjdGlvbi5nZXQoKSk7CiAKQEAgLTQ3Myw2
ICs4NDQsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogewogICAgIGlmIChkLT5t
X2Nvbm5lY3Rpb24pIHsKICAgICAgICAgQ0ZVUkxDb25uZWN0aW9uQ2FuY2VsKGQtPm1fY29ubmVj
dGlvbi5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICByZXBvcnROZXR3b3JrRGF0
YVVzYWdlKGNvbnRleHQoKSwgZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKKyNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCiAgICAgICAgIGQtPm1fY29ubmVjdGlvbiA9IDA7CiAgICAgfQogfQpAQCAtNTA3
LDE2ICs4ODEsMjIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXMKICAgICBjbGllbnQoKS0+d2ls
bFNlbmRSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogCiAgICAgLy8g
Q2xpZW50IGNhbGwgbWF5IG5vdCBwcmVzZXJ2ZSB0aGUgc2Vzc2lvbiwgZXNwZWNpYWxseSBpZiB0
aGUgcmVxdWVzdCBpcyBzZW50IG92ZXIgSVBDLgotICAgIGlmICghcmVxdWVzdC5pc051bGwoKSkK
KyAgICBpZiAoIXJlcXVlc3QuaXNOdWxsKCkpIHsKICAgICAgICAgcmVxdWVzdC5zZXRTdG9yYWdl
U2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9uLmdldCgpKTsKKworICAgICAgICBkLT5tX2N1cnJl
bnRSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICB9CiB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKIHsKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0g
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSIpOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKLQor
ICAgIGlmIChSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpIHsK
KyAgICAgICAgaWYgKGNsaWVudC0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgICAgICBj
bGllbnQtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlQXN5bmModGhpcyk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KHRoaXMpOworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTU4Niw5ICs5NjYsMTIg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRI
X0NBTExCQUNLKQogYm9vbCBSZXNvdXJjZUhhbmRsZTo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKIHsK
LSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+Y2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOwotCisgICAg
aWYgKFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkgeworICAg
ICAgICBpZiAoY2xpZW50LT51c2VzQXN5bmNDYWxsYmFja3MoKSkKKyAgICAgICAgICAgIGNsaWVu
dC0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKHRoaXMsIHByb3Rl
Y3Rpb25TcGFjZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQtPmNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodGhpcywgcHJvdGVjdGlvblNwYWNl
KTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCkBAIC02OTIsNyArMTA3NSwx
MSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleAogICAgICAgICByZXR1cm47CiAgICAgfQogCisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBoYW5kbGUtPmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihzdG9y
ZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUhhbmRsZTo6
c2hvdWxkQ29udGVudFNuaWZmVVJMKHJlcXVlc3QudXJsKCkpKTsKKyNlbHNlCisgICAgaGFuZGxl
LT5jcmVhdGVDRlVSTENvbm5lY3Rpb24oc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRD
cmVkZW50aWFscywgUmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlmZlVSTChyZXF1ZXN0
LnVybCgpKSwgaGFuZGxlLT5jbGllbnQoKS0+Y29ubmVjdGlvblByb3BlcnRpZXMoaGFuZGxlLmdl
dCgpKS5nZXQoKSk7CisjZW5kaWYKIAogICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1
bkxvb3AoaGFuZGxlLT5jb25uZWN0aW9uKCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwgc3luY2hy
b25vdXNMb2FkUnVuTG9vcE1vZGUoKSk7CiAgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVEb3du
bG9hZFdpdGhSdW5Mb29wKGhhbmRsZS0+Y29ubmVjdGlvbigpLCBDRlJ1bkxvb3BHZXRDdXJyZW50
KCksIHN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlKCkpOwpAQCAtNzA0LDYgKzEwOTEsOSBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleAogICAgIGVycm9yID0gY2xpZW50LT5lcnJvcigpOwogCiAg
ICAgQ0ZVUkxDb25uZWN0aW9uQ2FuY2VsKGhhbmRsZS0+Y29ubmVjdGlvbigpKTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgcmVwb3J0TmV0d29ya0RhdGFVc2FnZShjb250ZXh0LCBoYW5kbGUtPmNv
bm5lY3Rpb24oKSk7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgIAogICAgIGlmIChlcnJv
ci5pc051bGwoKSkKICAgICAgICAgcmVzcG9uc2UgPSBjbGllbnQtPnJlc3BvbnNlKCk7CkBAIC03
NjksNiArMTE1OSw0MiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjp1bnNjaGVkdWxlKFNjaGVkdWxl
UGFpciogcGFpcikKIH0KICNlbmRpZgogCitjb25zdCBSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNl
SGFuZGxlOjpjdXJyZW50UmVxdWVzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1fY3VycmVu
dFJlcXVlc3Q7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBkLT5tX3JlcXVlc3RS
ZXN1bHQgPSByZXF1ZXN0OworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwoZC0+bV9zZW1h
cGhvcmUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVSZXNw
b25zZSgpCit7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChkLT5tX3NlbWFwaG9yZSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoYm9vbCB1c2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBkLT5tX2Jvb2xSZXN1bHQg
PSB1c2VDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKGQt
Pm1fc2VtYXBob3JlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsQ2Fj
aGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQoreworICAgIGQtPm1f
Y2FjaGVkUmVzcG9uc2VSZXN1bHQgPSByZXNwb25zZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVf
c2lnbmFsKGQtPm1fc2VtYXBob3JlKTsKK30KKworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FV
VEhfQ0FMTEJBQ0spCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCBjYW5BdXRoZW50aWNhdGUpCit7CisgICAgZC0+
bV9ib29sUmVzdWx0ID0gY2FuQXV0aGVudGljYXRlOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9z
aWduYWwoZC0+bV9zZW1hcGhvcmUpOworfQorI2VuZGlmCisKICNlbmRpZiAvLyBVU0UoQ0ZORVRX
T1JLKQogCiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQpAQCAtODAzLDQg
KzEyMjksMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YUFycmF5KENGQXJyYXlS
ZWYgZGF0YUFycmF5KQogfQogI2VuZGlmCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykgJiYgVVNFKENG
TkVUV09SSykKK0NGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiogUmVzb3VyY2VIYW5kbGU6OmNvbm5l
Y3Rpb25DbGllbnRDYWxsYmFja3MoKQoreworICAgIHN0YXRpYyBDRlVSTENvbm5lY3Rpb25DbGll
bnRfVjYgY2xpZW50ID0geyA2LCAwLCAwLCAwLCAwLCAwLCAwLCBkaWRSZWNlaXZlRGF0YSwgMCwg
ZGlkRmluaXNoTG9hZGluZywgZGlkRmFpbCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgZGlkUmVjZWl2
ZURhdGFBcnJheX07CisgICAgcmV0dXJuICZjbGllbnQ7Cit9CisjZW5kaWYgLy8gVVNFKFFVSUNL
X0xPT0spICYmIFVTRShDRk5FVFdPUkspCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217112</attachid>
            <date>2013-11-15 20:06:08 -0800</date>
            <delta_ts>2013-12-02 20:12:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131115200607.patch</filename>
            <type>text/plain</type>
            <size>45345</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjkyYTFlYjQ1MzA0NDcw
MjFkMjk5OTYwM2RlYmIwNjYxNzdhYmNmZS4uNzg3MjQyMDA5MjM5MzMzNGEwZjM1NGZjOWYxNGMx
YWUzNjhkZDJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEzLTExLTE1ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNs
aWVudDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9y
dE5ldHdvcmtEYXRhVXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdGlvbldhc0NhbmNl
bGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFNl
bmRSZXF1ZXN0QXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0UmVzcG9uc2VNaW1lVHlw
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnVzZVF1aWNrTG9va1Jlc3BvbnNlSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OmRpZFJlY2VpdmVEYXRhQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6ZGlkUmVjZWl2ZURhdGFB
cnJheUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OmRpZFJlY2VpdmVEYXRhQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlkU2Vu
ZEJvZHlEYXRhQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2VBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRpZEZpbmlzaExvYWRpbmdBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpk
aWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZEZhaWxBc3luYyk6CisgICAgICAgIChXZWJD
b3JlOjp3aWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjp3aWxsQ2FjaGVSZXNw
b25zZUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVDaGFsbGVuZ2VBc3luYyk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlQXN5bmMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJyZW50UmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsU2Vu
ZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250
aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbm5lY3Rpb25DbGll
bnRDYWxsYmFja3MpOgorCiAyMDEzLTExLTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBNb3ZlIElEQkN1cnNvckJhY2tlbmQgb3BlcmF0aW9ucyBpbnRvIHRo
ZWlyIG93biBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oCmluZGV4IDAyOTQ1ZTFiMjgxNDc3YTI2ZDQ3ZGE1N2QwYTM5MDczNWIzOGY4
M2EuLjA5YjhjODVkNDU3NTExOWJjNDQ5ZWYzNTEyODkwYjNiYWMwMThmMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKQEAgLTY4LDYg
KzY4LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwogdHlwZWRlZiBzdHJ1Y3Qg
X0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwogdHlwZWRlZiBpbnQgQ0ZIVFRQ
Q29va2llU3RvcmFnZUFjY2VwdFBvbGljeTsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENv
b2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVj
dCBfQ0ZDYWNoZWRVUkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQpAQCAtMTI1LDYgKzEyNiw3IEBA
IHB1YmxpYzoKICAgICBOU1VSTENvbm5lY3Rpb24gKmNvbm5lY3Rpb24oKSBjb25zdDsKICAgICBp
ZCBkZWxlZ2F0ZSgpOwogICAgIHZvaWQgcmVsZWFzZURlbGVnYXRlKCk7CisgICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCgpIGNvbnN0OwogI2VuZGlmCiAKICAgICB2b2lk
IHNjaGVkdWxlKFdURjo6U2NoZWR1bGVQYWlyKik7CkBAIC0xNTgsNyArMTYwLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIENBTExCQUNLIGludGVybmV0U3RhdHVzQ2FsbGJhY2soSElOVEVS
TkVULCBEV09SRF9QVFIsIERXT1JELCBMUFZPSUQsIERXT1JEKTsKICNlbmRpZgogCi0jaWYgVVNF
KENVUkwpIHx8IFVTRShTT1VQKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQorI2lmIFVTRShDRk5F
VFdPUkspIHx8IFVTRShDVVJMKSB8fCBVU0UoU09VUCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
ICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQuZ2V0
KCk7IH0KICNlbmRpZgogCkBAIC0yMDEsNyArMjAzLDkgQEAgcHVibGljOgogICAgIHZvaWQgY29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKENGTkVUV09SSykKKyAgICB2b2lkIGNvbnRp
bnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZik7CisjZWxpZiBQTEFU
Rk9STShNQUMpCiAgICAgLy8gQ2FsbGVkIGluIHJlc3BvbnNlIHRvIFJlc291cmNlSGFuZGxlQ2xp
ZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKCkuCiAgICAgdm9pZCBjb250aW51ZVdpbGxDYWNo
ZVJlc3BvbnNlKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAK
aW5kZXggNjM5N2Q3MDI3ZWI0YjQ0MTlkMWRjOGIyZTNjMDYwZDViM2E5YmY2ZS4uOGViNGVlYjZh
ZjU0OWY5YWEwY2RlODUyNjRkN2E4ZmFhODJhYzFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKQEAgLTYx
LDcgKzYxLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUhhCiB9CiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKE1BQykKKyNpZiBVU0UoQ0ZORVRXT1JLKQordm9pZCBSZXNvdXJjZUhhbmRsZUNsaWVu
dDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hl
ZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQoreworICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2Fj
aGVSZXNwb25zZShyZXNwb25zZSk7Cit9CisjZWxpZiBQTEFURk9STShNQUMpCiB2b2lkIFJlc291
cmNlSGFuZGxlQ2xpZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKnJlc3BvbnNlKQogewogICAgIGhhbmRsZS0+Y29u
dGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKaW5kZXggYzBjYTg4
YWMxYjQ0ZjNjMjJmZTcxZTA2ZjQzZjJkNTdkMDFlZThlNy4uYjlhOTY2OWYyMzYxNzIxNzU5MTA5
MDc5MTI0NWRhMTNiNzRiZTllYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaApAQCAtODgsOCArODgsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQg
cmVxdWVzdCB1c2luZyBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKCkgd2hlbiByZWFkeS4KICAgICAgICAgdmlydHVhbCB2b2lkIGNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQorCiAg
ICAgICAgIC8vIENsaWVudCB3aWxsIHBhc3MgYW4gdXBkYXRlZCByZXF1ZXN0IHVzaW5nIFJlc291
cmNlSGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKCkgd2hlbiByZWFkeS4KKyNpZiBV
U0UoQ0ZORVRXT1JLKQorICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhSZXNvdXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOworI2VsaWYgUExBVEZP
Uk0oTUFDKQogICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNv
dXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaAppbmRleCA5YjhhODlhZTY2ZGFkM2MyYzNiODdmMTcyYTgwOTM1NDBkZTc0NjYyLi4zNjgx
ZjYwMjU2MWM2YzA1OWJkMDk0MzQ2NmZjOTkyYWZlODAyOTZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApA
QCAtODMsNiArODMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fc2hv
dWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICNpZiBVU0UoQ0ZORVRXT1JLKQog
ICAgICAgICAgICAgLCBtX2Nvbm5lY3Rpb24oMCkKKyAgICAgICAgICAgICwgbV9jdXJyZW50UmVx
dWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgLCBtX2FzeW5jUXVldWUoMCkKKyAgICAgICAgICAg
ICwgbV9zZW1hcGhvcmUoMCkKICNlbmRpZgogI2lmIFVTRShXSU5JTkVUKQogICAgICAgICAgICAg
LCBtX2ZpbGVMb2FkVGltZXIobG9hZGVyLCAmUmVzb3VyY2VIYW5kbGU6OmZpbGVMb2FkVGltZXIp
CkBAIC0xNDUsNiArMTQ4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X3Nob3VsZENvbnRlbnRTbmlmZjsKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgICAgICBSZXRhaW5Q
dHI8Q0ZVUkxDb25uZWN0aW9uUmVmPiBtX2Nvbm5lY3Rpb247CisgICAgICAgIFJlc291cmNlUmVx
dWVzdCBtX2N1cnJlbnRSZXF1ZXN0OworCisgICAgICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9hc3lu
Y1F1ZXVlOworICAgICAgICBkaXNwYXRjaF9zZW1hcGhvcmVfdCBtX3NlbWFwaG9yZTsKKyAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdFJlc3VsdDsKKyAgICAgICAgUmV0YWluUHRyPENG
Q2FjaGVkVVJMUmVzcG9uc2VSZWY+IG1fY2FjaGVkUmVzcG9uc2VSZXN1bHQ7CisgICAgICAgIGJv
b2wgbV9ib29sUmVzdWx0OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhVVNFKENGTkVU
V09SSykKICAgICAgICAgUmV0YWluUHRyPE5TVVJMQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VIYW5kbGVDRk5ldC5jcHAKaW5kZXggZmI4NGQ4MWI0OWRjZDVjZWU4NjNiODQ2NGVjMTI2ZTE4
MWY0OWFmNy4uMjJlOGFkZjBhZjU0MTEzNmRhNzZiMDYwNjA5N2RmY2E5YzdmZDhmYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwCkBAIC01Miw2ICs1MiwxMSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JNKElP
UykKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpCisKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5oIgogI2lmIFVTRShDRk5FVFdPUkspCkBAIC03OSw2ICs4NCwy
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCisjaWYgUExB
VEZPUk0oSU9TKQorc3RhdGljIHZvaWQgcmVwb3J0TmV0d29ya0RhdGFVc2FnZShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4pCit7CisgICAgaWYgKCFT
ZXR0aW5nczo6bmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgQ0ZJbmRleCByYXdCeXRlc1NlbnQ7CisgICAgQ0ZJbmRleCByYXdCeXRlc1JlY2Vp
dmVkOworICAgIENGSW5kZXggY2VsbHVsYXJCeXRlc1NlbnQ7CisgICAgQ0ZJbmRleCBjZWxsdWxh
ckJ5dGVzUmVjZWl2ZWQ7CisgICAgX0NGVVJMQ29ubmVjdGlvbkdldFJhd0J5dGVJbmZvKGNvbm4s
ICZyYXdCeXRlc1NlbnQsICZyYXdCeXRlc1JlY2VpdmVkLCAmY2VsbHVsYXJCeXRlc1NlbnQsICZj
ZWxsdWxhckJ5dGVzUmVjZWl2ZWQpOworICAgIGNvbnRleHQtPnJlcG9ydE5ldHdvcmtEYXRhVXNh
Z2Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0J5dGVzU2VudCksIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihyYXdCeXRlc1JlY2VpdmVkKSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNlbGx1bGFyQnl0
ZXNTZW50KSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNlbGx1bGFyQnl0ZXNSZWNlaXZlZCkpOwor
fQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgYWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEhhc2hTZXQ8U3RyaW5nPiwgaG9zdHMsICgpKTsKQEAgLTkyLDYgKzExMSwxMSBAQCBzdGF0aWMg
SGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFSZWY+PiYgY2xpZW50Q2VydHMoKQogICAg
IHJldHVybiBjZXJ0czsKIH0KIAorc3RhdGljIGJvb2wgY29ubmVjdGlvbldhc0NhbmNlbGxlZChj
b25zdCBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+JiBoYW5kbGUpCit7CisgICAgcmV0dXJuICFjb25z
dF9jYXN0PFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4mPihoYW5kbGUpLT5nZXRJbnRlcm5hbCgpLT5t
X2Nvbm5lY3Rpb247Cit9CisKICNpZiAhUExBVEZPUk0oTUFDKQogc3RhdGljIHZvaWQgc2V0RGVm
YXVsdE1JTUVUeXBlKENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7CkBAIC0xMDgsNTEgKzEz
Miw3OSBAQCBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbgogICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRl
ckZpZWxkKCJBdXRob3JpemF0aW9uIiwgYXV0aGVudGljYXRpb25IZWFkZXIpOwogfQogCi1zdGF0
aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTENvbm5lY3Rpb25SZWYgY29u
biwgQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlZGlyZWN0
UmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitzdGF0aWMgUmV0YWluUHRyPENGVVJM
UmVzcG9uc2VSZWY+IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCwgQ0ZVUkxSZXF1ZXN0UmVmIG5ld1JlcXVl
c3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNlKQogewotI2lmIExPR19ESVNB
QkxFRAotICAgIFVOVVNFRF9QQVJBTShjb25uKTsKLSNlbmRpZgotICAgIFJlc291cmNlSGFuZGxl
KiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+
KGNsaWVudEluZm8pKTsKKyAgICBpZiAoY2ZSZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICByZXR1
cm4gY2ZSZWRpcmVjdFJlc3BvbnNlOwogCi0gICAgaWYgKCFjZlJlZGlyZWN0UmVzcG9uc2UpIHsK
LSAgICAgICAgQ0ZSZXRhaW4oY2ZSZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuIGNmUmVxdWVzdDsK
LSAgICB9CisgICAgQ0ZVUkxSZWYgbmV3VVJMID0gQ0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1JlcXVl
c3QpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmV3U2NoZW1lID0gYWRvcHRDRihDRlVS
TENvcHlTY2hlbWUobmV3VVJMKSk7CiAKLSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gd2lsbFNl
bmRSZXF1ZXN0KGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxl
LT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBJ
ZiB0aGUgcHJvdG9jb2xzIG9mIHRoZSBuZXcgcmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQgcmVxdWVz
dCBtYXRjaCwgdGhpcyBpcyBub3QgYW4gSFNUUyByZWRpcmVjdCBhbmQgd2Ugc2hvdWxkbid0IHN5
bnRoZXNpemUgYSByZWRpcmVjdCByZXNwb25zZS4KKyAgICBpZiAoY3VycmVudFJlcXVlc3QudXJs
KCkucHJvdG9jb2woKSA9PSBTdHJpbmcobmV3U2NoZW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGN1cnJlbnRVUkwgPSBjdXJyZW50UmVxdWVz
dC51cmwoKS5jcmVhdGVDRlVSTCgpOworICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBy
ZXNwb25zZU1lc3NhZ2UgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXNwb25zZSgwLCAz
MDIsIDAsIGtDRkhUVFBWZXJzaW9uMV8xKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBuZXdB
YnNvbHV0ZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxDb3B5QWJzb2x1dGVVUkwobmV3VVJMKSk7CisgICAg
Q0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBD
RlNUUigiTG9jYXRpb24iKSwgQ0ZVUkxHZXRTdHJpbmcobmV3QWJzb2x1dGVVUkwuZ2V0KCkpKTsK
KyAgICBDRkhUVFBNZXNzYWdlU2V0SGVhZGVyRmllbGRWYWx1ZShyZXNwb25zZU1lc3NhZ2UuZ2V0
KCksIENGU1RSKCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJuby1zdG9yZSIpKTsKIAorICAgIFJl
dGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiBuZXdSZXNwb25zZSA9IGFkb3B0Q0YoQ0ZVUkxSZXNw
b25zZUNyZWF0ZVdpdGhIVFRQUmVzcG9uc2UoMCwgY3VycmVudFVSTC5nZXQoKSwgcmVzcG9uc2VN
ZXNzYWdlLmdldCgpLCBrQ0ZVUkxDYWNoZVN0b3JhZ2VOb3RBbGxvd2VkKSk7CisgICAgcmV0dXJu
IG5ld1Jlc3BvbnNlOworfQorCitzdGF0aWMgUmVzb3VyY2VSZXF1ZXN0IGNyZWF0ZVJlc291cmNl
UmVxdWVzdChDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0LCBjb25zdCBSZXRhaW5QdHI8Q0ZVUkxS
ZXNwb25zZVJlZj4mIHJlZGlyZWN0UmVzcG9uc2UsIFJlc291cmNlSGFuZGxlJiBoYW5kbGUpCit7
CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Ci0gICAgaWYgKGNmUmVkaXJlY3RSZXNwb25z
ZSkgewotICAgICAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBNZXNzYWdlID0gQ0ZVUkxSZXNwb25z
ZUdldEhUVFBSZXNwb25zZShjZlJlZGlyZWN0UmVzcG9uc2UpOwotICAgICAgICBpZiAoaHR0cE1l
c3NhZ2UgJiYgQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwTWVzc2FnZSkg
PT0gMzA3KSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhc3RIVFRQTWV0
aG9kID0gaGFuZGxlLT5sYXN0SFRUUE1ldGhvZCgpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1
ZXN0Q29weUhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOwotICAgICAgICAgICAgaWYgKENG
U3RyaW5nQ29tcGFyZVdpdGhPcHRpb25zKGxhc3RIVFRQTWV0aG9kLmdldCgpLCBuZXdNZXRob2Qu
Z2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdl
dCgpKSksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpKSB7Ci0gICAgICAgICAgICAgICAgUmV0
YWluUHRyPENGTXV0YWJsZVVSTFJlcXVlc3RSZWY+IG11dGFibGVSZXF1ZXN0ID0gYWRvcHRDRihD
RlVSTFJlcXVlc3RDcmVhdGVNdXRhYmxlQ29weSgwLCBjZlJlcXVlc3QpKTsKLSAgICAgICAgICAg
ICAgICB3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihoYW5kbGUtPnN0b3JhZ2VTZXNzaW9uKCks
IG11dGFibGVSZXF1ZXN0LmdldCgpKTsKLSAgICAgICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRI
VFRQUmVxdWVzdE1ldGhvZChtdXRhYmxlUmVxdWVzdC5nZXQoKSwgbGFzdEhUVFBNZXRob2QuZ2V0
KCkpOwotCi0gICAgICAgICAgICAgICAgRm9ybURhdGEqIGJvZHkgPSBoYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLmh0dHBCb2R5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2Fz
ZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkgJiYg
IWJvZHktPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6c2V0SFRUUEJv
ZHkobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGJvZHkpOwotCi0gICAgICAgICAgICAgICAgU3RyaW5n
IG9yaWdpbmFsQ29udGVudFR5cGUgPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50
VHlwZSgpOwotICAgICAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZh
bHVlKG11dGFibGVSZXF1ZXN0LmdldCgpLCBDRlNUUigiQ29udGVudC1UeXBlIiksIG9yaWdpbmFs
Q29udGVudFR5cGUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICBy
ZXF1ZXN0ID0gbXV0YWJsZVJlcXVlc3QuZ2V0KCk7Ci0gICAgICAgICAgICB9CisKKyAgICBDRkhU
VFBNZXNzYWdlUmVmIGh0dHBNZXNzYWdlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShy
ZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICBpZiAoaHR0cE1lc3NhZ2UgJiYgQ0ZIVFRQTWVz
c2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwTWVzc2FnZSkgPT0gMzA3KSB7CisgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFzdEhUVFBNZXRob2QgPSBoYW5kbGUubGFzdEhUVFBN
ZXRob2QoKS5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0TWV0aG9kKGNm
UmVxdWVzdCkpOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlV2l0aE9wdGlvbnMobGFzdEhU
VFBNZXRob2QuZ2V0KCksIG5ld01ldGhvZC5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdH
ZXRMZW5ndGgobGFzdEhUVFBNZXRob2QuZ2V0KCkpKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2
ZSkpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRh
YmxlUmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZS
ZXF1ZXN0KSk7CisgICAgICAgICAgICB3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihoYW5kbGUu
c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJsZVJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgQ0ZV
UkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RI
VFRQTWV0aG9kLmdldCgpKTsKKworICAgICAgICAgICAgRm9ybURhdGEqIGJvZHkgPSBoYW5kbGUu
Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UoaGFuZGxlLmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkg
JiYgIWJvZHktPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9k
eShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgYm9keSk7CisKKyAgICAgICAgICAgIFN0cmluZyBvcmln
aW5hbENvbnRlbnRUeXBlID0gaGFuZGxlLmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgp
OworICAgICAgICAgICAgaWYgKCFvcmlnaW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVx
dWVzdC5nZXQoKSwgQ0ZTVFIoIkNvbnRlbnQtVHlwZSIpLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOworCisgICAgICAgICAgICByZXF1ZXN0ID0gbXV0YWJsZVJl
cXVlc3QuZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CisKICAgICBpZiAocmVxdWVzdC5pc051bGwo
KSkKICAgICAgICAgcmVxdWVzdCA9IGNmUmVxdWVzdDsKIAogICAgIC8vIFNob3VsZCBub3Qgc2V0
IFJlZmVyZXIgYWZ0ZXIgYSByZWRpcmVjdCBmcm9tIGEgc2VjdXJlIHJlc291cmNlIHRvIG5vbi1z
ZWN1cmUgb25lLgotICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYm
IHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgaGFuZGxlLT5j
b250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKKyAg
ICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBwcm90b2NvbElzKHJl
cXVlc3QuaHR0cFJlZmVycmVyKCksICJodHRwcyIpICYmIGhhbmRsZS5jb250ZXh0KCktPnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKICAgICAgICAgcmVxdWVzdC5j
bGVhckhUVFBSZWZlcnJlcigpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitzdGF0aWMgQ0ZV
UkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZV
UkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5hbFJlZGlyZWN0
UmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisjaWYgTE9HX0RJU0FCTEVECisg
ICAgVU5VU0VEX1BBUkFNKGNvbm4pOworI2VuZGlmCisgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50
SW5mbykpOworICAgIFJldGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiByZWRpcmVjdFJlc3BvbnNl
ID0gc3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShoYW5kbGUtPmN1cnJlbnRS
ZXF1ZXN0KCksIGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNlKTsKKworICAgIGlm
ICghcmVkaXJlY3RSZXNwb25zZSkgeworICAgICAgICBDRlJldGFpbihjZlJlcXVlc3QpOworICAg
ICAgICByZXR1cm4gY2ZSZXF1ZXN0OworICAgIH0KKworICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQg
LSB3aWxsU2VuZFJlcXVlc3QoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwgaGFuZGxl
LCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgaGFuZGxlLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgY2ZSZWRpcmVjdFJlc3BvbnNl
KTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGNyZWF0ZVJlc291cmNlUmVxdWVzdChj
ZlJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UsICpoYW5kbGUpOworICAgIGhhbmRsZS0+d2lsbFNl
bmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UuZ2V0KCkpOwogCiAgICAgaWYgKHJl
cXVlc3QuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTYzLDE4ICsyMTUsNDMgQEAg
c3RhdGljIENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb25uZWN0aW9uUmVm
IGNvbm4sIENGVVJMUmVxdWVzdFJlZgogICAgIHJldHVybiBjZlJlcXVlc3Q7CiB9CiAKLXN0YXRp
YyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxS
ZXNwb25zZVJlZiBjZlJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorc3RhdGljIENG
VVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3RBc3luYyhDRlVSTENvbm5lY3Rpb25SZWYgY29u
biwgQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5hbFJl
ZGlyZWN0UmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0jaWYgTE9HX0RJU0FC
TEVECi0gICAgVU5VU0VEX1BBUkFNKGNvbm4pOwotI2VuZGlmCi0gICAgUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4o
Y2xpZW50SW5mbykpOworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGlj
X2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CiAK
LSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbm49JXAsIGhh
bmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJl
Zj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3Nh
cnkoaGFuZGxlLT5jdXJyZW50UmVxdWVzdCgpLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RS
ZXNwb25zZSk7CiAKLSAgICBpZiAoIWhhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UpIHsKKyAgICAgICAgQ0ZSZXRhaW4oY2ZSZXF1ZXN0
KTsKKyAgICAgICAgcmV0dXJuIGNmUmVxdWVzdDsKKyAgICB9CisgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIHdpbGxTZW5kUmVxdWVzdEFzeW5jKGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNv
bm4sIGhhbmRsZS5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKGhhbmRsZSkpIHsK
KyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwoaGFuZGxlLT5nZXRJbnRlcm5h
bCgpLT5tX3NlbWFwaG9yZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoY2ZSZXF1
ZXN0LCByZWRpcmVjdFJlc3BvbnNlLCAqaGFuZGxlKTsKKyAgICAgICAgaGFuZGxlLT53aWxsU2Vu
ZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7CisgICAgfSk7CiAKKyAg
ICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBoYW5kbGVJbnRlcm5hbCA9IGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChoYW5kbGVJbnRlcm5hbC0+bV9z
ZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CisgICAgaWYgKGNvbm5lY3Rpb25XYXND
YW5jZWxsZWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlSW50
ZXJuYWwtPm1fcmVxdWVzdFJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBjZlJlcXVlc3QgPSBoYW5kbGVJbnRlcm5hbC0+bV9yZXF1ZXN0UmVzdWx0LmNmVVJMUmVxdWVz
dChVcGRhdGVIVFRQQm9keSk7CisgICAgQ0ZSZXRhaW4oY2ZSZXF1ZXN0KTsKKyAgICBoYW5kbGVJ
bnRlcm5hbC0+bV9yZXF1ZXN0UmVzdWx0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgcmV0dXJu
IGNmUmVxdWVzdDsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0UmVzcG9uc2VNaW1lVHlwZUlmTmVj
ZXNzYXJ5KFJlc291cmNlSGFuZGxlJiBoYW5kbGUsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25z
ZSkKK3sKICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gQXZvaWQgTUlNRSB0eXBlIHNuaWZmaW5n
IGlmIHRoZSByZXNwb25zZSBjb21lcyBiYWNrIGFzIDMwNCBOb3QgTW9kaWZpZWQuCiAgICAgQ0ZI
VFRQTWVzc2FnZVJlZiBtc2cgPSB3a0dldENGVVJMUmVzcG9uc2VIVFRQUmVzcG9uc2UoY2ZSZXNw
b25zZSk7CkBAIC0xODMsMTkgKzI2MCw3MiBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwbwogICAg
IGlmIChzdGF0dXNDb2RlICE9IDMwNCkKICAgICAgICAgYWRqdXN0TUlNRVR5cGVJZk5lY2Vzc2Fy
eShjZlJlc3BvbnNlKTsKIAotICAgIGlmIChfQ0ZVUkxSZXF1ZXN0Q29weVByb3RvY29sUHJvcGVy
dHlGb3JLZXkoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5jZlVSTFJlcXVlc3QoRG9Ob3RVcGRhdGVI
VFRQQm9keSksIENGU1RSKCJGb3JjZUhUTUxNSU1FVHlwZSIpKSkKKyNpZiAhUExBVEZPUk0oSU9T
KQorICAgIGlmIChfQ0ZVUkxSZXF1ZXN0Q29weVByb3RvY29sUHJvcGVydHlGb3JLZXkoaGFuZGxl
LmZpcnN0UmVxdWVzdCgpLmNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIo
IkZvcmNlSFRNTE1JTUVUeXBlIikpKQogICAgICAgICB3a1NldENGVVJMUmVzcG9uc2VNSU1FVHlw
ZShjZlJlc3BvbnNlLCBDRlNUUigidGV4dC9odG1sIikpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorI2Vsc2UKICAgICBpZiAoIUNG
VVJMUmVzcG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNlKSkgewogICAgICAgICAvLyBXZSBzaG91
bGQgbmV2ZXIgYmUgYXBwbHlpbmcgdGhlIGRlZmF1bHQgTUlNRVR5cGUgaWYgd2UgdG9sZCB0aGUg
bmV0d29ya2luZyBsYXllciB0byBkbyBjb250ZW50IHNuaWZmaW5nIGZvciBoYW5kbGUuCi0gICAg
ICAgIEFTU0VSVCghaGFuZGxlLT5zaG91bGRDb250ZW50U25pZmYoKSk7CisgICAgICAgIEFTU0VS
VCghaGFuZGxlLnNob3VsZENvbnRlbnRTbmlmZigpKTsKICAgICAgICAgc2V0RGVmYXVsdE1JTUVU
eXBlKGNmUmVzcG9uc2UpOwogICAgIH0KICNlbmRpZgotICAgIAorfQorCitzdGF0aWMgQ0ZVUkxS
ZXNwb25zZVJlZiB1c2VRdWlja0xvb2tSZXNwb25zZUlmTmVjZXNzYXJ5KFJlc291cmNlSGFuZGxl
JiBoYW5kbGUsIENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVz
cG9uc2UpCit7CisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgaGFuZGxlLnNldFF1aWNrTG9va0hh
bmRsZShRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZSgmaGFuZGxlLCBjb25uLCBjZlJlc3BvbnNlKSk7
CisgICAgaWYgKGhhbmRsZS5xdWlja0xvb2tIYW5kbGUoKSkKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZS5xdWlja0xvb2tIYW5kbGUoKS0+Y2ZSZXNwb25zZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKQorI2VuZGlmCisgICAgcmV0dXJuIGNmUmVzcG9uc2U7Cit9CisKK3N0YXRpYyB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXNw
b25zZVJlZiBjZlJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworI2lmIExPR19E
SVNBQkxFRCAmJiAhVVNFKFFVSUNLX0xPT0spCisgICAgVU5VU0VEX1BBUkFNKGNvbm4pOworI2Vu
ZGlmCisgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFu
ZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworCisgICAgTE9HKE5ldHdvcmss
ICJDRk5ldCAtIGRpZFJlY2VpdmVSZXNwb25zZShjb25uPSVwLCBoYW5kbGU9JXApICglcykiLCBj
b25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisKKyAgICBpZiAoIWhhbmRsZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGFkanVzdFJlc3BvbnNlTWltZVR5cGVJZk5lY2Vzc2FyeSgqaGFuZGxlLCBjZlJlc3Bv
bnNlKTsKKyAgICBjZlJlc3BvbnNlID0gdXNlUXVpY2tMb29rUmVzcG9uc2VJZk5lY2Vzc2FyeSgq
aGFuZGxlLCBjb25uLCBjZlJlc3BvbnNlKTsKKwogICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZFJl
Y2VpdmVSZXNwb25zZShoYW5kbGUsIGNmUmVzcG9uc2UpOwogfQogCitzdGF0aWMgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2VBc3luYyhDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXNwb25z
ZVJlZiBjZlJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25z
dF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQg
LSBkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhjb25uPSVwLCBoYW5kbGU9JXApICglcykiLCBjb25u
LCBoYW5kbGUuZ2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeeworICAgICAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUpKSB7Cisg
ICAgICAgICAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KS0+bV9zZW1hcGhvcmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQ0ZVUkxSZXNwb25zZVJlZiBsb2NhbFJlc3BvbnNlID0gY2ZSZXNwb25zZTsKKyAgICAgICAg
YWRqdXN0UmVzcG9uc2VNaW1lVHlwZUlmTmVjZXNzYXJ5KCpoYW5kbGUsIGxvY2FsUmVzcG9uc2Up
OworICAgICAgICBsb2NhbFJlc3BvbnNlID0gdXNlUXVpY2tMb29rUmVzcG9uc2VJZk5lY2Vzc2Fy
eSgqaGFuZGxlLCBjb25uLCBsb2NhbFJlc3BvbnNlKTsKKyAgICAgICAgaGFuZGxlLT5jbGllbnQo
KS0+ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoaGFuZGxlLmdldCgpLCBsb2NhbFJlc3BvbnNlKTsK
KyAgICB9KTsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGhhbmRsZUludGVybmFsID0g
aGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KGhhbmRs
ZUludGVybmFsLT5tX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKK30KKwogI2lm
IFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIHN0YXRpYyB2b2lkIGRpZFJlY2Vp
dmVEYXRhQXJyYXkoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGQXJyYXlSZWYgZGF0YUFycmF5
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewpAQCAtMjA4LDggKzMzOCwyNyBAQCBzdGF0aWMg
dm9pZCBkaWRSZWNlaXZlRGF0YUFycmF5KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkFycmF5
UmVmIGRhdGFBcnJheSwgYwogCiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVE
YXRhQXJyYXkoY29ubj0lcCwgaGFuZGxlPSVwLCBhcnJheUxlbmd0aD0lbGQpICglcykiLCBjb25u
LCBoYW5kbGUsIENGQXJyYXlHZXRDb3VudChkYXRhQXJyYXkpLCBoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCisjaWYgVVNFKFFVSUNLX0xPT0sp
CisgICAgaWYgKGhhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkgJiYgaGFuZGxlLT5xdWlja0xvb2tI
YW5kbGUoKS0+ZGlkUmVjZWl2ZURhdGFBcnJheShkYXRhQXJyYXkpKQorICAgICAgICByZXR1cm47
CisjZW5kaWYKKwogICAgIGhhbmRsZS0+aGFuZGxlRGF0YUFycmF5KGRhdGFBcnJheSk7CiB9CisK
K3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXlBc3luYyhDRlVSTENvbm5lY3Rpb25SZWYg
Y29ubiwgQ0ZBcnJheVJlZiBkYXRhQXJyYXksIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBDRlJldGFpbihjb25u
KTsKKyAgICBDRlJldGFpbihkYXRhQXJyYXkpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2FuY2Vs
bGVkKGhhbmRsZSkpCisgICAgICAgICAgICBkaWRSZWNlaXZlRGF0YUFycmF5KGNvbm4sIGRhdGFB
cnJheSwgaGFuZGxlLmdldCgpKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGRhdGFBcnJheSk7CisgICAg
ICAgIENGUmVsZWFzZShjb25uKTsKKyAgICB9KTsKK30KICNlbmRpZgogCiBzdGF0aWMgdm9pZCBk
aWRSZWNlaXZlRGF0YShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZEYXRhUmVmIGRhdGEsIENG
SW5kZXggb3JpZ2luYWxMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0yMjMsMTAg
KzM3MiwyOSBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShDRlVSTENvbm5lY3Rpb25SZWYg
Y29ubiwgQ0ZEYXRhUmVmIGRhdGEsIENGSW5kZXggb3JpZwogICAgIExPRyhOZXR3b3JrLCAiQ0ZO
ZXQgLSBkaWRSZWNlaXZlRGF0YShjb25uPSVwLCBoYW5kbGU9JXAsIGJ5dGVzPSVsZCkgKCVzKSIs
IGNvbm4sIGhhbmRsZSwgbGVuZ3RoLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBp
ZiAoaGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSAmJiBoYW5kbGUtPnF1aWNrTG9va0hhbmRsZSgp
LT5kaWRSZWNlaXZlRGF0YShkYXRhKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBp
ZiAoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCkpCiAgICAg
ICAgIGNsaWVudC0+ZGlkUmVjZWl2ZUJ1ZmZlcihoYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6d3JhcENG
RGF0YShkYXRhKSwgb3JpZ2luYWxMZW5ndGgpOwogfQogCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
RGF0YUFzeW5jKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkRhdGFSZWYgZGF0YSwgQ0ZJbmRl
eCBvcmlnaW5hbExlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29u
c3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIENGUmV0YWluKGNvbm4pOworICAgIENG
UmV0YWluKGRhdGEpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgXnsKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKGhhbmRsZSkpCisg
ICAgICAgICAgICBkaWRSZWNlaXZlRGF0YShjb25uLCBkYXRhLCBvcmlnaW5hbExlbmd0aCwgaGFu
ZGxlLmdldCgpKTsKKyAgICAgICAgQ0ZSZXRhaW4oZGF0YSk7CisgICAgICAgIENGUmVsZWFzZShj
b25uKTsKKyAgICB9KTsKK30KKwogc3RhdGljIHZvaWQgZGlkU2VuZEJvZHlEYXRhKENGVVJMQ29u
bmVjdGlvblJlZiwgQ0ZJbmRleCwgQ0ZJbmRleCB0b3RhbEJ5dGVzV3JpdHRlbiwgQ0ZJbmRleCB0
b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQogewogICAg
IFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNv
bnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKQEAgLTIzNSw2ICs0MDMsMTggQEAgc3RhdGlj
IHZvaWQgZGlkU2VuZEJvZHlEYXRhKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZJbmRleCwgQ0ZJbmRl
eCB0b3RhbEJ5dGVzV3JpdHQKICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRTZW5kRGF0YShoYW5k
bGUsIHRvdGFsQnl0ZXNXcml0dGVuLCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlKTsKIH0KIAor
c3RhdGljIHZvaWQgZGlkU2VuZEJvZHlEYXRhQXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4s
IENGSW5kZXggYnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBDRkluZGV4
IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7Cisg
ICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBDRlJldGFpbihjb25u
KTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Cisg
ICAgICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUpKQorICAgICAgICAgICAg
ZGlkU2VuZEJvZHlEYXRhKGNvbm4sIGJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc1dyaXR0ZW4sIHRv
dGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIGhhbmRsZS5nZXQoKSk7CisgICAgICAgIENGUmVsZWFz
ZShjb25uKTsKKyAgICB9KTsKK30KKwogc3RhdGljIEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2VDYWxsYmFjayhDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKIHsKICNpZiBMT0dfRElTQUJMRUQKQEAgLTI1MCw2ICs0MzAsMjkgQEAgc3RhdGlj
IEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2VDYWxsYmFjayhDRlVSTENvbm5lY3Rp
b25SZWYgY29ubiwgY29uc3QKICAgICByZXR1cm4gaGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSgpOwogfQogCitzdGF0aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZUFzeW5jKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3Vy
Y2VIYW5kbGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisKKyAgICBMT0coTmV0
d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoY29ubj0lcCwgaGFuZGxl
PSVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLmdldCgpLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxs
ZWQoaGFuZGxlKSkgeworICAgICAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChoYW5k
bGUtPmdldEludGVybmFsKCktPm1fc2VtYXBob3JlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBoYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7Cisg
ICAgfSk7CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBoYW5kbGVJbnRlcm5hbCA9IGhh
bmRsZS0+Z2V0SW50ZXJuYWwoKTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChoYW5kbGVJ
bnRlcm5hbC0+bV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CisKKyAgICBpZiAo
Y29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gaGFuZGxlSW50ZXJuYWwtPm1fYm9vbFJlc3VsdDsKK30KKwogc3RhdGljIHZv
aWQgZGlkRmluaXNoTG9hZGluZyhDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKIHsKICNpZiBMT0dfRElTQUJMRUQKQEAgLTI1OSwxMCArNDYyLDMwIEBAIHN0
YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiAKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkRmluaXNo
TG9hZGluZyhjb25uPSVwLCBoYW5kbGU9JXApICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+
Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgcmVwb3J0TmV0d29ya0RhdGFVc2FnZShoYW5kbGUtPmNvbnRleHQoKSwg
Y29ubik7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCisjaWYgVVNFKFFVSUNLX0xPT0spCisg
ICAgaWYgKGhhbmRsZS0+cXVpY2tMb29rSGFuZGxlKCkgJiYgaGFuZGxlLT5xdWlja0xvb2tIYW5k
bGUoKS0+ZGlkRmluaXNoTG9hZGluZygpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAg
IGlmIChoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5p
c2hMb2FkaW5nKGhhbmRsZSwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmdB
c3luYyhDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNl
SGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIENGUmV0YWluKGNv
bm4pOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Cisg
ICAgICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUpKQorICAgICAgICAgICAg
ZGlkRmluaXNoTG9hZGluZyhjb25uLCBoYW5kbGUuZ2V0KCkpOworICAgICAgICBDRlJlbGVhc2Uo
Y29ubik7CisgICAgfSk7Cit9CisKIHN0YXRpYyB2b2lkIGRpZEZhaWwoQ0ZVUkxDb25uZWN0aW9u
UmVmIGNvbm4sIENGRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAj
aWYgTE9HX0RJU0FCTEVECkBAIC0yNzIsMjMgKzQ5NSwzNSBAQCBzdGF0aWMgdm9pZCBkaWRGYWls
KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkVycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBj
bGllbgogCiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZEZhaWwoY29ubj0lcCwgaGFuZGxl
PSVwLCBlcnJvciA9ICVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBlcnJvciwgaGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAorI2lmIFBMQVRGT1JN
KElPUykKKyAgICByZXBvcnROZXR3b3JrRGF0YVVzYWdlKGhhbmRsZS0+Y29udGV4dCgpLCBjb25u
KTsKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBp
ZiAoaGFuZGxlLT5xdWlja0xvb2tIYW5kbGUoKSkKKyAgICAgICAgaGFuZGxlLT5xdWlja0xvb2tI
YW5kbGUoKS0+ZGlkRmFpbCgpOworI2VuZGlmCisKICAgICBpZiAoaGFuZGxlLT5jbGllbnQoKSkK
ICAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChoYW5kbGUsIFJlc291cmNlRXJyb3Io
ZXJyb3IpKTsKIH0KIAorc3RhdGljIHZvaWQgZGlkRmFpbEFzeW5jKENGVVJMQ29ubmVjdGlvblJl
ZiBjb25uLCBDRkVycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5k
bGUqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQ0ZSZXRhaW4oY29ubik7
CisgICAgQ0ZSZXRhaW4oZXJyb3IpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5k
bGUpKQorICAgICAgICAgICAgZGlkRmFpbChjb25uLCBlcnJvciwgaGFuZGxlLmdldCgpKTsKKyAg
ICAgICAgQ0ZSZWxlYXNlKGVycm9yKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGNvbm4pOworICAgIH0p
OworfQorCiBzdGF0aWMgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiB3aWxsQ2FjaGVSZXNwb25zZShD
RlVSTENvbm5lY3Rpb25SZWYsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2Us
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5m
bykpOwotICAgIENGVVJMUmVzcG9uc2VSZWYgd3JhcHBlZFJlc3BvbnNlID0gQ0ZDYWNoZWRVUkxS
ZXNwb25zZUdldFdyYXBwZWRSZXNwb25zZShjYWNoZWRSZXNwb25zZSk7Ci0KLSAgICAvLyBXb3Jr
YXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNjMwMDk5MD4gQ2FjaGluZyBkb2VzIG5vdCByZXNw
ZWN0IFZhcnkgSFRUUCBoZWFkZXIuCi0gICAgLy8gRklYTUU6IFdlYkNvcmUgY2FjaGUgaGFzIGlz
c3VlcyB3aXRoIFZhcnksIHRvbyAoYnVnIDU4Nzk3LCBidWcgNzE1MDkpLgotICAgIGlmIChDRkhU
VFBNZXNzYWdlUmVmIGh0dHBSZXNwb25zZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2Uo
d3JhcHBlZFJlc3BvbnNlKSkgewotICAgICAgICBBU1NFUlQoQ0ZIVFRQTWVzc2FnZUlzSGVhZGVy
Q29tcGxldGUoaHR0cFJlc3BvbnNlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
dmFyeVZhbHVlID0gYWRvcHRDRihDRkhUVFBNZXNzYWdlQ29weUhlYWRlckZpZWxkVmFsdWUoaHR0
cFJlc3BvbnNlLCBDRlNUUigiVmFyeSIpKSk7Ci0gICAgICAgIGlmICh2YXJ5VmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgaWYgKGhh
bmRsZS0+Y2xpZW50KCkgJiYgIWhhbmRsZS0+Y2xpZW50KCktPnNob3VsZENhY2hlUmVzcG9uc2Uo
aGFuZGxlLCBjYWNoZWRSZXNwb25zZSkpCkBAIC0zMDQsNiArNTM5LDI3IEBAIHN0YXRpYyBDRkNh
Y2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiwg
Q0ZDYWNoZWRVUkxSCiAgICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlOwogfQogCitzdGF0aWMgQ0ZD
YWNoZWRVUkxSZXNwb25zZVJlZiB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKENGVVJMQ29ubmVjdGlv
blJlZiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjYWNoZWRSZXNwb25zZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRp
Y19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwor
CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAg
ICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoaGFuZGxlKSkgeworICAgICAgICAgICAgZGlz
cGF0Y2hfc2VtYXBob3JlX3NpZ25hbChoYW5kbGUtPmdldEludGVybmFsKCktPm1fc2VtYXBob3Jl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGUtPmNsaWVu
dCgpLT53aWxsQ2FjaGVSZXNwb25zZUFzeW5jKGhhbmRsZS5nZXQoKSwgY2FjaGVkUmVzcG9uc2Up
OworICAgIH0pOworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogaGFuZGxlSW50ZXJuYWwg
PSBoYW5kbGUtPmdldEludGVybmFsKCk7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQoaGFu
ZGxlSW50ZXJuYWwtPm1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworCisgICAg
aWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gaGFuZGxlSW50ZXJuYWwtPm1fY2FjaGVkUmVzcG9uc2VSZXN1bHQubGVha1Jl
ZigpOworfQorCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlv
blJlZiBjb25uLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdlLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewogI2lmIExPR19ESVNBQkxFRApAQCAtMzE2LDYgKzU3MiwxOSBAQCBzdGF0
aWMgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVS
TEF1dGhDaGFsbGVuZ2VSZWYgYwogICAgIGhhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSwgaGFuZGxlKSk7CiB9
CiAKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2VBc3luYyhDRlVSTENvbm5lY3Rpb25S
ZWYgY29ubiwgQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19j
YXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAg
IENGUmV0YWluKGNvbm4pOworICAgIENGUmV0YWluKGNoYWxsZW5nZSk7CisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFjb25uZWN0
aW9uV2FzQ2FuY2VsbGVkKGhhbmRsZSkpCisgICAgICAgICAgICBkaWRSZWNlaXZlQ2hhbGxlbmdl
KGNvbm4sIGNoYWxsZW5nZSwgaGFuZGxlLmdldCgpKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGNoYWxs
ZW5nZSk7CisgICAgICAgIENGUmVsZWFzZShjb25uKTsKKyAgICB9KTsKK30KKwogI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiBzdGF0aWMgQm9vbGVhbiBjYW5SZXNwb25k
VG9Qcm90ZWN0aW9uU3BhY2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUHJvdGVjdGlv
blNwYWNlUmVmIHByb3RlY3Rpb25TcGFjZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKQEAg
LTMyNyw4ICs1OTYsNDQgQEAgc3RhdGljIEJvb2xlYW4gY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNw
YWNlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTFByb3RlY3QKIAogICAgIExPRyhOZXR3
b3JrLCAiQ0ZOZXQgLSBjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoY29ubj0lcCwgaGFuZGxl
PSVwICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgUHJvdGVjdGlv
blNwYWNlIGNvcmVQcm90ZWN0aW9uU3BhY2UgPSBjb3JlKHByb3RlY3Rpb25TcGFjZSk7CisgICAg
aWYgKGNvcmVQcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gaGFuZGxlLT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKGNvcmVQcm90ZWN0aW9uU3BhY2UpOworI2Vsc2UKICAgICByZXR1cm4gaGFuZGxlLT5jYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvcmUocHJvdGVjdGlvblNwYWNlKSk7
CisjZW5kaWYKK30KKworc3RhdGljIEJvb2xlYW4gY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNl
QXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUHJvdGVjdGlvblNwYWNlUmVmIHBy
b3RlY3Rpb25TcGFjZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3Rf
Y2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBjYW5S
ZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2VBc3luYyhjb25uPSVwLCBoYW5kbGU9JXAgKCVzKSIsIGNv
bm4sIGhhbmRsZS5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKGhhbmRsZSkpIHsK
KyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwoaGFuZGxlLT5nZXRJbnRlcm5h
bCgpLT5tX3NlbWFwaG9yZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBQcm90ZWN0aW9uU3BhY2UgY29yZVByb3RlY3Rpb25TcGFjZSA9IGNvcmUocHJvdGVjdGlv
blNwYWNlKTsKKyAgICAgICAgaWYgKGNvcmVQcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25T
Y2hlbWUoKSA9PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pIHsK
KyAgICAgICAgICAgIGhhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBoYW5kbGUtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29yZVByb3Rl
Y3Rpb25TcGFjZSk7CisgICAgfSk7CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBoYW5k
bGVJbnRlcm5hbCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKyAgICBkaXNwYXRjaF9zZW1hcGhv
cmVfd2FpdChoYW5kbGVJbnRlcm5hbC0+bV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZF
Uik7CisKKyAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChoYW5kbGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaGFuZGxlSW50ZXJuYWwtPm1fYm9vbFJlc3VsdDsK
IH0KKwogI2VuZGlmCiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUlu
dGVybmFsKCkKQEAgLTMzNiw3ICs2NDEsMTQgQEAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJl
c291cmNlSGFuZGxlSW50ZXJuYWwoKQogICAgIGlmIChtX2Nvbm5lY3Rpb24pIHsKICAgICAgICAg
TE9HKE5ldHdvcmssICJDRk5ldCAtIENhbmNlbGxpbmcgY29ubmVjdGlvbiAlcCAoJXMpIiwgbV9j
b25uZWN0aW9uLmdldCgpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKICAgICAgICAgQ0ZVUkxDb25uZWN0aW9uQ2FuY2VsKG1fY29ubmVjdGlvbi5nZXQoKSk7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICByZXBvcnROZXR3b3JrRGF0YVVzYWdlKG1fY29u
dGV4dC5nZXQoKSwgbV9jb25uZWN0aW9uLmdldCgpKTsKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CiAgICAgfQorICAgIGlmIChtX3NlbWFwaG9yZSkKKyAgICAgICAgZGlzcGF0Y2hfcmVsZWFzZSht
X3NlbWFwaG9yZSk7CisgICAgaWYgKG1fYXN5bmNRdWV1ZSkKKyAgICAgICAgZGlzcGF0Y2hfcmVs
ZWFzZShtX2FzeW5jUXVldWUpOwogfQogCiBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxl
KCkKQEAgLTM0NCw3ICs2NTYsMTEgQEAgUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgp
CiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIERlc3Ryb3lpbmcgam9iICVwICglcykiLCB0aGlz
LCBkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAor
I2lmICFQTEFURk9STShJT1MpCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5l
Y3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRDb250ZW50
U25pZmYpCisjZWxzZQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9u
KGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZm
LCBDRkRpY3Rpb25hcnlSZWYgY2xpZW50UHJvcGVydGllcykKKyNlbmRpZgogewogICAgIGlmICgo
IWQtPm1fdXNlci5pc0VtcHR5KCkgfHwgIWQtPm1fcGFzcy5pc0VtcHR5KCkpICYmICFmaXJzdFJl
cXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKICAgICAgICAgLy8gQ3Jl
ZGVudGlhbHMgZm9yIGZ0cCBjYW4gb25seSBiZSBwYXNzZWQgaW4gVVJMLCB0aGUgZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGRlbGVnYXRlIGNhbGwgd29uJ3QgYmUgbWFkZS4KQEAg
LTM4Miw2ICs2OTgsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rp
b24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogCiAgICAgUmV0YWluUHRy
PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHNzbFByb3BzOwogCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIHNzbFByb3BzID0gYWRvcHRDRihSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlU1NMUHJvcGVydGll
c0Zyb21OU1VSTFJlcXVlc3QoZmlyc3RSZXF1ZXN0KCkpKTsKKyNlbHNlCiAgICAgaWYgKGFsbG93
c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKGZpcnN0UmVxdWVzdCgpLnVybCgp
Lmhvc3QoKS5sb3dlcigpKSkgewogICAgICAgICBzc2xQcm9wcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAg
ICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxv
d3NBbnlSb290LCBrQ0ZCb29sZWFuVHJ1ZSk7CkBAIC0zOTgsNiArNzE3LDcgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UsIGJvb2wKICAgICAgICAgd2tTZXRDbGllbnRDZXJ0aWZpY2F0ZUluU1NMUHJvcGVy
dGllcyhzc2xQcm9wcy5nZXQoKSwgKGNsaWVudENlcnQtPnZhbHVlKS5nZXQoKSk7CiAjZW5kaWYK
ICAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCiAgICAgaWYgKHNzbFByb3BzKQogICAg
ICAgICBDRlVSTFJlcXVlc3RTZXRTU0xQcm9wZXJ0aWVzKHJlcXVlc3QuZ2V0KCksIHNzbFByb3Bz
LmdldCgpKTsKQEAgLTQwOSw3ICs3MjksNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVD
RlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAg
IH0KICNlbmRpZgogCi0gICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IGNsaWVudCA9IHsgNiwg
dGhpcywgMCwgMCwgMCwgV2ViQ29yZTo6d2lsbFNlbmRSZXF1ZXN0LCBkaWRSZWNlaXZlUmVzcG9u
c2UsIGRpZFJlY2VpdmVEYXRhLCAwLCBkaWRGaW5pc2hMb2FkaW5nLCBkaWRGYWlsLCB3aWxsQ2Fj
aGVSZXNwb25zZSwgZGlkUmVjZWl2ZUNoYWxsZW5nZSwgZGlkU2VuZEJvZHlEYXRhLCBzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrLCAwLAorICAgIENGVVJMQ29ubmVjdGlvbkNsaWVu
dF9WNiBjb25uZWN0aW9uQ2xpZW50ID0geyA2LCB0aGlzLCAwLCAwLCAwLCBXZWJDb3JlOjp3aWxs
U2VuZFJlcXVlc3QsIGRpZFJlY2VpdmVSZXNwb25zZSwgZGlkUmVjZWl2ZURhdGEsIDAsIGRpZEZp
bmlzaExvYWRpbmcsIGRpZEZhaWwsIHdpbGxDYWNoZVJlc3BvbnNlLCBkaWRSZWNlaXZlQ2hhbGxl
bmdlLCBkaWRTZW5kQm9keURhdGEsIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlQ2FsbGJhY2ss
IDAsCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICAgICAgY2Fu
UmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlLAogI2Vsc2UKQEAgLTQyMyw2ICs3NDMsMjQgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UsIGJvb2wKICNlbmRpZgogICAgIH07CiAKKyAgICBpZiAoY2xpZW50KCkg
JiYgY2xpZW50KCktPnVzZXNBc3luY0NhbGxiYWNrcygpKSB7CisgICAgICAgIGNvbm5lY3Rpb25D
bGllbnQud2lsbFNlbmRSZXF1ZXN0ID0gd2lsbFNlbmRSZXF1ZXN0QXN5bmM7CisgICAgICAgIGNv
bm5lY3Rpb25DbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlID0gZGlkUmVjZWl2ZVJlc3BvbnNlQXN5
bmM7CisgICAgICAgIGNvbm5lY3Rpb25DbGllbnQuZGlkUmVjZWl2ZURhdGEgPSBkaWRSZWNlaXZl
RGF0YUFzeW5jOworICAgICAgICBjb25uZWN0aW9uQ2xpZW50LmRpZEZpbmlzaExvYWRpbmcgPSBk
aWRGaW5pc2hMb2FkaW5nQXN5bmM7CisgICAgICAgIGNvbm5lY3Rpb25DbGllbnQuZGlkRmFpbCA9
IGRpZEZhaWxBc3luYzsKKyAgICAgICAgY29ubmVjdGlvbkNsaWVudC53aWxsQ2FjaGVSZXNwb25z
ZSA9IHdpbGxDYWNoZVJlc3BvbnNlQXN5bmM7CisgICAgICAgIGNvbm5lY3Rpb25DbGllbnQuZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gZGlkUmVjZWl2ZUNoYWxsZW5nZUFzeW5j
OworICAgICAgICBjb25uZWN0aW9uQ2xpZW50LmRpZFNlbmRCb2R5RGF0YSA9IGRpZFNlbmRCb2R5
RGF0YUFzeW5jOworICAgICAgICBjb25uZWN0aW9uQ2xpZW50LnNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2VBc3luYzsKKyNpZiBVU0UoUFJPVEVD
VElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgICAgICBjb25uZWN0aW9uQ2xpZW50LmNhblJl
c3BvbmRUb1Byb3RlY3Rpb25TcGFjZSA9IGNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZUFzeW5j
OworI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisjaWYgVVNF
KE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQorICAgICAgICBjb25uZWN0aW9uQ2xpZW50
LmRpZFJlY2VpdmVEYXRhQXJyYXkgPSBkaWRSZWNlaXZlRGF0YUFycmF5QXN5bmM7CisjZW5kaWYK
KyAgICB9CisKICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHN0cmVhbVByb3BlcnRpZXMgID0g
Q0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKICAgICBpZiAoIXNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQogICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShzdHJl
YW1Qcm9wZXJ0aWVzLCBDRlNUUigiX2tDRlVSTENvbm5lY3Rpb25TZXNzaW9uSUQiKSwgQ0ZTVFIo
IldlYktpdFByaXZhdGVTZXNzaW9uIikpOwpAQCAtNDM0LDEwICs3NzIsMjYgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UsIGJvb2wKICNlbmRpZgogCiAgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtD
RlVSTENvbm5lY3Rpb25Tb2NrZXRTdHJlYW1Qcm9wZXJ0aWVzID0gQ0ZTVFIoImtDRlVSTENvbm5l
Y3Rpb25Tb2NrZXRTdHJlYW1Qcm9wZXJ0aWVzIik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJl
dGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzRGljdGlvbmFyeTsKKyAg
ICBpZiAoY2xpZW50UHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydGllc0RpY3Rpb25hcnkgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQs
IDAsIGNsaWVudFByb3BlcnRpZXMpKTsKKyAgICBlbHNlCisgICAgICAgIHByb3BlcnRpZXNEaWN0
aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShwcm9wZXJ0aWVz
RGljdGlvbmFyeS5nZXQoKSwga0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMs
IHN0cmVhbVByb3BlcnRpZXMpOworCisgICAgaWYgKFNldHRpbmdzOjpuZXR3b3JrRGF0YVVzYWdl
VHJhY2tpbmdFbmFibGVkKCkgJiYgIUNGRGljdGlvbmFyeUNvbnRhaW5zS2V5KHByb3BlcnRpZXNE
aWN0aW9uYXJ5LmdldCgpLCBfa0NGVVJMQ29ubmVjdGlvblByb3BlcnR5UmF3Qnl0ZXMpKQorICAg
ICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShwcm9wZXJ0aWVzRGljdGlvbmFyeS5nZXQoKSwgX2tD
RlVSTENvbm5lY3Rpb25Qcm9wZXJ0eVJhd0J5dGVzLCBrQ0ZCb29sZWFuVHJ1ZSk7CisjZWxzZQog
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXNEaWN0aW9uYXJ5ID0gYWRv
cHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgKGNvbnN0IHZvaWQqKikma0NGVVJMQ29ubmVjdGlv
blNvY2tldFN0cmVhbVByb3BlcnRpZXMsIChjb25zdCB2b2lkKiopJnN0cmVhbVByb3BlcnRpZXMs
IDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKKyNlbmRpZgogICAgIENGUmVsZWFzZShzdHJlYW1Qcm9wZXJ0aWVzKTsK
IAotICAgIGQtPm1fY29ubmVjdGlvbiA9IGFkb3B0Q0YoQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0
aFByb3BlcnRpZXMoMCwgcmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5l
Y3Rpb25DbGllbnQqPigmY2xpZW50KSwgcHJvcGVydGllc0RpY3Rpb25hcnkuZ2V0KCkpKTsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnVzZXNBc3lu
Y0NhbGxiYWNrcygpKQorICAgICAgICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5bmNocm9u
b3VzbHkocmVxdWVzdC5nZXQoKSwgMSk7CisjZW5kaWYKKyAgICBkLT5tX2Nvbm5lY3Rpb24gPSBh
ZG9wdENGKENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzKDAsIHJlcXVlc3QuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZVUkxDb25uZWN0aW9uQ2xpZW50Kj4oJmNvbm5lY3Rpb25D
bGllbnQpLCBwcm9wZXJ0aWVzRGljdGlvbmFyeS5nZXQoKSkpOwogfQogCiBib29sIFJlc291cmNl
SGFuZGxlOjpzdGFydCgpCkBAIC00NTQsMTMgKzgwOCwyOSBAQCBib29sIFJlc291cmNlSGFuZGxl
OjpzdGFydCgpCiAKICAgICBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID0gIWNsaWVu
dCgpIHx8IGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKIAorI2lm
ICFQTEFURk9STShJT1MpCiAgICAgY3JlYXRlQ0ZVUkxDb25uZWN0aW9uKHNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlLCBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZik7CisjZWxzZQorICAgIGNyZWF0
ZUNGVVJMQ29ubmVjdGlvbihzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgZC0+bV9zaG91bGRD
b250ZW50U25pZmYsIGNsaWVudCgpLT5jb25uZWN0aW9uUHJvcGVydGllcyh0aGlzKS5nZXQoKSk7
CisjZW5kaWYKIAorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+dXNlc0FzeW5jQ2FsbGJh
Y2tzKCkpIHsKKyAgICAgICAgZC0+bV9zZW1hcGhvcmUgPSBkaXNwYXRjaF9zZW1hcGhvcmVfY3Jl
YXRlKDApOworCisgICAgICAgIGQtPm1fYXN5bmNRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0
ZSgiY29tLmFwcGxlLldlYkNvcmUvQ0ZOZXR3b3JrIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsK
KyAgICAgICAgZGlzcGF0Y2hfcXVldWVfdCBiYWNrZ3JvdW5kUXVldWUgPSBkaXNwYXRjaF9nZXRf
Z2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0hJR0gsIDApOworICAgICAgICBk
aXNwYXRjaF9zZXRfdGFyZ2V0X3F1ZXVlKGQtPm1fYXN5bmNRdWV1ZSwgYmFja2dyb3VuZFF1ZXVl
KTsKKworICAgICAgICBDRlVSTENvbm5lY3Rpb25TZXREZWxlZ2F0ZURpc3BhdGNoUXVldWUoZC0+
bV9jb25uZWN0aW9uLmdldCgpLCBkLT5tX2FzeW5jUXVldWUpOworICAgIH0gZWxzZSB7CiAjaWYg
UExBVEZPUk0oV0lOKQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aEN1cnJlbnRNZXNz
YWdlUXVldWUoZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKKyAgICAgICAgQ0ZVUkxDb25uZWN0aW9u
U2NoZWR1bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwor
I2VsaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhS
dW5Mb29wKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgV2ViVGhyZWFkUnVuTG9vcCgpLCBrQ0ZSdW5M
b29wRGVmYXVsdE1vZGUpOwogI2Vsc2UKLSAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhS
dW5Mb29wKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZS
dW5Mb29wRGVmYXVsdE1vZGUpOworICAgICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhS
dW5Mb29wKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZS
dW5Mb29wRGVmYXVsdE1vZGUpOwogI2VuZGlmCisgICAgfQogICAgIENGVVJMQ29ubmVjdGlvblNj
aGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIGxvYWRlclJ1
bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKICAgICBDRlVSTENvbm5lY3Rpb25TdGFy
dChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwogCkBAIC00NzMsNiArODQzLDkgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6Y2FuY2VsKCkKIHsKICAgICBpZiAoZC0+bV9jb25uZWN0aW9uKSB7CiAgICAg
ICAgIENGVVJMQ29ubmVjdGlvbkNhbmNlbChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgcmVwb3J0TmV0d29ya0RhdGFVc2FnZShjb250ZXh0KCksIGQt
Pm1fY29ubmVjdGlvbi5nZXQoKSk7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogICAgICAgICBk
LT5tX2Nvbm5lY3Rpb24gPSAwOwogICAgIH0KIH0KQEAgLTUwNywxNiArODgwLDIyIEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzCiAgICAgY2xpZW50KCktPndpbGxTZW5kUmVxdWVzdCh0aGlzLCBy
ZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIAogICAgIC8vIENsaWVudCBjYWxsIG1heSBub3Qg
cHJlc2VydmUgdGhlIHNlc3Npb24sIGVzcGVjaWFsbHkgaWYgdGhlIHJlcXVlc3QgaXMgc2VudCBv
dmVyIElQQy4KLSAgICBpZiAoIXJlcXVlc3QuaXNOdWxsKCkpCisgICAgaWYgKCFyZXF1ZXN0Lmlz
TnVsbCgpKSB7CiAgICAgICAgIHJlcXVlc3Quc2V0U3RvcmFnZVNlc3Npb24oZC0+bV9zdG9yYWdl
U2Vzc2lvbi5nZXQoKSk7CisKKyAgICAgICAgZC0+bV9jdXJyZW50UmVxdWVzdCA9IHJlcXVlc3Q7
CisgICAgfQogfQogCiBib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKCkiKTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UodGhpcyk7Ci0KKyAgICBpZiAoUmVzb3VyY2VIYW5k
bGVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNsaWVudCgpKSB7CisgICAgICAgIGlmIChjbGllbnQt
PnVzZXNBc3luY0NhbGxiYWNrcygpKQorICAgICAgICAgICAgY2xpZW50LT5zaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZUFzeW5jKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gY2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKKyAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCkBAIC01ODYsOSArOTY1LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIGJvb2wgUmVz
b3VyY2VIYW5kbGU6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29uc3Qg
UHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7Ci0gICAgaWYgKGNsaWVudCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50KCktPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2UodGhpcywgcHJvdGVjdGlvblNwYWNlKTsKLQorICAgIGlmIChSZXNvdXJjZUhhbmRsZUNs
aWVudCogY2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpIHsKKyAgICAgICAgaWYgKGNsaWVudC0+dXNl
c0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgICAgICBjbGllbnQtPmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gY2xpZW50LT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7CisgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KICNlbmRpZgpAQCAtNjkyLDcgKzEwNzQsMTEgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmICFQTEFURk9STShJT1MpCiAg
ICAgaGFuZGxlLT5jcmVhdGVDRlVSTENvbm5lY3Rpb24oc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxs
b3dTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlmZlVS
TChyZXF1ZXN0LnVybCgpKSk7CisjZWxzZQorICAgIGhhbmRsZS0+Y3JlYXRlQ0ZVUkxDb25uZWN0
aW9uKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNl
SGFuZGxlOjpzaG91bGRDb250ZW50U25pZmZVUkwocmVxdWVzdC51cmwoKSksIGhhbmRsZS0+Y2xp
ZW50KCktPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKGhhbmRsZS5nZXQoKSkuZ2V0KCkpOworI2VuZGlm
CiAKICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhSdW5Mb29wKGhhbmRsZS0+Y29ubmVj
dGlvbigpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIHN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2Rl
KCkpOwogICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChoYW5k
bGUtPmNvbm5lY3Rpb24oKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBzeW5jaHJvbm91c0xvYWRS
dW5Mb29wTW9kZSgpKTsKQEAgLTcwNCw2ICsxMDkwLDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6
cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXgKICAgICBlcnJvciA9IGNsaWVudC0+ZXJyb3IoKTsKIAogICAgIENGVVJMQ29ubmVjdGlvbkNh
bmNlbChoYW5kbGUtPmNvbm5lY3Rpb24oKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJlcG9y
dE5ldHdvcmtEYXRhVXNhZ2UoY29udGV4dCwgaGFuZGxlLT5jb25uZWN0aW9uKCkpOworI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKICAgICAKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAg
IHJlc3BvbnNlID0gY2xpZW50LT5yZXNwb25zZSgpOwpAQCAtNzY5LDYgKzExNTgsNDQgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6dW5zY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiB9CiAjZW5k
aWYKIAorY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFJlcXVl
c3QoKSBjb25zdAoreworICAgIHJldHVybiBkLT5tX2N1cnJlbnRSZXF1ZXN0OworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgZC0+bV9yZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdDsKKyAg
ICBpZiAoIWQtPm1fcmVxdWVzdFJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgZC0+bV9yZXF1ZXN0
UmVzdWx0LnNldFN0b3JhZ2VTZXNzaW9uKGQtPm1fc3RvcmFnZVNlc3Npb24uZ2V0KCkpOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwoZC0+bV9zZW1hcGhvcmUpOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCit7CisgICAgZGlzcGF0
Y2hfc2VtYXBob3JlX3NpZ25hbChkLT5tX3NlbWFwaG9yZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCB1c2VDcmVkZW50
aWFsU3RvcmFnZSkKK3sKKyAgICBkLT5tX2Jvb2xSZXN1bHQgPSB1c2VDcmVkZW50aWFsU3RvcmFn
ZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKGQtPm1fc2VtYXBob3JlKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShDRkNhY2hlZFVS
TFJlc3BvbnNlUmVmIHJlc3BvbnNlKQoreworICAgIGQtPm1fY2FjaGVkUmVzcG9uc2VSZXN1bHQg
PSByZXNwb25zZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKGQtPm1fc2VtYXBob3Jl
KTsKK30KKworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIFJl
c291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UoYm9vbCBjYW5BdXRoZW50aWNhdGUpCit7CisgICAgZC0+bV9ib29sUmVzdWx0ID0gY2FuQXV0
aGVudGljYXRlOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwoZC0+bV9zZW1hcGhvcmUp
OworfQorI2VuZGlmCisKICNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQogCiAjaWYgVVNFKE5FVFdP
UktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQpAQCAtODAzLDQgKzEyMzAsMTIgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6aGFuZGxlRGF0YUFycmF5KENGQXJyYXlSZWYgZGF0YUFycmF5KQogfQogI2Vu
ZGlmCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykgJiYgVVNFKENGTkVUV09SSykKK0NGVVJMQ29ubmVj
dGlvbkNsaWVudF9WNiogUmVzb3VyY2VIYW5kbGU6OmNvbm5lY3Rpb25DbGllbnRDYWxsYmFja3Mo
KQoreworICAgIHN0YXRpYyBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjYgY2xpZW50ID0geyA2LCAw
LCAwLCAwLCAwLCAwLCAwLCBkaWRSZWNlaXZlRGF0YSwgMCwgZGlkRmluaXNoTG9hZGluZywgZGlk
RmFpbCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgZGlkUmVjZWl2ZURhdGFBcnJheX07CisgICAgcmV0
dXJuICZjbGllbnQ7Cit9CisjZW5kaWYgLy8gVVNFKFFVSUNLX0xPT0spICYmIFVTRShDRk5FVFdP
UkspCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218259</attachid>
            <date>2013-12-02 20:12:19 -0800</date>
            <delta_ts>2013-12-10 16:02:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131202201219.patch</filename>
            <type>text/plain</type>
            <size>33859</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM0OWJkMjJiZjQyYWQ5
MzU5Mjk1OGYzOTMwNDQxMGIxYzUxOTQwZC4uZGQzYjljODlkZmFjOTI3ZDE4ODFiMzA0MzQwNWNi
YTQyM2RiYThhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTEyLTAyICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29ubmVjdGlvbldhc0NhbmNlbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVS
ZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OndpbGxTZW5kUmVxdWVzdEFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OnVwZGF0ZVJlc3BvbnNlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVEYXRhQXJyYXlBc3luYyk6CisgICAgICAgIChX
ZWJDb3JlOjpkaWRTZW5kQm9keURhdGFBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZEZpbmlzaExv
YWRpbmdBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpkaWRGYWlsQXN5bmMpOgorICAgICAgICAo
V2ViQ29yZTo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpkaWRS
ZWNlaXZlQ2hhbGxlbmdlQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuUmVzcG9uZFRvUHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25T
cGFjZUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlRo
cmVhZFNoYXJlZERhdGE6OlRocmVhZFNoYXJlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6VGhyZWFkU2hhcmVkRGF0YTo6flRocmVhZFNoYXJlZERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9h
ZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgorCiAyMDEzLTEyLTAyICBSb2dlciBaYW5vbmkgIDxy
b2dlcnphbm9uaUBnbWFpbC5jb20+CiAKICAgICAgICAgW01lZGlhU3RyZWFtXSBVc2UgaXRlcmF0
b3ItYmFzZWQgbG9vcHMgaW5zdGVhZCBvZiBpbmRleC1iYXNlZCBsb29wcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgppbmRleCAyYjhhNTQ4ZGZkNTBiM2E5MzdiNWJjZGEyZDUxODA1MjMwMzMyMzc1Li5iZWRm
NDkyYjFhOGQ4MTA4NjQ5MjQxYWZmOWNkN2IxZGY5NjA5NzhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgpAQCAtMjI3Niw2ICsyMjc2LDcgQEAgX19aTjdXZWJDb3JlMTh0ZXh0QnJlYWtGb2xsb3dpbmdF
UE5TXzE3VGV4dEJyZWFrSXRlcmF0b3JFaQogX19aTjdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RC
YXNlMTRzZXRDYWNoZVBvbGljeUVOU18yNlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5RQogX19a
TjdXZWJDb3JlMTlhcHBsaWNhdGlvbklzV2ViQXBwRXYKIF9fWk43V2ViQ29yZTIwTmV0d29ya1N0
YXRlTm90aWZpZXIxMXNldElzT25MaW5lRWIKK19fWk43V2ViQ29yZTIwUmVzb3VyY2VIYW5kbGVD
bGllbnQyMndpbGxDYWNoZVJlc3BvbnNlQXN5bmNFUE5TXzE0UmVzb3VyY2VIYW5kbGVFUEsyMF9D
RkNhY2hlZFVSTFJlc3BvbnNlCiBfX1pON1dlYkNvcmUyMGFwcGxpY2F0aW9uSXNPa0N1cGlkRXYK
IF9fWk43V2ViQ29yZTIwZW5kT2ZFZGl0YWJsZUNvbnRlbnRFUktOU18xNVZpc2libGVQb3NpdGlv
bkUKIF9fWk43V2ViQ29yZTIwbGFzdE9mZnNldEZvckVkaXRpbmdFUEtOU180Tm9kZUUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5k
ZXggMjhjZjA5NzM5M2VkZWJhOGRkNjIxMDhjNGFjZTY4ZjI1MGM5NzU1OS4uYzRhNzEwYmI1Y2E0
NWNkNjM3ODlkZDI4ZDQ4NzQ4YjUyNmRkYTk3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVu
dCkKICAgICBkLT5tX2NsaWVudCA9IGNsaWVudDsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCisj
aWYgIVVTRShDRk5FVFdPUkspICYmICFQTEFURk9STShNQUMpCiAvLyBSZXNvdXJjZUhhbmRsZSBu
ZXZlciB1c2VzIGFzeW5jIGNsaWVudCBjYWxscyBvbiB0aGVzZSBwbGF0Zm9ybXMgeWV0Lgogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaAppbmRleCBmZjgwNjc0OWE2MWIzNjZlN2FiZjgyNmI5NGIwMmM3NGQ4YWNiMDJh
Li4zNWEyNzk2MWMyYjgzZTYzNGJkZjg0NGI1ZGMxOWU4MjMwM2E1OWQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCkBAIC02OSw2ICs2
OSw3IEBAIHR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsKICNlbmRpZgogCiAjaWYgVVNF
KENGTkVUV09SSykKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9DRkNhY2hlZFVSTFJlc3BvbnNlKiBD
RkNhY2hlZFVSTFJlc3BvbnNlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiog
Q0ZVUkxDb25uZWN0aW9uUmVmOwogdHlwZWRlZiBpbnQgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeTsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY7CkBAIC0yMTQsOCArMjE1LDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKICNl
bmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIENhbGxlZCBpbiByZXNwb25zZSB0byBS
ZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYygpLgorI2lmIFVTRShD
Rk5FVFdPUkspCisgICAgdm9pZCBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJM
UmVzcG9uc2VSZWYpOworI2VsaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgY29udGludWVXaWxs
Q2FjaGVSZXNwb25zZShOU0NhY2hlZFVSTFJlc3BvbnNlICopOwogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVu
dC5jcHAKaW5kZXggNjM5N2Q3MDI3ZWI0YjQ0MTlkMWRjOGIyZTNjMDYwZDViM2E5YmY2ZS4uOGVi
NGVlYjZhZjU0OWY5YWEwY2RlODUyNjRkN2E4ZmFhODJhYzFmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAK
QEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDbGllbnQ6OmNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUhhCiB9CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQ0ZORVRXT1JLKQordm9pZCBSZXNvdXJjZUhhbmRs
ZUNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBD
RkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQoreworICAgIGhhbmRsZS0+Y29udGludWVX
aWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7Cit9CisjZWxpZiBQTEFURk9STShNQUMpCiB2b2lk
IFJlc291cmNlSGFuZGxlQ2xpZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKnJlc3BvbnNlKQogewogICAgIGhhbmRs
ZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKaW5kZXgg
YTJkODcxZDIzYjc3M2EwOWI5ZDlmNzlmMzIwNDcwNmZiZmNhYjdkMy4uYjNhNTkyMzA0Mjg1MGJh
YzRiN2FkZjIzNzM3YzhhYTUxMjY2MWE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaApAQCAtODksOCArODksMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVw
ZGF0ZWQgcmVxdWVzdCB1c2luZyBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKCkgd2hlbiByZWFkeS4KICAgICAgICAgdmlydHVhbCB2
b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFD
KSAmJiAhVVNFKENGTkVUV09SSykKICAgICAgICAgLy8gQ2xpZW50IHdpbGwgcGFzcyBhbiB1cGRh
dGVkIHJlcXVlc3QgdXNpbmcgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9u
c2UoKSB3aGVuIHJlYWR5LgorI2lmIFVTRShDRk5FVFdPUkspCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiwgQ0ZDYWNoZWRVUkxSZXNw
b25zZVJlZik7CisjZWxpZiBQTEFURk9STShNQUMpCiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxs
Q2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSAq
KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmluZGV4IDc1ZTIyN2I2NjcyOWU0MGZiMjk1YzE2
YTVhZWUxNWI3MDVmMDcwZDIuLjkyMmIyMjI3MjYxN2Q4NDlhOTJlOTEzMDdkMDI2NWZlZTI0ZWQ0
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC0xNDgsNyArMTQ4LDIxIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDb25uZWN0
aW9uUmVmPiBtX2Nvbm5lY3Rpb247CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRS
ZXF1ZXN0OwotI2VuZGlmCisKKyAgICAgICAgc3RydWN0IFRocmVhZFNoYXJlZERhdGEgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkU2hhcmVkRGF0YT4geworICAgICAgICAgICAg
VGhyZWFkU2hhcmVkRGF0YShSZXNvdXJjZUhhbmRsZSopOworICAgICAgICAgICAgflRocmVhZFNo
YXJlZERhdGEoKTsKKworICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZTsKKyAgICAg
ICAgICAgIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWU7CisgICAgICAgICAgICBkaXNwYXRjaF9zZW1h
cGhvcmVfdCBzZW1hcGhvcmU7CisKKyAgICAgICAgICAgIFJldGFpblB0cjxDRlVSTFJlcXVlc3RS
ZWY+IHJlcXVlc3RSZXN1bHQ7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZDYWNoZWRVUkxSZXNw
b25zZVJlZj4gY2FjaGVkUmVzcG9uc2VSZXN1bHQ7CisgICAgICAgICAgICBib29sIGJvb2xSZXN1
bHQ7CisgICAgICAgIH07CisgICAgICAgIFJlZlB0cjxUaHJlYWRTaGFyZWREYXRhPiBtX2FzeW5j
aHJvbm91c1NoYXJlZERhdGE7CisjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKICNpZiBQTEFURk9S
TShNQUMpICYmICFVU0UoQ0ZORVRXT1JLKQogICAgICAgICBSZXRhaW5QdHI8TlNVUkxDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgICAgIFJldGFpblB0cjxpZD4gbV9kZWxlZ2F0ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwCmluZGV4IGZlNjIwMTFiZDViMTMyMmE3MDViNjA0M2Q4NGFjZTkzMTEy
ODFjNTAuLjYwNjAyMGFkZWZiZDU0N2E1NjU1OGM0NDNkNjVlM2U4NjI0NWY3MjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5l
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcApAQCAtODksNiArODksMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYg
YWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkKICAgICByZXR1cm4gaG9zdHM7CiB9CiAK
K3N0YXRpYyBib29sIGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bDo6VGhyZWFkU2hhcmVkRGF0YSogZGF0YSkKK3sKKyAgICByZXR1cm4gIWRhdGEtPmhhbmRsZTsK
K30KKwogc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4mIGNsaWVu
dENlcnRzKCkKIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPj4gQ2VydHNNYXA7CkBAIC0xMzQsNiArMTM5LDM4IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZV
UkxSZXNwb25zZVJlZj4gc3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShjb25z
dCBSCiAgICAgcmV0dXJuIG5ld1Jlc3BvbnNlOwogfQogCitzdGF0aWMgUmVzb3VyY2VSZXF1ZXN0
IGNyZWF0ZVJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0LCBjb25zdCBS
ZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4mIHJlZGlyZWN0UmVzcG9uc2UsIFJlc291cmNlSGFu
ZGxlJiBoYW5kbGUpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgQ0ZIVFRQ
TWVzc2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UocmVk
aXJlY3RSZXNwb25zZS5nZXQoKSk7CisgICAgaWYgKGh0dHBNZXNzYWdlICYmIENGSFRUUE1lc3Nh
Z2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cE1lc3NhZ2UpID09IDMwNykgeworICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhc3RIVFRQTWV0aG9kID0gaGFuZGxlLmxhc3RIVFRQTWV0
aG9kKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBu
ZXdNZXRob2QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdE1ldGhvZChjZlJl
cXVlc3QpKTsKKyAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZVdpdGhPcHRpb25zKGxhc3RIVFRQ
TWV0aG9kLmdldCgpLCBuZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0
TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdldCgpKSksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUp
KSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4gbXV0YWJs
ZVJlcXVlc3QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5KDAsIGNmUmVx
dWVzdCkpOworICAgICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24oaGFuZGxlLnN0
b3JhZ2VTZXNzaW9uKCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAgIENGVVJM
UmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0LmdldCgpLCBsYXN0SFRU
UE1ldGhvZC5nZXQoKSk7CisKKyAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0gaGFuZGxlLmZp
cnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CisgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdD
YXNlKGhhbmRsZS5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCksICJHRVQiKSAmJiBib2R5ICYm
ICFib2R5LT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgV2ViQ29yZTo6c2V0SFRUUEJvZHko
bXV0YWJsZVJlcXVlc3QuZ2V0KCksIGJvZHkpOworCisgICAgICAgICAgICBTdHJpbmcgb3JpZ2lu
YWxDb250ZW50VHlwZSA9IGhhbmRsZS5maXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5cGUoKTsK
KyAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRlckZpZWxkVmFsdWUobXV0YWJsZVJlcXVl
c3QuZ2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwgb3JpZ2luYWxDb250ZW50VHlwZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKTsKKworICAgICAgICAgICAgcmVxdWVzdCA9IG11dGFibGVSZXF1
ZXN0LmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVlc3QuaXNOdWxsKCkp
CisgICAgICAgIHJlcXVlc3QgPSBjZlJlcXVlc3Q7CisKKyAgICBpZiAoIXJlcXVlc3QudXJsKCku
cHJvdG9jb2xJcygiaHR0cHMiKSAmJiBwcm90b2NvbElzKHJlcXVlc3QuaHR0cFJlZmVycmVyKCks
ICJodHRwcyIpICYmIGhhbmRsZS5jb250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QoKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCiBzdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5k
UmVxdWVzdChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVz
dCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7CiAjaWYgTE9HX0RJU0FCTEVECkBAIC0xNDksMzYgKzE4Niw3IEBAIHN0
YXRpYyBDRlVSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0KENGVVJMQ29ubmVjdGlvblJlZiBj
b25uLCBDRlVSTFJlcXVlc3RSZWYKIAogICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSB3aWxsU2Vu
ZFJlcXVlc3QoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBoYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Ci0gICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UpIHsKLSAgICAg
ICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVz
cG9uc2UocmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7Ci0gICAgICAgIGlmIChodHRwTWVzc2FnZSAm
JiBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKGh0dHBNZXNzYWdlKSA9PSAzMDcp
IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFzdEhUVFBNZXRob2QgPSBo
YW5kbGUtPmxhc3RIVFRQTWV0aG9kKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbmV3TWV0aG9kID0gYWRvcHRDRihDRlVSTFJlcXVlc3RDb3B5
SFRUUFJlcXVlc3RNZXRob2QoY2ZSZXF1ZXN0KSk7Ci0gICAgICAgICAgICBpZiAoQ0ZTdHJpbmdD
b21wYXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0KCksIG5ld01ldGhvZC5nZXQoKSwg
Q0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFzdEhUVFBNZXRob2QuZ2V0KCkpKSwg
a0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4gbXV0YWJsZVJlcXVlc3QgPSBhZG9wdENGKENGVVJMUmVx
dWVzdENyZWF0ZU11dGFibGVDb3B5KDAsIGNmUmVxdWVzdCkpOwotICAgICAgICAgICAgICAgIHdr
U2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKGhhbmRsZS0+c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJs
ZVJlcXVlc3QuZ2V0KCkpOwotICAgICAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBSZXF1
ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0LmdldCgpLCBsYXN0SFRUUE1ldGhvZC5nZXQoKSk7Ci0K
LSAgICAgICAgICAgICAgICBGb3JtRGF0YSogYm9keSA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
aHR0cEJvZHkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLCAiR0VUIikgJiYgYm9keSAmJiAhYm9keS0+
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keShtdXRh
YmxlUmVxdWVzdC5nZXQoKSwgYm9keSk7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgb3JpZ2lu
YWxDb250ZW50VHlwZSA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cENvbnRlbnRUeXBlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRlckZpZWxkVmFsdWUobXV0
YWJsZVJlcXVlc3QuZ2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwgb3JpZ2luYWxDb250ZW50
VHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLQotICAgICAgICAgICAgICAgIHJlcXVlc3Qg
PSBtdXRhYmxlUmVxdWVzdC5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAocmVxdWVzdC5pc051bGwoKSkKLSAgICAgICAgcmVxdWVzdCA9IGNmUmVxdWVzdDsK
LQotICAgIC8vIFNob3VsZCBub3Qgc2V0IFJlZmVyZXIgYWZ0ZXIgYSByZWRpcmVjdCBmcm9tIGEg
c2VjdXJlIHJlc291cmNlIHRvIG5vbi1zZWN1cmUgb25lLgotICAgIGlmICghcmVxdWVzdC51cmwo
KS5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIo
KSwgImh0dHBzIikgJiYgaGFuZGxlLT5jb250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhU
VFBTVG9IVFRQUmVkaXJlY3QoKSkKLSAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigp
OwotCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3Qo
Y2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLCAqaGFuZGxlKTsKICAgICBoYW5kbGUtPndpbGxT
ZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKIAogICAgIGlmIChy
ZXF1ZXN0LmlzTnVsbCgpKQpAQCAtMTkwLDE4ICsxOTgsMzcgQEAgc3RhdGljIENGVVJMUmVxdWVz
dFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUmVxdWVz
dFJlZgogICAgIHJldHVybiBjZlJlcXVlc3Q7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3Bv
bnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorc3RhdGljIENGVVJMUmVxdWVzdFJlZiB3aWxs
U2VuZFJlcXVlc3RBc3luYyhDRlVSTENvbm5lY3Rpb25SZWYgY29ubmVjdGlvbiwgQ0ZVUkxSZXF1
ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5hbFJlZGlyZWN0UmVzcG9u
c2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0jaWYgTE9HX0RJU0FCTEVEICYmICFVU0Uo
UVVJQ0tfTE9PSykKLSAgICBVTlVTRURfUEFSQU0oY29ubik7Ci0jZW5kaWYKLSAgICBSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
OlRocmVhZFNoYXJlZERhdGE+IGRhdGEgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjpUaHJlYWRTaGFyZWREYXRhKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwog
Ci0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVSZXNwb25zZShjb25uPSVwLCBo
YW5kbGU9JXApICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIHdpbGxT
ZW5kUmVxdWVzdEFzeW5jKGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNvbm5lY3Rpb24sIGRh
dGEtPmhhbmRsZSwgZGF0YS0+aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKIAotICAgIGlmICghaGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChkYXRhLmdldCgpKSkgewor
ICAgICAgICAgICAgZGF0YS0+cmVxdWVzdFJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgICAgICBk
aXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKGRhdGEtPnNlbWFwaG9yZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4g
cmVkaXJlY3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3Nhcnko
ZGF0YS0+aGFuZGxlLT5jdXJyZW50UmVxdWVzdCgpLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJl
Y3RSZXNwb25zZSk7CisKKyAgICAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlKSB7CisgICAgICAg
ICAgICBkYXRhLT5oYW5kbGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNmUmVxdWVzdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCA9IGNyZWF0ZVJlc291cmNlUmVxdWVzdChjZlJlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UsICpkYXRhLT5oYW5kbGUpOworICAgICAgICBkYXRhLT5oYW5kbGUtPndpbGxTZW5kUmVxdWVz
dChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICB9KTsKIAorICAgIGRpc3Bh
dGNoX3NlbWFwaG9yZV93YWl0KGRhdGEtPnNlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVS
KTsKKworICAgIHJldHVybiBkYXRhLT5yZXF1ZXN0UmVzdWx0LmxlYWtSZWYoKTsKK30KKworc3Rh
dGljIENGVVJMUmVzcG9uc2VSZWYgdXBkYXRlUmVzcG9uc2VJZk5lY2Vzc2FyeShDRlVSTENvbm5l
Y3Rpb25SZWYgY29ubmVjdGlvbiwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgQ0ZVUkxSZXNwb25z
ZVJlZiBjZlJlc3BvbnNlKQorewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBBdm9pZCBNSU1F
IHR5cGUgc25pZmZpbmcgaWYgdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgYXMgMzA0IE5vdCBNb2Rp
ZmllZC4KICAgICBDRkhUVFBNZXNzYWdlUmVmIG1zZyA9IHdrR2V0Q0ZVUkxSZXNwb25zZUhUVFBS
ZXNwb25zZShjZlJlc3BvbnNlKTsKQEAgLTIyMywxNCArMjUwLDQ0IEBAIHN0YXRpYyB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXNwb25zZVJl
ZiBjZlJlc3BvCiAjZW5kaWYKIAogI2lmIFVTRShRVUlDS19MT09LKQotICAgIGhhbmRsZS0+c2V0
UXVpY2tMb29rSGFuZGxlKFF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKGhhbmRsZSwgY29ubiwgY2ZS
ZXNwb25zZSkpOworICAgIGhhbmRsZS0+c2V0UXVpY2tMb29rSGFuZGxlKFF1aWNrTG9va0hhbmRs
ZTo6Y3JlYXRlKGhhbmRsZSwgY29ubmVjdGlvbiwgY2ZSZXNwb25zZSkpOwogICAgIGlmIChoYW5k
bGUtPnF1aWNrTG9va0hhbmRsZSgpKQogICAgICAgICBjZlJlc3BvbnNlID0gaGFuZGxlLT5xdWlj
a0xvb2tIYW5kbGUoKS0+Y2ZSZXNwb25zZSgpOwogI2VuZGlmCi0gICAgCisgICAgcmV0dXJuIGNm
UmVzcG9uc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5l
Y3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworI2lmIExPR19ESVNBQkxFRCAmJiAhVVNFKFFVSUNLX0xPT0spCisgICAg
VU5VU0VEX1BBUkFNKGNvbm4pOworI2VuZGlmCisgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5m
bykpOworCisgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVSZXNwb25zZShjb25u
PSVwLCBoYW5kbGU9JXApICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0
KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAoIWhhbmRsZS0+Y2xp
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNmUmVzcG9uc2UgPSB1cGRhdGVSZXNwb25z
ZUlmTmVjZXNzYXJ5KGNvbm4sIGhhbmRsZSwgY2ZSZXNwb25zZSk7CiAgICAgaGFuZGxlLT5jbGll
bnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgY2ZSZXNwb25zZSk7CiB9CiAKK3N0YXRp
YyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0
aW9uLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlRocmVhZFNoYXJlZERhdGE+
IGRhdGEgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUludGVybmFsOjpUaHJlYWRTaGFyZWRE
YXRhKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworCisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIs
IGNvbm5lY3Rpb24sIGRhdGEtPmhhbmRsZSwgZGF0YS0+aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoY29ubmVjdGlvbldh
c0NhbmNlbGxlZChkYXRhLmdldCgpKSkKKyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9z
aWduYWwoZGF0YS0+c2VtYXBob3JlKTsKKyAgICAgICAgQ0ZVUkxSZXNwb25zZVJlZiBsb2NhbFJl
c3BvbnNlID0gdXBkYXRlUmVzcG9uc2VJZk5lY2Vzc2FyeShjb25uZWN0aW9uLCBkYXRhLT5oYW5k
bGUsIGNmUmVzcG9uc2UpOworICAgICAgICBkYXRhLT5oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNl
aXZlUmVzcG9uc2VBc3luYyhkYXRhLT5oYW5kbGUsIGxvY2FsUmVzcG9uc2UpOworICAgIH0pOwor
ICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KGRhdGEtPnNlbWFwaG9yZSwgRElTUEFUQ0hfVElN
RV9GT1JFVkVSKTsKK30KKwogI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykK
IHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4s
IENGQXJyYXlSZWYgZGF0YUFycmF5LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewpAQCAtMjUw
LDYgKzMwNywyMCBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YUFycmF5KENGVVJMQ29ubmVj
dGlvblJlZiBjb25uLCBDRkFycmF5UmVmIGRhdGFBcnJheSwgYwogCiAgICAgaGFuZGxlLT5oYW5k
bGVEYXRhQXJyYXkoZGF0YUFycmF5KTsKIH0KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGFB
cnJheUFzeW5jKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkFycmF5UmVmIGRhdGFBcnJheSwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6VGhyZWFkU2hhcmVkRGF0YT4gZGF0YSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxl
SW50ZXJuYWw6OlRocmVhZFNoYXJlZERhdGEqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSk7CisgICAgQ0ZSZXRhaW4oY29ubik7CisgICAgQ0ZSZXRhaW4oZGF0YUFycmF5KTsKKworICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlm
ICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChkYXRhLmdldCgpKSkKKyAgICAgICAgICAgIGRpZFJl
Y2VpdmVEYXRhQXJyYXkoY29ubiwgZGF0YUFycmF5LCBkYXRhLT5oYW5kbGUpOworICAgICAgICBD
RlJlbGVhc2UoZGF0YUFycmF5KTsKKyAgICAgICAgQ0ZSZWxlYXNlKGNvbm4pOworICAgIH0pOwor
fQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlvblJl
ZiBjb25uLCBDRkRhdGFSZWYgZGF0YSwgQ0ZJbmRleCBvcmlnaW5hbExlbmd0aCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKQEAgLTI4MCw2ICszNTEsMTUgQEAgc3RhdGljIHZvaWQgZGlkU2VuZEJv
ZHlEYXRhKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZJbmRleCwgQ0ZJbmRleCB0b3RhbEJ5dGVzV3Jp
dHQKICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRTZW5kRGF0YShoYW5kbGUsIHRvdGFsQnl0ZXNX
cml0dGVuLCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlKTsKIH0KIAorc3RhdGljIHZvaWQgZGlk
U2VuZEJvZHlEYXRhQXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkluZGV4LCBDRkluZGV4IHRv
dGFsQnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
OlRocmVhZFNoYXJlZERhdGE+IGRhdGEgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjpUaHJlYWRTaGFyZWREYXRhKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAg
IGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChkYXRhLmdldCgpKSkKKyAgICAgICAgICAgIGRh
dGEtPmhhbmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKGRhdGEtPmhhbmRsZSwgdG90YWxCeXRl
c1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpOworICAgIH0pOworfQorCiBzdGF0
aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrKENGVVJMQ29ubmVj
dGlvblJlZiBjb25uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogI2lmIExPR19ESVNBQkxF
RApAQCAtMjk1LDYgKzM3NSwyNiBAQCBzdGF0aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZUNhbGxiYWNrKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBjb25zdAogICAgIHJldHVy
biBoYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CiB9CiAKK3N0YXRpYyBCb29s
ZWFuIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlQXN5bmMoQ0ZVUkxDb25uZWN0aW9uUmVmIGNv
bm4sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxl
SW50ZXJuYWw6OlRocmVhZFNoYXJlZERhdGE+IGRhdGEgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpUaHJlYWRTaGFyZWREYXRhKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50
SW5mbykpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlQXN5bmMoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwgZGF0YS0+aGFuZGxlLCBk
YXRhLT5oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworCisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKGRhdGEuZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBkYXRhLT5ib29sUmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICBkaXNwYXRj
aF9zZW1hcGhvcmVfc2lnbmFsKGRhdGEtPnNlbWFwaG9yZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZGF0YS0+aGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSgpOworICAgIH0pOworCisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQoZGF0YS0+c2Vt
YXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworCisgICAgcmV0dXJuIGRhdGEtPmJvb2xS
ZXN1bHQ7Cit9CisKIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9u
UmVmIGNvbm4sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAjaWYgTE9HX0RJU0FCTEVECkBA
IC0zMTMsNiArNDEzLDE3IEBAIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmcoQ0ZVUkxDb25u
ZWN0aW9uUmVmIGNvbm4sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiAgICAgICAgIGhhbmRsZS0+
Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLCAwKTsKIH0KIAorc3RhdGljIHZvaWQg
ZGlkRmluaXNoTG9hZGluZ0FzeW5jKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsOjpUaHJl
YWRTaGFyZWREYXRhPiBkYXRhID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
VGhyZWFkU2hhcmVkRGF0YSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBD
RlJldGFpbihjb25uKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeeworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoZGF0YS5nZXQoKSkp
CisgICAgICAgICAgICBkaWRGaW5pc2hMb2FkaW5nKGNvbm4sIGRhdGEtPmhhbmRsZSk7CisgICAg
ICAgIENGUmVsZWFzZShjb25uKTsKKyAgICB9KTsKK30KKwogc3RhdGljIHZvaWQgZGlkRmFpbChD
RlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKIHsKICNpZiBMT0dfRElTQUJMRUQKQEAgLTMzMSw2ICs0NDIsMTkgQEAgc3RhdGlj
IHZvaWQgZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZFcnJvclJlZiBlcnJvciwg
Y29uc3Qgdm9pZCogY2xpZW4KICAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChoYW5k
bGUsIFJlc291cmNlRXJyb3IoZXJyb3IpKTsKIH0KIAorc3RhdGljIHZvaWQgZGlkRmFpbEFzeW5j
KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkVycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsOjpUaHJlYWRT
aGFyZWREYXRhPiBkYXRhID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6VGhy
ZWFkU2hhcmVkRGF0YSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBDRlJl
dGFpbihjb25uKTsKKyAgICBDRlJldGFpbihlcnJvcik7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2Fu
Y2VsbGVkKGRhdGEuZ2V0KCkpKQorICAgICAgICAgICAgZGlkRmFpbChjb25uLCBlcnJvciwgZGF0
YS0+aGFuZGxlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGVycm9yKTsKKyAgICAgICAgQ0ZSZWxlYXNl
KGNvbm4pOworICAgIH0pOworfQorCiBzdGF0aWMgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiB3aWxs
Q2FjaGVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYg
Y2FjaGVkUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2FzdDx2
b2lkKj4oY2xpZW50SW5mbykpOwpAQCAtMzYxLDYgKzQ4NSwyNiBAQCBzdGF0aWMgQ0ZDYWNoZWRV
UkxSZXNwb25zZVJlZiB3aWxsQ2FjaGVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYsIENGQ2Fj
aGVkVVJMUgogICAgIHJldHVybiBjYWNoZWRSZXNwb25zZTsKIH0KIAorc3RhdGljIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhDRlVSTENvbm5lY3Rpb25SZWYs
IENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIFdpbmRvd3MgZG9lcyBub3QgaW1w
bGVtZW50IHdpbGxDYWNoZVJlc3BvbnNlKCkgYW5kIHdvdWxkIG5ldmVyIHJldHVybiBmcm9tIHdp
bGxDYWNoZVJlc3BvbnNlQXN5bmMoKS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRp
ZiAvLyBQTEFURk9STShXSU4pCisKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
VGhyZWFkU2hhcmVkRGF0YT4gZGF0YSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OlRocmVhZFNoYXJlZERhdGEqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cisg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAg
aWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoZGF0YS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGRh
dGEtPmNhY2hlZFJlc3BvbnNlUmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNo
X3NlbWFwaG9yZV9zaWduYWwoZGF0YS0+c2VtYXBob3JlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBkYXRhLT5oYW5kbGUtPmNsaWVudCgpLT53aWxsQ2FjaGVSZXNw
b25zZUFzeW5jKGRhdGEtPmhhbmRsZSwgY2FjaGVkUmVzcG9uc2UpOworICAgIH0pOworICAgIGRp
c3BhdGNoX3NlbWFwaG9yZV93YWl0KGRhdGEtPnNlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JF
VkVSKTsKKyAgICByZXR1cm4gZGF0YS0+Y2FjaGVkUmVzcG9uc2VSZXN1bHQubGVha1JlZigpOwor
fQorCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiBj
b25uLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdlLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQogewogI2lmIExPR19ESVNBQkxFRApAQCAtMzczLDYgKzUxNywyNCBAQCBzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTEF1dGhD
aGFsbGVuZ2VSZWYgYwogICAgIGhhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSwgaGFuZGxlKSk7CiB9CiAKK3N0
YXRpYyB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2VBc3luYyhDRlVSTENvbm5lY3Rpb25SZWYgY29u
biwgQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyNpZiBMT0dfRElTQUJMRUQKKyAgICBVTlVTRURfUEFSQU0oY29ubik7CisjZW5kaWYK
KworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsOjpUaHJlYWRTaGFyZWREYXRhPiBk
YXRhID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6VGhyZWFkU2hhcmVkRGF0
YSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBDRlJldGFpbihjb25uKTsK
KyAgICBDRlJldGFpbihjaGFsbGVuZ2UpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBkaWRSZWNl
aXZlQ2hhbGxlbmdlQXN5bmMoY29ubj0lcCwgaGFuZGxlPSVwICglcykiLCBjb25uLCBkYXRhLT5o
YW5kbGUsIGRhdGEtPmhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChkYXRhLmdldCgp
KSkKKyAgICAgICAgICAgIGRhdGEtPmhhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSwgZGF0YS0+aGFuZGxlKSk7
CisgICAgICAgIENGUmVsZWFzZShjaGFsbGVuZ2UpOworICAgICAgICBDRlJlbGVhc2UoY29ubik7
CisgICAgfSk7Cit9CisKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQog
c3RhdGljIEJvb2xlYW4gY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKENGVVJMQ29ubmVjdGlv
blJlZiBjb25uLCBDRlVSTFByb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiB7CkBAIC0zODUsNiArNTQ3LDcgQEAgc3RhdGljIEJvb2xlYW4g
Y2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVS
TFByb3RlY3QKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gY2FuUmVzcG9uZFRvUHJvdGVjdGlv
blNwYWNlKGNvbm49JXAsIGhhbmRsZT0lcCAoJXMpIiwgY29ubiwgaGFuZGxlLCBoYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIE9uIFdlYktpdDEsIHdoZW4gY29udmVydGluZyBmcm9tIFByb3RlY3Rp
b25TcGFjZSB0byBOU1VSTFByb3RlY3Rpb25TcGFjZSBpbiB0aGUgQVBJLCB0aGUgc2NoZW1lICJV
bmtub3duIiBpcyBsb3N0LgogICAgIFByb3RlY3Rpb25TcGFjZSBjb3JlUHJvdGVjdGlvblNwYWNl
ID0gY29yZShwcm90ZWN0aW9uU3BhY2UpOwogICAgIGlmIChjb3JlUHJvdGVjdGlvblNwYWNlLmF1
dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVVbmtub3duKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTMsNiArNTU2LDMwIEBAIHN0
YXRpYyBCb29sZWFuIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTENvbm5lY3Rpb25S
ZWYgY29ubiwgQ0ZVUkxQcm90ZWN0CiAgICAgcmV0dXJuIGhhbmRsZS0+Y2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb3JlKHByb3RlY3Rpb25TcGFjZSkpOwogI2VuZGlmCiB9
CisKK3N0YXRpYyBCb29sZWFuIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZUFzeW5jKENGVVJM
Q29ubmVjdGlvblJlZiBjb25uLCBDRlVSTFByb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3Bh
Y2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisjaWYgTE9HX0RJU0FCTEVECisgICAgVU5V
U0VEX1BBUkFNKGNvbm4pOworI2VuZGlmCisKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6VGhyZWFkU2hhcmVkRGF0YT4gZGF0YSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxl
SW50ZXJuYWw6OlRocmVhZFNoYXJlZERhdGEqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNl
QXN5bmMoY29ubj0lcCwgaGFuZGxlPSVwICglcykiLCBjb25uLCBkYXRhLT5oYW5kbGUsIGRhdGEt
PmhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisK
KyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQoZGF0YS5nZXQoKSkpIHsKKyAgICAg
ICAgICAgIGRhdGEtPmJvb2xSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIGRpc3BhdGNoX3Nl
bWFwaG9yZV9zaWduYWwoZGF0YS0+c2VtYXBob3JlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBkYXRhLT5oYW5kbGUtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoY29yZShwcm90ZWN0aW9uU3BhY2UpKTsKKyAgICB9KTsKKworICAgIGRpc3Bh
dGNoX3NlbWFwaG9yZV93YWl0KGRhdGEtPnNlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVS
KTsKKworICAgIHJldHVybiBkYXRhLT5ib29sUmVzdWx0OworfQogI2VuZGlmCiAKIFJlc291cmNl
SGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKQEAgLTQwMyw5ICs1OTAs
MjcgQEAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQog
ICAgIH0KIH0KIAorUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6VGhyZWFkU2hhcmVkRGF0YTo6VGhy
ZWFkU2hhcmVkRGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQorICAgIDogaGFuZGxlKGhhbmRs
ZSkKKyAgICAsIHF1ZXVlKGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldlYkNvcmUv
Q0ZOZXR3b3JrIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKSkKKyAgICAsIHNlbWFwaG9yZShkaXNw
YXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApKQoreworICAgIGRpc3BhdGNoX3F1ZXVlX3QgYmFja2dy
b3VuZFF1ZXVlID0gZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklP
UklUWV9ISUdILCAwKTsKKyAgICBkaXNwYXRjaF9zZXRfdGFyZ2V0X3F1ZXVlKHF1ZXVlLCBiYWNr
Z3JvdW5kUXVldWUpOworfQorCitSZXNvdXJjZUhhbmRsZUludGVybmFsOjpUaHJlYWRTaGFyZWRE
YXRhOjp+VGhyZWFkU2hhcmVkRGF0YSgpCit7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShzZW1hcGhv
cmUpOworICAgIGRpc3BhdGNoX3JlbGVhc2UocXVldWUpOworfQorCiBSZXNvdXJjZUhhbmRsZTo6
flJlc291cmNlSGFuZGxlKCkKIHsKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gRGVzdHJveWlu
ZyBqb2IgJXAgKCVzKSIsIHRoaXMsIGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKGQtPm1fYXN5bmNocm9ub3VzU2hhcmVkRGF0YSkKKyAg
ICAgICAgZC0+bV9hc3luY2hyb25vdXNTaGFyZWREYXRhLT5oYW5kbGUgPSAwOwogfQogCiB2b2lk
IFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIENGRGljdGlvbmFyeVJlZiBj
bGllbnRQcm9wZXJ0aWVzKQpAQCAtNDc4LDcgKzY4MywyNSBAQCB2b2lkIFJlc291cmNlSGFuZGxl
OjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwg
Ym9vbAogI2VuZGlmCiAKICAgICBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjYgY2xpZW50ID0gKlJl
c291cmNlSGFuZGxlOjpjb25uZWN0aW9uQ2xpZW50Q2FsbGJhY2tzKCk7Ci0gICAgY2xpZW50LmNs
aWVudEluZm8gPSB0aGlzOworICAgIGlmICh0aGlzLT5jbGllbnQoKSAmJiB0aGlzLT5jbGllbnQo
KS0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAgZC0+bV9hc3luY2hyb25vdXNTaGFy
ZWREYXRhID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlRocmVhZFNoYXJl
ZERhdGEodGhpcykpOworICAgICAgICBjbGllbnQuY2xpZW50SW5mbyA9IGQtPm1fYXN5bmNocm9u
b3VzU2hhcmVkRGF0YS5nZXQoKTsKKyAgICAgICAgY2xpZW50LndpbGxTZW5kUmVxdWVzdCA9IHdp
bGxTZW5kUmVxdWVzdEFzeW5jOworICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlID0g
ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmM7CisgICAgICAgIGNsaWVudC5kaWRGaW5pc2hMb2FkaW5n
ID0gZGlkRmluaXNoTG9hZGluZ0FzeW5jOworICAgICAgICBjbGllbnQuZGlkRmFpbCA9IGRpZEZh
aWxBc3luYzsKKyAgICAgICAgY2xpZW50LndpbGxDYWNoZVJlc3BvbnNlID0gd2lsbENhY2hlUmVz
cG9uc2VBc3luYzsKKyAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSA9IGRpZFJlY2VpdmVDaGFsbGVuZ2VBc3luYzsKKyAgICAgICAgY2xpZW50LmRpZFNlbmRC
b2R5RGF0YSA9IGRpZFNlbmRCb2R5RGF0YUFzeW5jOworICAgICAgICBjbGllbnQuc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UgPSBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUFzeW5jOworI2lm
IFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgICAgIGNsaWVudC5jYW5S
ZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UgPSBjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2VBc3lu
YzsKKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorI2lmIFVT
RShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKyAgICAgICAgY2xpZW50LmRpZFJlY2Vp
dmVEYXRhQXJyYXkgPSBkaWRSZWNlaXZlRGF0YUFycmF5QXN5bmM7CisjZW5kaWYgLy8gVVNFKE5F
VFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQorICAgIH0gZWxzZQorICAgICAgICBjbGllbnQu
Y2xpZW50SW5mbyA9IHRoaXM7CiAKICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHN0cmVhbVBy
b3BlcnRpZXMgID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKICAg
ICBpZiAoIXNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQpAQCAtNDk3LDEwICs3MjAsMTQgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wKICAgICBlbHNlCiAgICAgICAgIHByb3BlcnRpZXNEaWN0
aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShwcm9wZXJ0aWVz
RGljdGlvbmFyeS5nZXQoKSwga0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMs
IHN0cmVhbVByb3BlcnRpZXMpOworCisgICAgaWYgKFNldHRpbmdzOjpuZXR3b3JrRGF0YVVzYWdl
VHJhY2tpbmdFbmFibGVkKCkgJiYgIUNGRGljdGlvbmFyeUNvbnRhaW5zS2V5KHByb3BlcnRpZXNE
aWN0aW9uYXJ5LmdldCgpLCBfa0NGVVJMQ29ubmVjdGlvblByb3BlcnR5UmF3Qnl0ZXMpKQorICAg
ICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShwcm9wZXJ0aWVzRGljdGlvbmFyeS5nZXQoKSwgX2tD
RlVSTENvbm5lY3Rpb25Qcm9wZXJ0eVJhd0J5dGVzLCBrQ0ZCb29sZWFuVHJ1ZSk7CiAgICAgQ0ZS
ZWxlYXNlKHN0cmVhbVByb3BlcnRpZXMpOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIENGVVJM
UmVxdWVzdFNldFNob3VsZFN0YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LmdldCgpLCAxKTsKKyAg
ICBpZiAoISh0aGlzLT5jbGllbnQoKSAmJiB0aGlzLT5jbGllbnQoKS0+dXNlc0FzeW5jQ2FsbGJh
Y2tzKCkpKQorICAgICAgICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5bmNocm9ub3VzbHko
cmVxdWVzdC5nZXQoKSwgMSk7CiAjZW5kaWYKICAgICBkLT5tX2Nvbm5lY3Rpb24gPSBhZG9wdENG
KENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzKDAsIHJlcXVlc3QuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Q0ZVUkxDb25uZWN0aW9uQ2xpZW50Kj4oJmNsaWVudCksIHByb3BlcnRp
ZXNEaWN0aW9uYXJ5LmdldCgpKSk7CiB9CkBAIC01MjEsMTMgKzc0OCwxNyBAQCBib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydCgpCiAKICAgICBjcmVhdGVDRlVSTENvbm5lY3Rpb24oc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UsIGQtPm1fc2hvdWxkQ29udGVudFNuaWZmLCBjbGllbnQoKS0+Y29u
bmVjdGlvblByb3BlcnRpZXModGhpcykuZ2V0KCkpOwogCisgICAgaWYgKGNsaWVudCgpICYmIGNs
aWVudCgpLT51c2VzQXN5bmNDYWxsYmFja3MoKSkKKyAgICAgICAgQ0ZVUkxDb25uZWN0aW9uU2V0
RGVsZWdhdGVEaXNwYXRjaFF1ZXVlKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgZC0+bV9hc3luY2hy
b25vdXNTaGFyZWREYXRhLT5xdWV1ZSk7CisgICAgZWxzZSB7CiAjaWYgUExBVEZPUk0oV0lOKQot
ICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aEN1cnJlbnRNZXNzYWdlUXVldWUoZC0+bV9j
b25uZWN0aW9uLmdldCgpKTsKKyAgICAgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVXaXRoQ3Vy
cmVudE1lc3NhZ2VRdWV1ZShkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwogI2VsaWYgUExBVEZPUk0o
SU9TKQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0
aW9uLmdldCgpLCBXZWJUaHJlYWRSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Cisg
ICAgICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9u
LmdldCgpLCBXZWJUaHJlYWRSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAjZWxz
ZQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9u
LmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Cisg
ICAgICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9u
LmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAj
ZW5kaWYKKyAgICB9CiAgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVEb3dubG9hZFdpdGhSdW5M
b29wKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVm
YXVsdE1vZGUpOwogICAgIENGVVJMQ29ubmVjdGlvblN0YXJ0KGQtPm1fY29ubmVjdGlvbi5nZXQo
KSk7CiAKQEAgLTU4NCw4ICs4MTUsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRS
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXMKIGJvb2wg
UmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKIHsKICAgICBMT0co
TmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSIpOwotICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSh0aGlzKTsKKyAgICBpZiAoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IHRo
aXMtPmNsaWVudCgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnVzZXNBc3luY0NhbGxiYWNrcygp
KQorICAgICAgICAgICAgY2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUFzeW5jKHRo
aXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gY2xpZW50LT5zaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKKyAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBA
IC02NTYsOCArODkxLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAjaWYgVVNFKFBST1RF
Q1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OmNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90
ZWN0aW9uU3BhY2UpCiB7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
KCktPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodGhpcywgcHJvdGVjdGlv
blNwYWNlKTsKKyAgICBpZiAoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNs
aWVudCgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnVzZXNBc3luY0NhbGxiYWNrcygpKQorICAg
ICAgICAgICAgY2xpZW50LT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5
bmModGhpcywgcHJvdGVjdGlvblNwYWNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0
dXJuIGNsaWVudC0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSh0aGlzLCBw
cm90ZWN0aW9uU3BhY2UpOworICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTc3NCw3
ICsxMDEzLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXgKICAgICBlcnJvciA9IGNsaWVudC0+
ZXJyb3IoKTsKIAogICAgIENGVVJMQ29ubmVjdGlvbkNhbmNlbChoYW5kbGUtPmNvbm5lY3Rpb24o
KSk7Ci0gICAgCisKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIHJlc3BvbnNlID0g
Y2xpZW50LT5yZXNwb25zZSgpOwogICAgIGVsc2UgewpAQCAtODQzLDYgKzEwODIsNDEgQEAgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFJlcXVlc3QoKSBjb25z
dAogewogICAgIHJldHVybiBkLT5tX2N1cnJlbnRSZXF1ZXN0OwogfQorCit2b2lkIFJlc291cmNl
SGFuZGxlOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0Owor
ICAgIGlmICghcmVxdWVzdFJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgcmVxdWVzdFJlc3VsdC5z
ZXRTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9uLmdldCgpKTsKKyAgICBkLT5tX2Fz
eW5jaHJvbm91c1NoYXJlZERhdGEtPnJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0LmNmVVJM
UmVxdWVzdChVcGRhdGVIVFRQQm9keSk7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChk
LT5tX2FzeW5jaHJvbm91c1NoYXJlZERhdGEtPnNlbWFwaG9yZSk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyAgICBkaXNwYXRjaF9z
ZW1hcGhvcmVfc2lnbmFsKGQtPm1fYXN5bmNocm9ub3VzU2hhcmVkRGF0YS0+c2VtYXBob3JlKTsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShib29sIHVzZUNyZWRlbnRpYWxTdG9yYWdlKQoreworICAgIGQtPm1fYXN5bmNocm9ub3Vz
U2hhcmVkRGF0YS0+Ym9vbFJlc3VsdCA9IHVzZUNyZWRlbnRpYWxTdG9yYWdlOworICAgIGRpc3Bh
dGNoX3NlbWFwaG9yZV9zaWduYWwoZC0+bV9hc3luY2hyb25vdXNTaGFyZWREYXRhLT5zZW1hcGhv
cmUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNl
KENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCit7CisgICAgZC0+bV9hc3luY2hyb25v
dXNTaGFyZWREYXRhLT5jYWNoZWRSZXNwb25zZVJlc3VsdCA9IHJlc3BvbnNlOworICAgIGRpc3Bh
dGNoX3NlbWFwaG9yZV9zaWduYWwoZC0+bV9hc3luY2hyb25vdXNTaGFyZWREYXRhLT5zZW1hcGhv
cmUpOworfQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQg
UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShib29sIGNhbkF1dGhlbnRpY2F0ZSkKK3sKKyAgICBkLT5tX2FzeW5jaHJvbm91c1NoYXJl
ZERhdGEtPmJvb2xSZXN1bHQgPSBjYW5BdXRoZW50aWNhdGU7CisgICAgZGlzcGF0Y2hfc2VtYXBo
b3JlX3NpZ25hbChkLT5tX2FzeW5jaHJvbm91c1NoYXJlZERhdGEtPnNlbWFwaG9yZSk7Cit9Cisj
ZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKwogI2VuZGlmIC8v
IFVTRShDRk5FVFdPUkspCiAKICNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0sp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218916</attachid>
            <date>2013-12-10 16:02:39 -0800</date>
            <delta_ts>2013-12-10 16:12:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131210160239.patch</filename>
            <type>text/plain</type>
            <size>51994</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRhZGFkNDI5ZTRmY2Yx
MzYyMjdhZTVjZDQ0Mzk3OGU4OGI2M2RkMC4uY2M1MzQwMDU3YjExZjM2OTBjMmY0YjkyYjJlMjAz
N2Q3ODAyZThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTEyLTEwICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNl
Y29uZCBzdWJjbGFzcyBvZiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOiBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLgorICAgICAg
ICBUaGUgZGlmZmVyZW5jZSBpcyB0aG9zZSBvYmplY3RzIGhhbmRsZSB0aGUgbmV0d29yayBjYWxs
YmFjayBvbiBhIGRpZmZlcmVudCBxdWV1ZS4KKworICAgICAgICBTb21lIGNvbW1vbiBjb2RlIGhh
cyBiZWVuIHJlZmFjdG9yZWQgaW4gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZSB0byByZWR1Y2UgZHVwbGljYXRlZCBjb2RlLgorCisgICAgICAgIFRoZSBpbml0aWFsaXphdGlv
biBvZiB0aGUgcmVxdWVzdCBhbmQgY29ubmVjdGlvbiBpcyBtb3ZlZCB0byB0aGUgc3ViY2xhc3Mg
dG8gY2xlYW4gdXAgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVD
bGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6fkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdGlvbldhc0NhbmNlbGxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpzZXR1cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFNlbmRCb2R5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51
ZVdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c3ludGhl
c2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
c2V0dXBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29u
dGludWVXaWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaDoKKwog
MjAxMy0xMi0xMCAgUm9iIEJ1aXMgIDxyb2IuYnVpc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBD
bGVhbiB1cCBTVkdTY3JpcHRFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2RjYzkwY2I4YzQyZDgzZDA1YmY3YTU0YWUy
Y2ExMTRmZjBmZTU3Ny4uZGU5NjBkZGE1OWEyOTI0YjRkMTAxN2QyMWU1MTk2M2RkMjNjNjA3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtOTEwLDYgKzkxMCw4IEBACiAJCTI2NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSAqLzsgfTsKIAkJMjY1
NTQxNTIxNDg5QjIzMzAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQgLyog
Q3Vyc29ySU9TLmNwcCAqLzsgfTsKIAkJMjY5MjM5OTYxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjkyMzk5MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCAqLzsgfTsKKwkJMjZDMTVDRjYxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTVDRjQxODU3RTE1RDAwRjE1QzAz
IC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3Bw
ICovOyB9OworCQkyNkMxNUNGNzE4NTdFMTVFMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTVDRjUxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCAqLzsgfTsKIAkJ
MjZDMTdBM0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE3QTNDMTQ5MUQyRDQwMEQxMkJB
MiAvKiBGaWxlU3lzdGVtSU9TLmggKi87IH07CiAJCTI2QzE3QTNGMTQ5MUQyRDQwMEQxMkJBMiAv
KiBGaWxlU3lzdGVtSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZDMTdBM0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi87
IH07CiAJCTI2RTk4QTEwMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU5OEEw
RjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovOyB9OwpAQCAt
NzU2NCw2ICs3NTY2LDggQEAKIAkJMjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklP
Uy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXJzb3JJT1MuY3Bw
OyBwYXRoID0gaW9zL0N1cnNvcklPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2OTIzOTkxMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OTIzOTkyMTUwNUUxQUEw
MDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyNkMxNUNGNDE4NTdFMTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZDMTVDRjUx
ODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNkMxN0EzQzE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlP
Uy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlU3lzdGVtSU9TLmg7IHBh
dGggPSBpb3MvRmlsZVN5c3RlbUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
NkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEZpbGVTeXN0ZW1JT1MubW07IHBhdGggPSBpb3Mv
RmlsZVN5c3RlbUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZFOThBMEYx
MzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTk1NDAsNiArMTk1NDQsOCBAQAogCQlCMkYzNEZFNzBFODJG
ODE3MDBGNjI3Q0QgLyogY2YgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTI2QzE1Q0Y0MTg1N0UxNUQwMEYxNUMwMyAvKiBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLywKKwkJCQkyNkMxNUNGNTE4NTdF
MTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oICovLAogCQkJCTdFRTY4NDREMTJEMjZFMzgwMEU3OTQxNSAvKiBBdXRoZW50aWNh
dGlvbkNGLmggKi8sCiAJCQkJN0VFNjg0NEUxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmggKi8sCiAJCQkJN0VFNjg0NTAxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZVN0b3JhZ2VDRk5ldC5jcHAgKi8sCkBAIC0yMjE3OSw2ICsyMjE4NSw3IEBACiAJCQkJNDlCMzc2
MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
NTY4NkNBMTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlvRGVjb2Rlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMjZDMTVDRjcxODU3RTE1RTAwRjE1QzAzIC8qIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdDNTM0M0ZEMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzYxRjAxMTIwOTVDODcwMDdBM0M2NyAvKiBBdG9taWNT
dHJpbmdLZXllZE1SVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUZGOEY2MDE4MDc0NDIx
MDAxMzI2NzQgLyogU3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzU0LDYgKzI1
NzYxLDcgQEAKIAkJCQk0OUIzNzYwQzE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDU2ODZDOTEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRp
b0RlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1
IC8qIEFzeW5jRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkMxNUNGNjE4NTdF
MTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEM0QTgwRTA5RDU2MzI3MDAwM0FDOEQg
LyogQXR0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDYyOUVBNDE1NEI0NzE2MDAwNkQwMjYg
LyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTVG
RjYxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCmluZGV4IDMwOTg4NzYzNDA4Y2VlYTc1ZWZjOWZjODJhMTg5MzI0ZjNkNjVhN2IuLjIx
OWU0N2U0OWNmZTlhZTU0ZmE5YTFhMDRmNjhlYjZhNzQxZmJlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKQEAgLTY5LDYgKzY5LDcg
QEAgdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwogI2VuZGlmCiAKICNpZiBVU0UoQ0ZO
RVRXT1JLKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWY7CiB0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxDb25uZWN0aW9uKiBDRlVS
TENvbm5lY3Rpb25SZWY7CiB0eXBlZGVmIGludCBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9s
aWN5OwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3RvcmFnZSogQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZjsKQEAgLTIxMyw4ICsyMTQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gQ2FsbGVkIGluIHJlc3BvbnNlIHRvIFJlc291
cmNlSGFuZGxlQ2xpZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKCkuCisjaWYgVVNFKENGTkVU
V09SSykKKyAgICB2b2lkIGNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNw
b25zZVJlZik7CisjZWxpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBjb250aW51ZVdpbGxDYWNo
ZVJlc3BvbnNlKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNw
cAppbmRleCA2Mzk3ZDcwMjdlYjRiNDQxOWQxZGM4YjJlM2MwNjBkNWIzYTliZjZlLi44ZWI0ZWVi
NmFmNTQ5ZjlhYTBjZGU4NTI2NGQ3YThmYWE4MmFjMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNwcApAQCAt
NjEsNyArNjEsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUNsaWVudDo6Y2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGEKIH0KICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFVTRShDRk5FVFdPUkspCit2b2lkIFJlc291cmNlSGFuZGxlQ2xp
ZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCit7CisgICAgaGFuZGxlLT5jb250aW51ZVdpbGxD
YWNoZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30KKyNlbGlmIFBMQVRGT1JNKE1BQykKIHZvaWQgUmVz
b3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgTlNDYWNoZWRVUkxSZXNwb25zZSAqcmVzcG9uc2UpCiB7CiAgICAgaGFuZGxlLT5j
b250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKHJlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAppbmRleCBhMmQ4
NzFkMjNiNzczYTA5YjlkOWY3OWYzMjA0NzA2ZmJmY2FiN2QzLi5iM2E1OTIzMDQyODUwYmFjNGI3
YWRmMjM3MzdjOGFhNTEyNjYxYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCkBAIC04OSw4ICs4OSwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENsaWVudCB3aWxsIHBhc3MgYW4gdXBkYXRl
ZCByZXF1ZXN0IHVzaW5nIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UoKSB3aGVuIHJlYWR5LgogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJik7CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYm
ICFVU0UoQ0ZORVRXT1JLKQogICAgICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQg
cmVxdWVzdCB1c2luZyBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZSgp
IHdoZW4gcmVhZHkuCisjaWYgVVNFKENGTkVUV09SSykKKyAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNl
UmVmKTsKKyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNo
ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopOwog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MjE0YWMzMjBhYmQ5
MDgzYWQ3YTg1OGM5MTM1MTdmMzIwZjFiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuaCIKKworI2lmIFVTRShDRk5FVFdPUkspCisKKyNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkNGLmgiCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKKyAgICA6IFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUoaGFuZGxlKQorICAgICwgbV9xdWV1ZShkaXNwYXRjaF9xdWV1ZV9j
cmVhdGUoImNvbS5hcHBsZS5XZWJDb3JlL0NGTmV0d29yayIsIERJU1BBVENIX1FVRVVFX1NFUklB
TCkpCisgICAgLCBtX3NlbWFwaG9yZShkaXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApKQorewor
ICAgIGRpc3BhdGNoX3F1ZXVlX3QgYmFja2dyb3VuZFF1ZXVlID0gZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ISUdILCAwKTsKKyAgICBkaXNwYXRjaF9z
ZXRfdGFyZ2V0X3F1ZXVlKG1fcXVldWUsIGJhY2tncm91bmRRdWV1ZSk7Cit9CisKK0FzeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6On5Bc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKCkKK3sKKyAgICBkaXNwYXRjaF9y
ZWxlYXNlKG1fc2VtYXBob3JlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcXVldWUpOworfQor
CitzdGF0aWMgYm9vbCBjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUpCit7CisgICAgcmV0dXJuICFoYW5kbGU7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVS
TFJlcXVlc3RSZWYpCit7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5l
Y3Rpb25SZWYgY29ubmVjdGlvbikKK3sKKyAgICBDRlVSTENvbm5lY3Rpb25TZXREZWxlZ2F0ZURp
c3BhdGNoUXVldWUoY29ubmVjdGlvbiwgbV9xdWV1ZSk7Cit9CisKK0NGVVJMUmVxdWVzdFJlZiBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmln
aW5hbFJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIExPRyhO
ZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1f
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgICAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkg
eworICAgICAgICAgICAgY29udGludWVXaWxsU2VuZFJlcXVlc3QobnVsbHB0cik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25z
ZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNl
c3NhcnkoY2ZSZXF1ZXN0LCBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBpZiAo
IXJlZGlyZWN0UmVzcG9uc2UpIHsKKyAgICAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChjZlJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3Qo
Y2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgbV9oYW5kbGUtPndpbGxTZW5k
UmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICB9KTsKKworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOworCisgICAgcmV0dXJuIG1fcmVxdWVzdFJlc3VsdC5sZWFrUmVmKCk7Cit9CisKK3ZvaWQg
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBSZWZQdHI8
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVj
dG9yKHRoaXMpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGU9
JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVk
KHByb3RlY3Rvci0+bV9oYW5kbGUpKSB7CisgICAgICAgICAgICBjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
QXZvaWQgTUlNRSB0eXBlIHNuaWZmaW5nIGlmIHRoZSByZXNwb25zZSBjb21lcyBiYWNrIGFzIDMw
NCBOb3QgTW9kaWZpZWQuCisgICAgICAgIENGSFRUUE1lc3NhZ2VSZWYgbXNnID0gd2tHZXRDRlVS
TFJlc3BvbnNlSFRUUFJlc3BvbnNlKGNmUmVzcG9uc2UpOworICAgICAgICBpbnQgc3RhdHVzQ29k
ZSA9IG1zZyA/IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUobXNnKSA6IDA7CisK
KyAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0KQorICAgICAgICAgICAgYWRqdXN0TUlNRVR5
cGVJZk5lY2Vzc2FyeShjZlJlc3BvbnNlKTsKKworI2lmICFQTEFURk9STShJT1MpCisgICAgICAg
IGlmIChfQ0ZVUkxSZXF1ZXN0Q29weVByb3RvY29sUHJvcGVydHlGb3JLZXkobV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLmNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIoIkZv
cmNlSFRNTE1JTUVUeXBlIikpKQorICAgICAgICAgICAgd2tTZXRDRlVSTFJlc3BvbnNlTUlNRVR5
cGUoY2ZSZXNwb25zZSwgQ0ZTVFIoInRleHQvaHRtbCIpKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQorCisgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5
bmMobV9oYW5kbGUsIGNmUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9y
ZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworfQorCit2b2lkIEFz
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2Vp
dmVEYXRhKENGRGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoKQoreworICAgIFJl
ZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBw
cm90ZWN0b3IodGhpcyk7CisgICAgQ0ZSZXRhaW4oZGF0YSk7CisKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNG
TmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
ZGlkUmVjZWl2ZURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAo
IWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAg
ICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1
ZmZlcjo6d3JhcENGRGF0YShkYXRhKSwgb3JpZ2luYWxMZW5ndGgpOworCisgICAgICAgIENGUmVs
ZWFzZShkYXRhKTsKKyAgICB9KTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBSZWZQ
dHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJv
dGVjdG9yKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRGaW5pc2hMb2FkaW5nKGhhbmRsZT0l
cCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQo
cHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlLCAwKTsKKyAgICB9KTsK
K30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpkaWRGYWlsKENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsK
KyAgICBDRlJldGFpbihlcnJvcik7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZEZhaWwoaGFuZGxlPSVw
KSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQo
cHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRp
ZEZhaWwobV9oYW5kbGUsIFJlc291cmNlRXJyb3IoZXJyb3IpKTsKKworICAgICAgICBDRlJlbGVh
c2UoZXJyb3IpOworICAgIH0pOworfQorCitDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIEFzeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxDYWNoZVJlc3Bv
bnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UpCit7CisgICAgUmVmUHRy
PEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3Rl
Y3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsQ2FjaGVSZXNwb25zZShoYW5kbGU9
JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVk
KHByb3RlY3Rvci0+bV9oYW5kbGUpKSB7CisgICAgICAgICAgICBjb250aW51ZVdpbGxDYWNoZVJl
c3BvbnNlKG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+d2lsbENhY2hlUmVzcG9uc2VBc3luYyhtX2hhbmRsZSwgY2Fj
aGVkUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2Vt
YXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworICAgIHJldHVybiBtX2NhY2hlZFJlc3Bv
bnNlUmVzdWx0LmxlYWtSZWYoKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQXV0aENo
YWxsZW5nZVJlZiBjaGFsbGVuZ2UpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBDRlJl
dGFpbihjaGFsbGVuZ2UpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGhh
bmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2Fu
Y2VsbGVkKHByb3RlY3Rvci0+bV9oYW5kbGUpKQorICAgICAgICAgICAgbV9oYW5kbGUtPmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFs
bGVuZ2UsIG1faGFuZGxlKSk7CisKKyAgICAgICAgQ0ZSZWxlYXNlKGNoYWxsZW5nZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkU2VuZEJvZHlEYXRhKENGSW5kZXggdG90YWxCeXRlc1dyaXR0ZW4sIENGSW5k
ZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSkKK3sKKyAgICBSZWZQdHI8QXN5bmNocm9ub3Vz
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVjdG9yKHRoaXMpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAg
IExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjpkaWRTZW5kQm9keURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5k
bGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hh
bmRsZSkpCisgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKG1faGFu
ZGxlLCB0b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7CisgICAg
fSk7Cit9CisKK0Jvb2xlYW4gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQoreworICAgIFJlZlB0cjxB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBwcm90ZWN0
b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
aGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoY29ubmVjdGlvbldhc0Nh
bmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAgICAgICAgY29udGludWVTaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9oYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7Cisg
ICAgfSk7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENI
X1RJTUVfRk9SRVZFUik7CisgICAgcmV0dXJuIG1fYm9vbFJlc3VsdDsKK30KKworI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitCb29sZWFuIEFzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25T
cGFjZShDRlVSTFByb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgUmVm
UHRyPEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHBy
b3RlY3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9u
U3BhY2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoY29ubmVjdGlv
bldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAgICAgICAgY29udGlu
dWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFByb3RlY3Rpb25TcGFjZSBjb3JlUHJv
dGVjdGlvblNwYWNlID0gY29yZShwcm90ZWN0aW9uU3BhY2UpOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgaWYgKGNvcmVQcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9
PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pIHsKKyAgICAgICAg
ICAgIG1fYm9vbFJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3Jl
X3NpZ25hbChtX3NlbWFwaG9yZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAgIG1faGFuZGxlLT5jYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvcmVQcm90ZWN0aW9uU3BhY2UpOworICAgIH0pOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOworICAgIHJldHVybiBtX2Jvb2xSZXN1bHQ7Cit9CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJ
T05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9D
QUxMQkFDSykKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKK3sKKyAg
ICBSZWZQdHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZT4gcHJvdGVjdG9yKHRoaXMpOworICAgIENGUmV0YWluKGRhdGFBcnJheSk7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdv
cmssICJDRk5ldCAtIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFNlbmRCb2R5RGF0YShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
ICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkKKyAg
ICAgICAgICAgIG1faGFuZGxlLT5oYW5kbGVEYXRhQXJyYXkoZGF0YUFycmF5KTsKKyAgICAgICAg
Q0ZSZWxlYXNlKGRhdGFBcnJheSk7CisgICAgfSk7Cit9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktf
Q0ZEQVRBX0FSUkFZX0NBTExCQUNLKQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJMUmVx
dWVzdFJlZiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3Q7CisgICAg
ZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3NlbWFwaG9yZSk7Cit9CisKK3ZvaWQgQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKQoreworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1h
cGhvcmUpOworfQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBtX2Jvb2xSZXN1bHQgPSBzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1fc2VtYXBo
b3JlKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VS
ZWYgcmVzcG9uc2UpCit7CisgICAgbV9jYWNoZWRSZXNwb25zZVJlc3VsdCA9IHJlc3BvbnNlOwor
ICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1hcGhvcmUpOworfQorCisjaWYgVVNF
KFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgY2FuQXV0aGVudGljYXRlKQoreworICAgIG1fYm9v
bFJlc3VsdCA9IGNhbkF1dGhlbnRpY2F0ZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFs
KG1fc2VtYXBob3JlKTsKK30KKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NB
TExCQUNLKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENGTkVUV09S
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Bc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YzMjc1MjE5YWYwNzk2MmVmMzllYTRl
MTE4M2I1N2M3ODI4YzEyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVfaAorI2RlZmluZSBBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlX2gKKworI2lmIFVTRShD
Rk5FVFdPUkspCisKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUgPGRpc3Bh
dGNoL3F1ZXVlLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvc2VtYXBob3JlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZSBGSU5BTCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlKFJlc291cmNlSGFuZGxlKik7CisgICAgfkFzeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVj
dGlvblJlZikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIENGVVJMUmVxdWVzdFJlZiB3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYsIENGSW5kZXgg
b3JpZ2luYWxMZW5ndGgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoQ0ZFcnJvclJlZikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3Bv
bnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQXV0aENoYWxsZW5nZVJlZikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFNlbmRCb2R5RGF0YShDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBD
RkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Qm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpIE9WRVJSSURFOworI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCBCb29sZWFuIGNhblJl
c3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTFByb3RlY3Rpb25TcGFjZVJlZikgT1ZFUlJJREU7
CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyNpZiBVU0Uo
TkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpIE9WRVJSSURFOworI2VuZGlmIC8vIFVT
RShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKworICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJM
UmVzcG9uc2VSZWYpIE9WRVJSSURFOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FM
TEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShib29sKSBPVkVSUklERTsKKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQorCisgICAgZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV90IG1fc2VtYXBob3JlOworCisgICAgUmV0YWluUHRyPENGVVJM
UmVxdWVzdFJlZj4gbV9yZXF1ZXN0UmVzdWx0OworICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJl
c3BvbnNlUmVmPiBtX2NhY2hlZFJlc3BvbnNlUmVzdWx0OworICAgIGJvb2wgbV9ib29sUmVzdWx0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShDRk5FVFdP
UkspCisKKyNlbmRpZiAvLyBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCmluZGV4IDJkMzQ4ODBmZDg0M2E3ZTM4MDg5
ZGQ2OWU2ODA1MDQyNDhhMTVlZmQuLjFjYThmYTYwMmM0NDQyY2RmNWY3MzI2MDUzODM0NmYzMWRj
ZWFlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUg
IkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VFcnJvci5oIgpAQCAtNTIsMTEgKzUxLDggQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0j
aW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQogI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgogI2lmIFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCkBA
IC0xMDUsNiArMTAxLDkgQEAgc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFk
ZXIoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW4KIAogUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogeworICAgIGlmIChtX2Nvbm5l
Y3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPnJlbGVhc2VIYW5k
bGUoKTsKKwogICAgIGlmIChtX2Nvbm5lY3Rpb24pIHsKICAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIENhbmNlbGxpbmcgY29ubmVjdGlvbiAlcCAoJXMpIiwgbV9jb25uZWN0aW9uLmdldCgp
LCBtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
Q0ZVUkxDb25uZWN0aW9uQ2FuY2VsKG1fY29ubmVjdGlvbi5nZXQoKSk7CkBAIC0yMDQsMTEgKzIw
MywxOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHByb3BlcnRpZXNEaWN0aW9uYXJ5LmdldCgpLCBrQ0ZVUkxDb25uZWN0aW9uU29ja2V0U3RyZWFt
UHJvcGVydGllcywgc3RyZWFtUHJvcGVydGllcyk7CiAgICAgQ0ZSZWxlYXNlKHN0cmVhbVByb3Bl
cnRpZXMpOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIENGVVJMUmVxdWVzdFNldFNob3VsZFN0
YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LmdldCgpLCAxKTsKLSNlbmRpZgogCisKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT51c2VzQXN5bmNDYWxsYmFj
a3MoKSkKKyAgICAgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgQXN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSh0aGlzKSk7Cisg
ICAgZWxzZQorICAgICAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGFkb3B0UmVmKG5ldyBT
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUodGhpcykpOwor
I2Vsc2UKICAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGFkb3B0UmVmKG5ldyBTeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUodGhpcykpOworI2VuZGlm
CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPnNldHVwUmVxdWVzdChyZXF1ZXN0LmdldCgp
KTsKKwogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBjbGllbnQgPSBkLT5tX2Nvbm5lY3Rp
b25EZWxlZ2F0ZS0+bWFrZUNvbm5lY3Rpb25DbGllbnQoKTsKIAogICAgIGQtPm1fY29ubmVjdGlv
biA9IGFkb3B0Q0YoQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoMCwgcmVxdWVz
dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25DbGllbnQqPigmY2xpZW50
KSwgcHJvcGVydGllc0RpY3Rpb25hcnkuZ2V0KCkpKTsKQEAgLTIzMCwxNCArMjM2LDcgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgY3JlYXRlQ0ZVUkxDb25uZWN0aW9uKHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZiwgY2xpZW50
KCktPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKHRoaXMpLmdldCgpKTsKIAotI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVlKGQt
Pm1fY29ubmVjdGlvbi5nZXQoKSk7Ci0jZWxpZiBQTEFURk9STShJT1MpCi0gICAgQ0ZVUkxDb25u
ZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIFdlYlRocmVh
ZFJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZVUkxDb25u
ZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIENGUnVuTG9v
cEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbmRpZgotICAgIENGVVJM
Q29ubmVjdGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0
KCksIGxvYWRlclJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyAgICBkLT5tX2Nv
bm5lY3Rpb25EZWxlZ2F0ZS0+c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCkpOwogICAgIENGVVJMQ29ubmVjdGlvblN0YXJ0KGQtPm1fY29ubmVjdGlvbi5nZXQo
KSk7CiAKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gU3RhcnRpbmcgVVJMICVzIChoYW5kbGU9
JXAsIGNvbm49JXApIiwgZmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgdGhpcywgZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKQEAgLTI5Myw5ICsyOTIsMTIgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXMKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCkKIHsKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoKSIpOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKLQorICAgIGlmIChSZXNv
dXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpIHsKKyAgICAgICAgaWYg
KGNsaWVudC0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgICAgICBjbGllbnQtPnNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlQXN5bmModGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBjbGllbnQtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpOworICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM2NSw5ICszNjcsMTIgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGwKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQog
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKIHsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZSh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOwotCisgICAgaWYgKFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkgeworICAgICAgICBpZiAoY2xp
ZW50LT51c2VzQXN5bmNDYWxsYmFja3MoKSkKKyAgICAgICAgICAgIGNsaWVudC0+Y2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQtPmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodGhpcywgcHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCkBAIC01ODYsNCArNTkxLDM0IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmhhbmRsZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKIH0KICNl
bmRpZgogCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3RSZXN1bHQgPSByZXF1ZXN0OworICAgIGlmICghcmVxdWVzdFJlc3VsdC5pc051bGwoKSkKKyAg
ICAgICAgcmVxdWVzdFJlc3VsdC5zZXRTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9u
LmdldCgpKTsKKyAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+Y29udGludWVXaWxsU2VuZFJl
cXVlc3QocmVxdWVzdFJlc3VsdC5jZlVSTFJlcXVlc3QoVXBkYXRlSFRUUEJvZHkpKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworICAg
IGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlKGJvb2wgdXNlQ3JlZGVudGlhbFN0b3JhZ2UpCit7CisgICAgZC0+bV9jb25uZWN0aW9uRGVs
ZWdhdGUtPmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UodXNlQ3JlZGVudGlhbFN0
b3JhZ2UpOworfQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3Zv
aWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShib29sIGNhbkF1dGhlbnRpY2F0ZSkKK3sKKyAgICBkLT5tX2Nvbm5lY3Rpb25EZWxl
Z2F0ZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNhbkF1
dGhlbnRpY2F0ZSk7Cit9CisjZW5kaWYKKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVX
aWxsQ2FjaGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQoreworICAg
IGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5jb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKHJlc3Bv
bnNlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKaW5kZXggYzQzMzhlYjNiZTE4MzMwOGY1
MzA5YjgwNTU5ZTAwMTM5ZTJmNjZjNS4uNjM2OGZkMzE2YzQxY2RkNzZjNGRmMDZlNmJlMzZiN2Zm
ZDIxZGNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9S
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUuY3BwCkBAIC0yOCw2ICsyOCwxNCBAQAogCiAjaWYgVVNFKENGTkVUV09SSykKIAorI2lu
Y2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKKyNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUpCkBAIC0zOSw2ICs0NywxMSBAQCBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjp+UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSgp
CiB7CiB9CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6cmVs
ZWFzZUhhbmRsZSgpCit7CisgICAgbV9oYW5kbGUgPSBudWxscHRyOworfQorCiBDRlVSTFJlcXVl
c3RSZWYgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1
ZXN0Q2FsbGJhY2soQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0
LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+d2ls
bFNlbmRSZXF1ZXN0KGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNlKTsKQEAgLTk5
LDYgKzExMiw2MSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OmRpZFJlY2VpdmVEYXRhQXJyYXlDYWxsYmFjayhDRlVSTENvbgogfQogI2VuZGlmIC8vIFVTRShO
RVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAorUmV0YWluUHRyPENGVVJMUmVzcG9uc2VS
ZWY+IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnN5bnRoZXNpemVSZWRp
cmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoQ0ZVUkxSZXF1ZXN0UmVmIG5ld1JlcXVlc3QsIENGVVJM
UmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlmIChjZlJlZGlyZWN0UmVz
cG9uc2UpCisgICAgICAgIHJldHVybiBjZlJlZGlyZWN0UmVzcG9uc2U7CisKKyAgICBDRlVSTFJl
ZiBuZXdVUkwgPSBDRlVSTFJlcXVlc3RHZXRVUkwobmV3UmVxdWVzdCk7CisgICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBuZXdTY2hlbWUgPSBhZG9wdENGKENGVVJMQ29weVNjaGVtZShuZXdVUkwp
KTsKKworICAgIC8vIElmIHRoZSBwcm90b2NvbHMgb2YgdGhlIG5ldyByZXF1ZXN0IGFuZCB0aGUg
Y3VycmVudCByZXF1ZXN0IG1hdGNoLCB0aGlzIGlzIG5vdCBhbiBIU1RTIHJlZGlyZWN0IGFuZCB3
ZSBzaG91bGRuJ3Qgc3ludGhlc2l6ZSBhIHJlZGlyZWN0IHJlc3BvbnNlLgorICAgIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QgPSBtX2hhbmRsZS0+Y3VycmVudFJlcXVlc3Qo
KTsKKyAgICBpZiAoY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2woKSA9PSBTdHJpbmcobmV3
U2NoZW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxS
ZWY+IGN1cnJlbnRVUkwgPSBjdXJyZW50UmVxdWVzdC51cmwoKS5jcmVhdGVDRlVSTCgpOworICAg
IFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiByZXNwb25zZU1lc3NhZ2UgPSBhZG9wdENGKENG
SFRUUE1lc3NhZ2VDcmVhdGVSZXNwb25zZSgwLCAzMDIsIDAsIGtDRkhUVFBWZXJzaW9uMV8xKSk7
CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBuZXdBYnNvbHV0ZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxD
b3B5QWJzb2x1dGVVUkwobmV3VVJMKSk7CisgICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxk
VmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigiTG9jYXRpb24iKSwgQ0ZVUkxHZXRT
dHJpbmcobmV3QWJzb2x1dGVVUkwuZ2V0KCkpKTsKKyAgICBDRkhUVFBNZXNzYWdlU2V0SGVhZGVy
RmllbGRWYWx1ZShyZXNwb25zZU1lc3NhZ2UuZ2V0KCksIENGU1RSKCJDYWNoZS1Db250cm9sIiks
IENGU1RSKCJuby1zdG9yZSIpKTsKKworICAgIFJldGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiBu
ZXdSZXNwb25zZSA9IGFkb3B0Q0YoQ0ZVUkxSZXNwb25zZUNyZWF0ZVdpdGhIVFRQUmVzcG9uc2Uo
MCwgY3VycmVudFVSTC5nZXQoKSwgcmVzcG9uc2VNZXNzYWdlLmdldCgpLCBrQ0ZVUkxDYWNoZVN0
b3JhZ2VOb3RBbGxvd2VkKSk7CisgICAgcmV0dXJuIG5ld1Jlc3BvbnNlOworfQorCitSZXNvdXJj
ZVJlcXVlc3QgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y3JlYXRlUmVz
b3VyY2VSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIGNvbnN0IFJldGFpblB0cjxD
RlVSTFJlc3BvbnNlUmVmPiYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdDsKKyAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBNZXNzYWdlID0gQ0ZVUkxSZXNw
b25zZUdldEhUVFBSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICBpZiAoaHR0
cE1lc3NhZ2UgJiYgQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwTWVzc2Fn
ZSkgPT0gMzA3KSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFzdEhUVFBNZXRo
b2QgPSBtX2hhbmRsZS0+bGFzdEhUVFBNZXRob2QoKS5jcmVhdGVDRlN0cmluZygpOworICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0
Q29weUhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOworICAgICAgICBpZiAoQ0ZTdHJpbmdD
b21wYXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0KCksIG5ld01ldGhvZC5nZXQoKSwg
Q0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFzdEhUVFBNZXRob2QuZ2V0KCkpKSwg
a0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk11
dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0
Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7CisgICAgICAgICAgICB3a1NldFJlcXVl
c3RTdG9yYWdlU2Vzc2lvbihtX2hhbmRsZS0+c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJsZVJlcXVl
c3QuZ2V0KCkpOworICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2Qo
bXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9kLmdldCgpKTsKKworICAgICAgICAg
ICAgRm9ybURhdGEqIGJvZHkgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsK
KyAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobV9oYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkgJiYgIWJvZHktPmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keShtdXRhYmxlUmVxdWVzdC5nZXQoKSwg
Ym9keSk7CisKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5hbENvbnRlbnRUeXBlID0gbV9oYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOworICAgICAgICAgICAgaWYgKCFv
cmlnaW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBDRlVSTFJlcXVl
c3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIkNv
bnRlbnQtVHlwZSIpLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkp
OworCisgICAgICAgICAgICByZXF1ZXN0ID0gbXV0YWJsZVJlcXVlc3QuZ2V0KCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAocmVxdWVzdC5pc051bGwoKSkKKyAgICAgICAgcmVxdWVzdCA9
IGNmUmVxdWVzdDsKKworICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIp
ICYmIHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgbV9oYW5k
bGUtPmNvbnRleHQoKS0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgp
KQorICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVyKCk7CisgICAgcmV0dXJuIHJlcXVl
c3Q7Cit9CisKIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjptYWtlQ29ubmVjdGlvbkNsaWVudCgpIGNvbnN0CiB7CiAgICAgQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50X1Y2IGNsaWVudCA9IHsgNiwgdGhpcywgMCwgMCwgMCwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKaW5kZXggMDVlMjc3
ZmJiODZlNGY3NTJhMjc1MTRlY2UwNzYwNDMwZTcwMTg5Ni4uZTc0NWI3NDU2NGQwY2Q3OTczZjg0
MjJhOTk0MTRkNjlkNjBmNzY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlLmgKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2lmIFVTRShDRk5FVFdPUksp
CiAKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZV
UkxDb25uZWN0aW9uUHJpdi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDEsNiArNDMsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUoKTsKIAogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBtYWtl
Q29ubmVjdGlvbkNsaWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cFJlcXVlc3Qo
Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5l
Y3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZikgPSAwOworICAgIHZvaWQgcmVsZWFz
ZUhhbmRsZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENG
VVJMUmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZShib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbENhY2hl
UmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgPSAwOworI2lmIFVTRShQUk9URUNUSU9O
X1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKSA9IDA7CisjZW5kaWYgLy8gVVNFKFBS
T1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworcHJvdGVjdGVkOgorICAgIFJldGFpblB0
cjxDRlVSTFJlc3BvbnNlUmVmPiBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5
KENGVVJMUmVxdWVzdFJlZiwgQ0ZVUkxSZXNwb25zZVJlZik7CisgICAgUmVzb3VyY2VSZXF1ZXN0
IGNyZWF0ZVJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYsIGNvbnN0IFJldGFpblB0cjxD
RlVSTFJlc3BvbnNlUmVmPiYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBDRlVSTFJlcXVlc3RS
ZWYgd2lsbFNlbmRSZXF1ZXN0Q2FsbGJhY2soQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVl
c3RSZWYsIENGVVJMUmVzcG9uc2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGUuY3BwCmluZGV4IDE1NDllYjc1NTVkMjgyMzRlYzMzZDgxOTk0NTUzMWE4YzkyMzI3
NDEuLmM1YzQ0NGY4YjkwZWI2YTVmOGYwM2Q3ZGEwMTA2MDk0OTYzZjIyMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKQEAgLTMwLDEyICszMCwxMCBAQAogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRp
b25DRi5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAi
Rm9ybURhdGFTdHJlYW1DRk5ldC5oIgorI2luY2x1ZGUgIkxvYWRlclJ1bkxvb3BDRi5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNl
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgpAQCAtNDcsNiArNDUsMTAgQEAKICNpbmNsdWRlICJXZWJDb3JlVVJMUmVzcG9uc2UuaCIKICNl
bmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2Vi
Q29yZVRocmVhZC5oIgorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogI2lmIFBMQVRGT1JNKFdJ
TikKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVt
SW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgpAQCAtNTksMzEgKzYxLDI4IEBAIFN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6U3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMCiB7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxSZXNw
b25zZVJlZj4gc3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIGN1cnJlbnRSZXF1ZXN0LCBDRlVSTFJlcXVlc3RSZWYgbmV3UmVxdWVzdCwg
Q0ZVUkxSZXNwb25zZVJlZiBjZlJlZGlyZWN0UmVzcG9uc2UpCit2b2lkIFN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KENGTXV0YWJs
ZVVSTFJlcXVlc3RSZWYgcmVxdWVzdCkKIHsKLSAgICBpZiAoY2ZSZWRpcmVjdFJlc3BvbnNlKQot
ICAgICAgICByZXR1cm4gY2ZSZWRpcmVjdFJlc3BvbnNlOwotCi0gICAgQ0ZVUkxSZWYgbmV3VVJM
ID0gQ0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1JlcXVlc3QpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gbmV3U2NoZW1lID0gYWRvcHRDRihDRlVSTENvcHlTY2hlbWUobmV3VVJMKSk7Ci0KLSAg
ICAvLyBJZiB0aGUgcHJvdG9jb2xzIG9mIHRoZSBuZXcgcmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQg
cmVxdWVzdCBtYXRjaCwgdGhpcyBpcyBub3QgYW4gSFNUUyByZWRpcmVjdCBhbmQgd2Ugc2hvdWxk
bid0IHN5bnRoZXNpemUgYSByZWRpcmVjdCByZXNwb25zZS4KLSAgICBpZiAoY3VycmVudFJlcXVl
c3QudXJsKCkucHJvdG9jb2woKSA9PSBTdHJpbmcobmV3U2NoZW1lLmdldCgpKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGN1cnJlbnRVUkwgPSBjdXJyZW50
UmVxdWVzdC51cmwoKS5jcmVhdGVDRlVSTCgpOwotICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdl
UmVmPiByZXNwb25zZU1lc3NhZ2UgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXNwb25z
ZSgwLCAzMDIsIDAsIGtDRkhUVFBWZXJzaW9uMV8xKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVm
PiBuZXdBYnNvbHV0ZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxDb3B5QWJzb2x1dGVVUkwobmV3VVJMKSk7
Ci0gICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdl
dCgpLCBDRlNUUigiTG9jYXRpb24iKSwgQ0ZVUkxHZXRTdHJpbmcobmV3QWJzb2x1dGVVUkwuZ2V0
KCkpKTsKLSAgICBDRkhUVFBNZXNzYWdlU2V0SGVhZGVyRmllbGRWYWx1ZShyZXNwb25zZU1lc3Nh
Z2UuZ2V0KCksIENGU1RSKCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJuby1zdG9yZSIpKTsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQ0ZVUkxSZXF1ZXN0U2V0U2hvdWxkU3RhcnRTeW5jaHJvbm91
c2x5KHJlcXVlc3QsIDEpOworI2VuZGlmCit9CiAKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25z
ZVJlZj4gbmV3UmVzcG9uc2UgPSBhZG9wdENGKENGVVJMUmVzcG9uc2VDcmVhdGVXaXRoSFRUUFJl
c3BvbnNlKDAsIGN1cnJlbnRVUkwuZ2V0KCksIHJlc3BvbnNlTWVzc2FnZS5nZXQoKSwga0NGVVJM
Q2FjaGVTdG9yYWdlTm90QWxsb3dlZCkpOwotICAgIHJldHVybiBuZXdSZXNwb25zZTsKK3ZvaWQg
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzZXR1cENv
bm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uKQoreworI2lm
IFBMQVRGT1JNKFdJTikKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVz
c2FnZVF1ZXVlKGNvbm5lY3Rpb24pOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIENGVVJMQ29u
bmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoY29ubmVjdGlvbiwgV2ViVGhyZWFkUnVuTG9vcCgp
LCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hl
ZHVsZVdpdGhSdW5Mb29wKGNvbm5lY3Rpb24sIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKyNlbmRpZgorICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlRG93
bmxvYWRXaXRoUnVuTG9vcChjb25uZWN0aW9uLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BE
ZWZhdWx0TW9kZSk7CiB9CiAKIENGVVJMUmVxdWVzdFJlZiBTeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RS
ZWYgY2ZSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSkK
IHsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5
bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkobV9oYW5kbGUtPmN1cnJlbnRSZXF1
ZXN0KCksIGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVj
dFJlc3BvbnNlSWZOZWNlc3NhcnkoY2ZSZXF1ZXN0LCBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2Up
OwogCiAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlKSB7CiAgICAgICAgIENGUmV0YWluKGNmUmVx
dWVzdCk7CkBAIC05MiwzNCArOTEsNyBAQCBDRlVSTFJlcXVlc3RSZWYgU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlcwogCiAgICAg
TE9HKE5ldHdvcmssICJDRk5ldCAtIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxl
LCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKLSAgICBDRkhUVFBNZXNzYWdlUmVmIGh0
dHBNZXNzYWdlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNl
LmdldCgpKTsKLSAgICBpZiAoaHR0cE1lc3NhZ2UgJiYgQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNl
U3RhdHVzQ29kZShodHRwTWVzc2FnZSkgPT0gMzA3KSB7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gbGFzdEhUVFBNZXRob2QgPSBtX2hhbmRsZS0+bGFzdEhUVFBNZXRob2QoKS5jcmVh
dGVDRlN0cmluZygpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9
IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOwot
ICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0
KCksIG5ld01ldGhvZC5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFz
dEhUVFBNZXRob2QuZ2V0KCkpKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKLSAgICAg
ICAgICAgIFJldGFpblB0cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9
IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7Ci0g
ICAgICAgICAgICB3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihtX2hhbmRsZS0+c3RvcmFnZVNl
c3Npb24oKSwgbXV0YWJsZVJlcXVlc3QuZ2V0KCkpOwotICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0
U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9k
LmdldCgpKTsKLQotICAgICAgICAgICAgRm9ybURhdGEqIGJvZHkgPSBtX2hhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkuaHR0cEJvZHkoKTsKLSAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2Uo
bV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkgJiYg
IWJvZHktPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keSht
dXRhYmxlUmVxdWVzdC5nZXQoKSwgYm9keSk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBvcmlnaW5h
bENvbnRlbnRUeXBlID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgp
OwotICAgICAgICAgICAgaWYgKCFvcmlnaW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVx
dWVzdC5nZXQoKSwgQ0ZTVFIoIkNvbnRlbnQtVHlwZSIpLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwotCi0gICAgICAgICAgICByZXF1ZXN0ID0gbXV0YWJsZVJl
cXVlc3QuZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVlc3QuaXNOdWxsKCkp
Ci0gICAgICAgIHJlcXVlc3QgPSBjZlJlcXVlc3Q7Ci0KLSAgICAvLyBTaG91bGQgbm90IHNldCBS
ZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2Vj
dXJlIG9uZS4KLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBw
cm90b2NvbElzKHJlcXVlc3QuaHR0cFJlZmVycmVyKCksICJodHRwcyIpICYmIG1faGFuZGxlLT5j
b250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKLSAg
ICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOwotCisgICAgUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoY2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3Bv
bnNlKTsKICAgICBtX2hhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVz
cG9uc2UuZ2V0KCkpOwogCiAgICAgaWYgKHJlcXVlc3QuaXNOdWxsKCkpCkBAIC0zMDEsNiArMjcz
LDI4IEBAIHZvaWQgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyCiB9CiAjZW5kaWYgLy8gVVNFKE5FVFdPUktf
Q0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogCit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1
ZXN0UmVmKQoreworfQorCit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworfQorCit2b2lk
IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGlu
dWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sKQoreworfQorCit2b2lkIFN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsQ2Fj
aGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKQoreworfQorCisjaWYgVVNFKFBST1RF
Q1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoYm9vbCkKK3sKK30KKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFD
RV9BVVRIX0NBTExCQUNLKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZS5oCmluZGV4IDc0M2Y0NWUwNDAwMWVmZTk4NDAxZWUyMTUzODFjNGZkMTVjODdl
ZmYuLjkyNDJhYzVkOTdkYWMwYmQ4Njk2NDE1ZDNjNjM5YTU3MGE3ZjkxZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUuaApAQCAtNDQsNiArNDQsOSBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gVVNFKE5FVFdPUktf
Q0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBzZXR1
cFJlcXVlc3QoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldHVwQ29ubmVjdGlvblNjaGVkdWxpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmKSBPVkVSUklE
RTsKKwogICAgIHZpcnR1YWwgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTFJl
cXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoQ0ZVUkxSZXNwb25zZVJlZikgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVz
cG9uc2VSZWYpIE9WRVJSSURFOwpAQCAtNTMsNiArNTYsMTQgQEAgcHJpdmF0ZToKICNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZpcnR1YWwgQm9vbGVhbiBjYW5S
ZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYpIE9WRVJSSURF
OwogI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVXaWxsQ2FjaGVSZXNw
b25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyNpZiBVU0UoUFJPVEVDVElP
Tl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCkgT1ZFUlJJREU7CisjZW5kaWYgLy8g
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218918</attachid>
            <date>2013-12-10 16:12:48 -0800</date>
            <delta_ts>2013-12-10 16:52:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131210161247.patch</filename>
            <type>text/plain</type>
            <size>52067</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRhZGFkNDI5ZTRmY2Yx
MzYyMjdhZTVjZDQ0Mzk3OGU4OGI2M2RkMC4uY2M1MzQwMDU3YjExZjM2OTBjMmY0YjkyYjJlMjAz
N2Q3ODAyZThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTEyLTEwICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNl
Y29uZCBzdWJjbGFzcyBvZiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOiBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLgorICAgICAg
ICBUaGUgZGlmZmVyZW5jZSBpcyB0aG9zZSBvYmplY3RzIGhhbmRsZSB0aGUgbmV0d29yayBjYWxs
YmFjayBvbiBhIGRpZmZlcmVudCBxdWV1ZS4KKworICAgICAgICBTb21lIGNvbW1vbiBjb2RlIGhh
cyBiZWVuIHJlZmFjdG9yZWQgaW4gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZSB0byByZWR1Y2UgZHVwbGljYXRlZCBjb2RlLgorCisgICAgICAgIFRoZSBpbml0aWFsaXphdGlv
biBvZiB0aGUgcmVxdWVzdCBhbmQgY29ubmVjdGlvbiBpcyBtb3ZlZCB0byB0aGUgc3ViY2xhc3Mg
dG8gY2xlYW4gdXAgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVD
bGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6fkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdGlvbldhc0NhbmNlbGxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpzZXR1cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFNlbmRCb2R5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51
ZVdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c3ludGhl
c2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
c2V0dXBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29u
dGludWVXaWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaDoKKwog
MjAxMy0xMi0xMCAgUm9iIEJ1aXMgIDxyb2IuYnVpc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBD
bGVhbiB1cCBTVkdTY3JpcHRFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2RjYzkwY2I4YzQyZDgzZDA1YmY3YTU0YWUy
Y2ExMTRmZjBmZTU3Ny4uZGU5NjBkZGE1OWEyOTI0YjRkMTAxN2QyMWU1MTk2M2RkMjNjNjA3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtOTEwLDYgKzkxMCw4IEBACiAJCTI2NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSAqLzsgfTsKIAkJMjY1
NTQxNTIxNDg5QjIzMzAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQgLyog
Q3Vyc29ySU9TLmNwcCAqLzsgfTsKIAkJMjY5MjM5OTYxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjkyMzk5MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCAqLzsgfTsKKwkJMjZDMTVDRjYxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTVDRjQxODU3RTE1RDAwRjE1QzAz
IC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3Bw
ICovOyB9OworCQkyNkMxNUNGNzE4NTdFMTVFMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTVDRjUxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCAqLzsgfTsKIAkJ
MjZDMTdBM0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE3QTNDMTQ5MUQyRDQwMEQxMkJB
MiAvKiBGaWxlU3lzdGVtSU9TLmggKi87IH07CiAJCTI2QzE3QTNGMTQ5MUQyRDQwMEQxMkJBMiAv
KiBGaWxlU3lzdGVtSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZDMTdBM0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi87
IH07CiAJCTI2RTk4QTEwMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU5OEEw
RjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovOyB9OwpAQCAt
NzU2NCw2ICs3NTY2LDggQEAKIAkJMjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklP
Uy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXJzb3JJT1MuY3Bw
OyBwYXRoID0gaW9zL0N1cnNvcklPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2OTIzOTkxMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OTIzOTkyMTUwNUUxQUEw
MDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyNkMxNUNGNDE4NTdFMTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZDMTVDRjUx
ODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNkMxN0EzQzE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlP
Uy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlU3lzdGVtSU9TLmg7IHBh
dGggPSBpb3MvRmlsZVN5c3RlbUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
NkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEZpbGVTeXN0ZW1JT1MubW07IHBhdGggPSBpb3Mv
RmlsZVN5c3RlbUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZFOThBMEYx
MzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTk1NDAsNiArMTk1NDQsOCBAQAogCQlCMkYzNEZFNzBFODJG
ODE3MDBGNjI3Q0QgLyogY2YgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTI2QzE1Q0Y0MTg1N0UxNUQwMEYxNUMwMyAvKiBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLywKKwkJCQkyNkMxNUNGNTE4NTdF
MTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oICovLAogCQkJCTdFRTY4NDREMTJEMjZFMzgwMEU3OTQxNSAvKiBBdXRoZW50aWNh
dGlvbkNGLmggKi8sCiAJCQkJN0VFNjg0NEUxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmggKi8sCiAJCQkJN0VFNjg0NTAxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZVN0b3JhZ2VDRk5ldC5jcHAgKi8sCkBAIC0yMjE3OSw2ICsyMjE4NSw3IEBACiAJCQkJNDlCMzc2
MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
NTY4NkNBMTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlvRGVjb2Rlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMjZDMTVDRjcxODU3RTE1RTAwRjE1QzAzIC8qIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdDNTM0M0ZEMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzYxRjAxMTIwOTVDODcwMDdBM0M2NyAvKiBBdG9taWNT
dHJpbmdLZXllZE1SVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUZGOEY2MDE4MDc0NDIx
MDAxMzI2NzQgLyogU3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzU0LDYgKzI1
NzYxLDcgQEAKIAkJCQk0OUIzNzYwQzE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDU2ODZDOTEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRp
b0RlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1
IC8qIEFzeW5jRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkMxNUNGNjE4NTdF
MTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEM0QTgwRTA5RDU2MzI3MDAwM0FDOEQg
LyogQXR0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDYyOUVBNDE1NEI0NzE2MDAwNkQwMjYg
LyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTVG
RjYxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCmluZGV4IDMwOTg4NzYzNDA4Y2VlYTc1ZWZjOWZjODJhMTg5MzI0ZjNkNjVhN2IuLjIx
OWU0N2U0OWNmZTlhZTU0ZmE5YTFhMDRmNjhlYjZhNzQxZmJlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKQEAgLTY5LDYgKzY5LDcg
QEAgdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwogI2VuZGlmCiAKICNpZiBVU0UoQ0ZO
RVRXT1JLKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWY7CiB0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxDb25uZWN0aW9uKiBDRlVS
TENvbm5lY3Rpb25SZWY7CiB0eXBlZGVmIGludCBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9s
aWN5OwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3RvcmFnZSogQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZjsKQEAgLTIxMyw4ICsyMTQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gQ2FsbGVkIGluIHJlc3BvbnNlIHRvIFJlc291
cmNlSGFuZGxlQ2xpZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKCkuCisjaWYgVVNFKENGTkVU
V09SSykKKyAgICB2b2lkIGNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNw
b25zZVJlZik7CisjZWxpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBjb250aW51ZVdpbGxDYWNo
ZVJlc3BvbnNlKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNw
cAppbmRleCA2Mzk3ZDcwMjdlYjRiNDQxOWQxZGM4YjJlM2MwNjBkNWIzYTliZjZlLi44ZWI0ZWVi
NmFmNTQ5ZjlhYTBjZGU4NTI2NGQ3YThmYWE4MmFjMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNwcApAQCAt
NjEsNyArNjEsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUNsaWVudDo6Y2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGEKIH0KICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFVTRShDRk5FVFdPUkspCit2b2lkIFJlc291cmNlSGFuZGxlQ2xp
ZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCit7CisgICAgaGFuZGxlLT5jb250aW51ZVdpbGxD
YWNoZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30KKyNlbGlmIFBMQVRGT1JNKE1BQykKIHZvaWQgUmVz
b3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgTlNDYWNoZWRVUkxSZXNwb25zZSAqcmVzcG9uc2UpCiB7CiAgICAgaGFuZGxlLT5j
b250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKHJlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAppbmRleCBhMmQ4
NzFkMjNiNzczYTA5YjlkOWY3OWYzMjA0NzA2ZmJmY2FiN2QzLi5iM2E1OTIzMDQyODUwYmFjNGI3
YWRmMjM3MzdjOGFhNTEyNjYxYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCkBAIC04OSw4ICs4OSwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENsaWVudCB3aWxsIHBhc3MgYW4gdXBkYXRl
ZCByZXF1ZXN0IHVzaW5nIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UoKSB3aGVuIHJlYWR5LgogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJik7CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYm
ICFVU0UoQ0ZORVRXT1JLKQogICAgICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQg
cmVxdWVzdCB1c2luZyBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZSgp
IHdoZW4gcmVhZHkuCisjaWYgVVNFKENGTkVUV09SSykKKyAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNl
UmVmKTsKKyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNo
ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopOwog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MjE0YWMzMjBhYmQ5
MDgzYWQ3YTg1OGM5MTM1MTdmMzIwZjFiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuaCIKKworI2lmIFVTRShDRk5FVFdPUkspCisKKyNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkNGLmgiCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKKyAgICA6IFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUoaGFuZGxlKQorICAgICwgbV9xdWV1ZShkaXNwYXRjaF9xdWV1ZV9j
cmVhdGUoImNvbS5hcHBsZS5XZWJDb3JlL0NGTmV0d29yayIsIERJU1BBVENIX1FVRVVFX1NFUklB
TCkpCisgICAgLCBtX3NlbWFwaG9yZShkaXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApKQorewor
ICAgIGRpc3BhdGNoX3F1ZXVlX3QgYmFja2dyb3VuZFF1ZXVlID0gZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ISUdILCAwKTsKKyAgICBkaXNwYXRjaF9z
ZXRfdGFyZ2V0X3F1ZXVlKG1fcXVldWUsIGJhY2tncm91bmRRdWV1ZSk7Cit9CisKK0FzeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6On5Bc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKCkKK3sKKyAgICBkaXNwYXRjaF9y
ZWxlYXNlKG1fc2VtYXBob3JlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcXVldWUpOworfQor
CitzdGF0aWMgYm9vbCBjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUpCit7CisgICAgcmV0dXJuICFoYW5kbGU7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVS
TFJlcXVlc3RSZWYpCit7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5l
Y3Rpb25SZWYgY29ubmVjdGlvbikKK3sKKyAgICBDRlVSTENvbm5lY3Rpb25TZXREZWxlZ2F0ZURp
c3BhdGNoUXVldWUoY29ubmVjdGlvbiwgbV9xdWV1ZSk7Cit9CisKK0NGVVJMUmVxdWVzdFJlZiBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmln
aW5hbFJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIExPRyhO
ZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1f
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgICAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkg
eworICAgICAgICAgICAgY29udGludWVXaWxsU2VuZFJlcXVlc3QobnVsbHB0cik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25z
ZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNl
c3NhcnkoY2ZSZXF1ZXN0LCBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBpZiAo
IXJlZGlyZWN0UmVzcG9uc2UpIHsKKyAgICAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChjZlJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3Qo
Y2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgbV9oYW5kbGUtPndpbGxTZW5k
UmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICB9KTsKKworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOworCisgICAgcmV0dXJuIG1fcmVxdWVzdFJlc3VsdC5sZWFrUmVmKCk7Cit9CisKK3ZvaWQg
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBSZWZQdHI8
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVj
dG9yKHRoaXMpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGU9
JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVk
KHByb3RlY3Rvci0+bV9oYW5kbGUpKSB7CisgICAgICAgICAgICBjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
QXZvaWQgTUlNRSB0eXBlIHNuaWZmaW5nIGlmIHRoZSByZXNwb25zZSBjb21lcyBiYWNrIGFzIDMw
NCBOb3QgTW9kaWZpZWQuCisgICAgICAgIENGSFRUUE1lc3NhZ2VSZWYgbXNnID0gd2tHZXRDRlVS
TFJlc3BvbnNlSFRUUFJlc3BvbnNlKGNmUmVzcG9uc2UpOworICAgICAgICBpbnQgc3RhdHVzQ29k
ZSA9IG1zZyA/IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUobXNnKSA6IDA7CisK
KyAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0KQorICAgICAgICAgICAgYWRqdXN0TUlNRVR5
cGVJZk5lY2Vzc2FyeShjZlJlc3BvbnNlKTsKKworI2lmICFQTEFURk9STShJT1MpCisgICAgICAg
IGlmIChfQ0ZVUkxSZXF1ZXN0Q29weVByb3RvY29sUHJvcGVydHlGb3JLZXkobV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLmNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIoIkZv
cmNlSFRNTE1JTUVUeXBlIikpKQorICAgICAgICAgICAgd2tTZXRDRlVSTFJlc3BvbnNlTUlNRVR5
cGUoY2ZSZXNwb25zZSwgQ0ZTVFIoInRleHQvaHRtbCIpKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQorCisgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5
bmMobV9oYW5kbGUsIGNmUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9y
ZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworfQorCit2b2lkIEFz
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2Vp
dmVEYXRhKENGRGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoKQoreworICAgIFJl
ZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBw
cm90ZWN0b3IodGhpcyk7CisgICAgQ0ZSZXRhaW4oZGF0YSk7CisKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNG
TmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
ZGlkUmVjZWl2ZURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAo
IWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAg
ICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1
ZmZlcjo6d3JhcENGRGF0YShkYXRhKSwgb3JpZ2luYWxMZW5ndGgpOworCisgICAgICAgIENGUmVs
ZWFzZShkYXRhKTsKKyAgICB9KTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBSZWZQ
dHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJv
dGVjdG9yKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRGaW5pc2hMb2FkaW5nKGhhbmRsZT0l
cCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQo
cHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlLCAwKTsKKyAgICB9KTsK
K30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpkaWRGYWlsKENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsK
KyAgICBDRlJldGFpbihlcnJvcik7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZEZhaWwoaGFuZGxlPSVw
KSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQo
cHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRp
ZEZhaWwobV9oYW5kbGUsIFJlc291cmNlRXJyb3IoZXJyb3IpKTsKKworICAgICAgICBDRlJlbGVh
c2UoZXJyb3IpOworICAgIH0pOworfQorCitDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIEFzeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxDYWNoZVJlc3Bv
bnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UpCit7CisgICAgUmVmUHRy
PEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3Rl
Y3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsQ2FjaGVSZXNwb25zZShoYW5kbGU9
JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVk
KHByb3RlY3Rvci0+bV9oYW5kbGUpKSB7CisgICAgICAgICAgICBjb250aW51ZVdpbGxDYWNoZVJl
c3BvbnNlKG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+d2lsbENhY2hlUmVzcG9uc2VBc3luYyhtX2hhbmRsZSwgY2Fj
aGVkUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2Vt
YXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworICAgIHJldHVybiBtX2NhY2hlZFJlc3Bv
bnNlUmVzdWx0LmxlYWtSZWYoKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQXV0aENo
YWxsZW5nZVJlZiBjaGFsbGVuZ2UpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBDRlJl
dGFpbihjaGFsbGVuZ2UpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGhh
bmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2Fu
Y2VsbGVkKHByb3RlY3Rvci0+bV9oYW5kbGUpKQorICAgICAgICAgICAgbV9oYW5kbGUtPmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFs
bGVuZ2UsIG1faGFuZGxlKSk7CisKKyAgICAgICAgQ0ZSZWxlYXNlKGNoYWxsZW5nZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkU2VuZEJvZHlEYXRhKENGSW5kZXggdG90YWxCeXRlc1dyaXR0ZW4sIENGSW5k
ZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSkKK3sKKyAgICBSZWZQdHI8QXN5bmNocm9ub3Vz
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVjdG9yKHRoaXMpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAg
IExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjpkaWRTZW5kQm9keURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5k
bGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hh
bmRsZSkpCisgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKG1faGFu
ZGxlLCB0b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7CisgICAg
fSk7Cit9CisKK0Jvb2xlYW4gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQoreworICAgIFJlZlB0cjxB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBwcm90ZWN0
b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
aGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoY29ubmVjdGlvbldhc0Nh
bmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAgICAgICAgY29udGludWVTaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9oYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7Cisg
ICAgfSk7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENI
X1RJTUVfRk9SRVZFUik7CisgICAgcmV0dXJuIG1fYm9vbFJlc3VsdDsKK30KKworI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitCb29sZWFuIEFzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25T
cGFjZShDRlVSTFByb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgUmVm
UHRyPEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHBy
b3RlY3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9u
U3BhY2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoY29ubmVjdGlv
bldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAgICAgICAgY29udGlu
dWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFByb3RlY3Rpb25TcGFjZSBjb3JlUHJv
dGVjdGlvblNwYWNlID0gY29yZShwcm90ZWN0aW9uU3BhY2UpOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgaWYgKGNvcmVQcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9
PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pIHsKKyAgICAgICAg
ICAgIG1fYm9vbFJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3Jl
X3NpZ25hbChtX3NlbWFwaG9yZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAgIG1faGFuZGxlLT5jYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvcmVQcm90ZWN0aW9uU3BhY2UpOworICAgIH0pOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOworICAgIHJldHVybiBtX2Jvb2xSZXN1bHQ7Cit9CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJ
T05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9D
QUxMQkFDSykKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKK3sKKyAg
ICBSZWZQdHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZT4gcHJvdGVjdG9yKHRoaXMpOworICAgIENGUmV0YWluKGRhdGFBcnJheSk7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdv
cmssICJDRk5ldCAtIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFNlbmRCb2R5RGF0YShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
ICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkKKyAg
ICAgICAgICAgIG1faGFuZGxlLT5oYW5kbGVEYXRhQXJyYXkoZGF0YUFycmF5KTsKKyAgICAgICAg
Q0ZSZWxlYXNlKGRhdGFBcnJheSk7CisgICAgfSk7Cit9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktf
Q0ZEQVRBX0FSUkFZX0NBTExCQUNLKQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJMUmVx
dWVzdFJlZiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3Q7CisgICAg
ZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3NlbWFwaG9yZSk7Cit9CisKK3ZvaWQgQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKQoreworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1h
cGhvcmUpOworfQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBtX2Jvb2xSZXN1bHQgPSBzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1fc2VtYXBo
b3JlKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VS
ZWYgcmVzcG9uc2UpCit7CisgICAgbV9jYWNoZWRSZXNwb25zZVJlc3VsdCA9IHJlc3BvbnNlOwor
ICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1hcGhvcmUpOworfQorCisjaWYgVVNF
KFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgY2FuQXV0aGVudGljYXRlKQoreworICAgIG1fYm9v
bFJlc3VsdCA9IGNhbkF1dGhlbnRpY2F0ZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFs
KG1fc2VtYXBob3JlKTsKK30KKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NB
TExCQUNLKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENGTkVUV09S
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Bc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YzMjc1MjE5YWYwNzk2MmVmMzllYTRl
MTE4M2I1N2M3ODI4YzEyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVfaAorI2RlZmluZSBBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlX2gKKworI2lmIFVTRShD
Rk5FVFdPUkspCisKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUgPGRpc3Bh
dGNoL3F1ZXVlLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvc2VtYXBob3JlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZSBGSU5BTCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlKFJlc291cmNlSGFuZGxlKik7CisgICAgfkFzeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVj
dGlvblJlZikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIENGVVJMUmVxdWVzdFJlZiB3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYsIENGSW5kZXgg
b3JpZ2luYWxMZW5ndGgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoQ0ZFcnJvclJlZikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3Bv
bnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQXV0aENoYWxsZW5nZVJlZikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFNlbmRCb2R5RGF0YShDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBD
RkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Qm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpIE9WRVJSSURFOworI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCBCb29sZWFuIGNhblJl
c3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTFByb3RlY3Rpb25TcGFjZVJlZikgT1ZFUlJJREU7
CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyNpZiBVU0Uo
TkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpIE9WRVJSSURFOworI2VuZGlmIC8vIFVT
RShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKworICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJM
UmVzcG9uc2VSZWYpIE9WRVJSSURFOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FM
TEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShib29sKSBPVkVSUklERTsKKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQorCisgICAgZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV90IG1fc2VtYXBob3JlOworCisgICAgUmV0YWluUHRyPENGVVJM
UmVxdWVzdFJlZj4gbV9yZXF1ZXN0UmVzdWx0OworICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJl
c3BvbnNlUmVmPiBtX2NhY2hlZFJlc3BvbnNlUmVzdWx0OworICAgIGJvb2wgbV9ib29sUmVzdWx0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShDRk5FVFdP
UkspCisKKyNlbmRpZiAvLyBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCmluZGV4IDJkMzQ4ODBmZDg0M2E3ZTM4MDg5
ZGQ2OWU2ODA1MDQyNDhhMTVlZmQuLmQwZjQyYjA0NDQ3ODU4OTYyZWUzZjExYzZmMDBiMjJkN2M4
MTY1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUg
IkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VFcnJvci5oIgpAQCAtNTIsMTEgKzUxLDggQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0j
aW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQogI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgogI2lmIFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCkBA
IC0xMDUsNiArMTAxLDkgQEAgc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFk
ZXIoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW4KIAogUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogeworICAgIGlmIChtX2Nvbm5l
Y3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPnJlbGVhc2VIYW5k
bGUoKTsKKwogICAgIGlmIChtX2Nvbm5lY3Rpb24pIHsKICAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIENhbmNlbGxpbmcgY29ubmVjdGlvbiAlcCAoJXMpIiwgbV9jb25uZWN0aW9uLmdldCgp
LCBtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
Q0ZVUkxDb25uZWN0aW9uQ2FuY2VsKG1fY29ubmVjdGlvbi5nZXQoKSk7CkBAIC0yMDQsMTEgKzIw
MywxOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHByb3BlcnRpZXNEaWN0aW9uYXJ5LmdldCgpLCBrQ0ZVUkxDb25uZWN0aW9uU29ja2V0U3RyZWFt
UHJvcGVydGllcywgc3RyZWFtUHJvcGVydGllcyk7CiAgICAgQ0ZSZWxlYXNlKHN0cmVhbVByb3Bl
cnRpZXMpOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIENGVVJMUmVxdWVzdFNldFNob3VsZFN0
YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LmdldCgpLCAxKTsKLSNlbmRpZgogCisKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT51c2VzQXN5bmNDYWxsYmFj
a3MoKSkKKyAgICAgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgQXN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSh0aGlzKSk7Cisg
ICAgZWxzZQorICAgICAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGFkb3B0UmVmKG5ldyBT
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUodGhpcykpOwor
I2Vsc2UKICAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGFkb3B0UmVmKG5ldyBTeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUodGhpcykpOworI2VuZGlm
CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPnNldHVwUmVxdWVzdChyZXF1ZXN0LmdldCgp
KTsKKwogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBjbGllbnQgPSBkLT5tX2Nvbm5lY3Rp
b25EZWxlZ2F0ZS0+bWFrZUNvbm5lY3Rpb25DbGllbnQoKTsKIAogICAgIGQtPm1fY29ubmVjdGlv
biA9IGFkb3B0Q0YoQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoMCwgcmVxdWVz
dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25DbGllbnQqPigmY2xpZW50
KSwgcHJvcGVydGllc0RpY3Rpb25hcnkuZ2V0KCkpKTsKQEAgLTIzMCwxNCArMjM2LDcgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgY3JlYXRlQ0ZVUkxDb25uZWN0aW9uKHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZiwgY2xpZW50
KCktPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKHRoaXMpLmdldCgpKTsKIAotI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVlKGQt
Pm1fY29ubmVjdGlvbi5nZXQoKSk7Ci0jZWxpZiBQTEFURk9STShJT1MpCi0gICAgQ0ZVUkxDb25u
ZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIFdlYlRocmVh
ZFJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZVUkxDb25u
ZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIENGUnVuTG9v
cEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbmRpZgotICAgIENGVVJM
Q29ubmVjdGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0
KCksIGxvYWRlclJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyAgICBkLT5tX2Nv
bm5lY3Rpb25EZWxlZ2F0ZS0+c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCkpOwogICAgIENGVVJMQ29ubmVjdGlvblN0YXJ0KGQtPm1fY29ubmVjdGlvbi5nZXQo
KSk7CiAKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gU3RhcnRpbmcgVVJMICVzIChoYW5kbGU9
JXAsIGNvbm49JXApIiwgZmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgdGhpcywgZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKQEAgLTI5Myw5ICsyOTIsMTIgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXMKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCkKIHsKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoKSIpOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKLQorICAgIGlmIChSZXNv
dXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpIHsKKyAgICAgICAgaWYg
KGNsaWVudC0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgICAgICBjbGllbnQtPnNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlQXN5bmModGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBjbGllbnQtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpOworICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM2NSw5ICszNjcsMTIgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGwKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQog
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKIHsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZSh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOwotCisgICAgaWYgKFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkgeworICAgICAgICBpZiAoY2xp
ZW50LT51c2VzQXN5bmNDYWxsYmFja3MoKSkKKyAgICAgICAgICAgIGNsaWVudC0+Y2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQtPmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodGhpcywgcHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCkBAIC01NTIsNiArNTU3LDM2IEBAIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRSZXF1ZXN0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZC0+bV9jdXJyZW50UmVxdWVzdDsKIH0KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdDsKKyAgICBp
ZiAoIXJlcXVlc3RSZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJlcXVlc3RSZXN1bHQuc2V0U3Rv
cmFnZVNlc3Npb24oZC0+bV9zdG9yYWdlU2Vzc2lvbi5nZXQoKSk7CisgICAgZC0+bV9jb25uZWN0
aW9uRGVsZWdhdGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3RSZXN1bHQuY2ZVUkxS
ZXF1ZXN0KFVwZGF0ZUhUVFBCb2R5KSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRp
bnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+
Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sIHVzZUNyZWRlbnRpYWxTdG9y
YWdlKQoreworICAgIGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5jb250aW51ZVNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKHVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKK30KKworI2lmIFVTRShQUk9U
RUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51
ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCBjYW5BdXRoZW50aWNh
dGUpCit7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjYW5BdXRoZW50aWNhdGUpOworfQorI2VuZGlmCisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRV
UkxSZXNwb25zZVJlZiByZXNwb25zZSkKK3sKKyAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+
Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7Cit9CiAjZW5kaWYgLy8gVVNFKENG
TkVUV09SSykKIAogI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCmluZGV4IGM0
MzM4ZWIzYmUxODMzMDhmNTMwOWI4MDU1OWUwMDEzOWUyZjY2YzUuLjYzNjhmZDMxNmM0MWNkZDc2
YzRkZjA2ZTZiZTM2YjdmZmQyMWRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcApAQCAtMjgsNiArMjgsMTQgQEAKIAogI2lmIFVTRShD
Rk5FVFdPUkspCiAKKyNpbmNsdWRlICJGb3JtRGF0YVN0cmVhbUNGTmV0LmgiCisjaW5jbHVkZSAi
TmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorCisjaWYg
UExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpAQCAtMzksNiArNDcsMTEgQEAgUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6flJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUoKQogewogfQogCit2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUoKQoreworICAgIG1faGFuZGxlID0gbnVsbHB0cjsK
K30KKwogQ0ZVUkxSZXF1ZXN0UmVmIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGU6OndpbGxTZW5kUmVxdWVzdENhbGxiYWNrKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxSZXF1
ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5hbFJlZGlyZWN0UmVzcG9u
c2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqPihjb25zdF9jYXN0PHZvaWQqPihj
bGllbnRJbmZvKSktPndpbGxTZW5kUmVxdWVzdChjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RS
ZXNwb25zZSk7CkBAIC05OSw2ICsxMTIsNjEgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5Q2FsbGJhY2soQ0ZVUkxDb24KIH0K
ICNlbmRpZiAvLyBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCiAKK1JldGFpblB0
cjxDRlVSTFJlc3BvbnNlUmVmPiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
OjpzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KENGVVJMUmVxdWVzdFJlZiBu
ZXdSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBp
ZiAoY2ZSZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICByZXR1cm4gY2ZSZWRpcmVjdFJlc3BvbnNl
OworCisgICAgQ0ZVUkxSZWYgbmV3VVJMID0gQ0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1JlcXVlc3Qp
OworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmV3U2NoZW1lID0gYWRvcHRDRihDRlVSTENv
cHlTY2hlbWUobmV3VVJMKSk7CisKKyAgICAvLyBJZiB0aGUgcHJvdG9jb2xzIG9mIHRoZSBuZXcg
cmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQgcmVxdWVzdCBtYXRjaCwgdGhpcyBpcyBub3QgYW4gSFNU
UyByZWRpcmVjdCBhbmQgd2Ugc2hvdWxkbid0IHN5bnRoZXNpemUgYSByZWRpcmVjdCByZXNwb25z
ZS4KKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGN1cnJlbnRSZXF1ZXN0ID0gbV9oYW5kbGUt
PmN1cnJlbnRSZXF1ZXN0KCk7CisgICAgaWYgKGN1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29s
KCkgPT0gU3RyaW5nKG5ld1NjaGVtZS5nZXQoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmV0YWluUHRyPENGVVJMUmVmPiBjdXJyZW50VVJMID0gY3VycmVudFJlcXVlc3QudXJsKCkuY3Jl
YXRlQ0ZVUkwoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcmVzcG9uc2VNZXNz
YWdlID0gYWRvcHRDRihDRkhUVFBNZXNzYWdlQ3JlYXRlUmVzcG9uc2UoMCwgMzAyLCAwLCBrQ0ZI
VFRQVmVyc2lvbjFfMSkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gbmV3QWJzb2x1dGVVUkwg
PSBhZG9wdENGKENGVVJMQ29weUFic29sdXRlVVJMKG5ld1VSTCkpOworICAgIENGSFRUUE1lc3Nh
Z2VTZXRIZWFkZXJGaWVsZFZhbHVlKHJlc3BvbnNlTWVzc2FnZS5nZXQoKSwgQ0ZTVFIoIkxvY2F0
aW9uIiksIENGVVJMR2V0U3RyaW5nKG5ld0Fic29sdXRlVVJMLmdldCgpKSk7CisgICAgQ0ZIVFRQ
TWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigi
Q2FjaGUtQ29udHJvbCIpLCBDRlNUUigibm8tc3RvcmUiKSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZV
UkxSZXNwb25zZVJlZj4gbmV3UmVzcG9uc2UgPSBhZG9wdENGKENGVVJMUmVzcG9uc2VDcmVhdGVX
aXRoSFRUUFJlc3BvbnNlKDAsIGN1cnJlbnRVUkwuZ2V0KCksIHJlc3BvbnNlTWVzc2FnZS5nZXQo
KSwga0NGVVJMQ2FjaGVTdG9yYWdlTm90QWxsb3dlZCkpOworICAgIHJldHVybiBuZXdSZXNwb25z
ZTsKK30KKworUmVzb3VyY2VSZXF1ZXN0IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmNyZWF0ZVJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0LCBj
b25zdCBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4mIHJlZGlyZWN0UmVzcG9uc2UpCit7Cisg
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwTWVz
c2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZS5nZXQo
KSk7CisgICAgaWYgKGh0dHBNZXNzYWdlICYmIENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1
c0NvZGUoaHR0cE1lc3NhZ2UpID09IDMwNykgeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGxhc3RIVFRQTWV0aG9kID0gbV9oYW5kbGUtPmxhc3RIVFRQTWV0aG9kKCkuY3JlYXRlQ0ZT
dHJpbmcoKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuZXdNZXRob2QgPSBhZG9w
dENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdE1ldGhvZChjZlJlcXVlc3QpKTsKKyAgICAg
ICAgaWYgKENGU3RyaW5nQ29tcGFyZVdpdGhPcHRpb25zKGxhc3RIVFRQTWV0aG9kLmdldCgpLCBu
ZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0TGVuZ3RoKGxhc3RIVFRQ
TWV0aG9kLmdldCgpKSksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpKSB7CisgICAgICAgICAg
ICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4gbXV0YWJsZVJlcXVlc3QgPSBhZG9w
dENGKENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5KDAsIGNmUmVxdWVzdCkpOworICAgICAg
ICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24obV9oYW5kbGUtPnN0b3JhZ2VTZXNzaW9u
KCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldEhU
VFBSZXF1ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0LmdldCgpLCBsYXN0SFRUUE1ldGhvZC5nZXQo
KSk7CisKKyAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLmh0dHBCb2R5KCk7CisgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKG1faGFu
ZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCksICJHRVQiKSAmJiBib2R5ICYmICFib2R5
LT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgV2ViQ29yZTo6c2V0SFRUUEJvZHkobXV0YWJs
ZVJlcXVlc3QuZ2V0KCksIGJvZHkpOworCisgICAgICAgICAgICBTdHJpbmcgb3JpZ2luYWxDb250
ZW50VHlwZSA9IG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5cGUoKTsKKyAg
ICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRlckZpZWxkVmFsdWUobXV0YWJsZVJlcXVlc3Qu
Z2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwgb3JpZ2luYWxDb250ZW50VHlwZS5jcmVhdGVD
RlN0cmluZygpLmdldCgpKTsKKworICAgICAgICAgICAgcmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0
LmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVlc3QuaXNOdWxsKCkpCisg
ICAgICAgIHJlcXVlc3QgPSBjZlJlcXVlc3Q7CisKKyAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJv
dG9jb2xJcygiaHR0cHMiKSAmJiBwcm90b2NvbElzKHJlcXVlc3QuaHR0cFJlZmVycmVyKCksICJo
dHRwcyIpICYmIG1faGFuZGxlLT5jb250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QoKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCiBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjYgUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6bWFrZUNvbm5lY3Rpb25DbGllbnQoKSBj
b25zdAogewogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBjbGllbnQgPSB7IDYsIHRoaXMs
IDAsIDAsIDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oCmluZGV4IDA1ZTI3N2ZiYjg2ZTRmNzUyYTI3NTE0ZWNlMDc2MDQzMGU3MDE4OTYuLmU3NDVi
NzQ1NjRkMGNkNzk3M2Y4NDIyYTk5NDE0ZDY5ZDYwZjc2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oCkBAIC0yOCw3ICsyOCw5IEBACiAKICNp
ZiBVU0UoQ0ZORVRXT1JLKQogCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSA8Q0ZOZXR3b3JrL0NGVVJMQ29ubmVjdGlvblByaXYuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQxLDYgKzQzLDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKCk7CiAKICAgICBDRlVSTENvbm5lY3Rp
b25DbGllbnRfVjYgbWFrZUNvbm5lY3Rpb25DbGllbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5lY3Rpb25SZWYpID0gMDsK
KyAgICB2b2lkIHJlbGVhc2VIYW5kbGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVdp
bGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVl
U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
b250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpID0gMDsKKyNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgdm9pZCBj
b250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCkgPSAwOwor
I2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisKK3Byb3RlY3Rl
ZDoKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gc3ludGhlc2l6ZVJlZGlyZWN0UmVz
cG9uc2VJZk5lY2Vzc2FyeShDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWYpOworICAg
IFJlc291cmNlUmVxdWVzdCBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBj
b25zdCBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4mKTsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrKENGVVJMQ29ubmVjdGlv
blJlZiwgQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAppbmRleCAxNTQ5ZWI3NTU1ZDI4MjM0ZWMzM2Q4
MTk5NDU1MzFhOGM5MjMyNzQxLi5jNWM0NDRmOGI5MGViNmE1ZjhmMDNkN2RhMDEwNjA5NDk2M2Yy
MjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCkBAIC0zMCwxMiArMzAsMTAgQEAKIAogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uQ0YuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5oIgotI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKKyNpbmNsdWRlICJMb2FkZXJS
dW5Mb29wQ0YuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya2luZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYgKzQ1LDEwIEBACiAjaW5jbHVkZSAiV2ViQ29yZVVS
TFJlc3BvbnNlLmgiCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCisjaWYgUExBVEZPUk0oSU9T
KQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisK
ICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KQEAgLTU5
LDMxICs2MSwyOCBAQCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTAogewogfQogCi1zdGF0aWMgUmV0
YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNl
c3NhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCwgQ0ZVUkxSZXF1ZXN0
UmVmIG5ld1JlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNlKQordm9p
ZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnNldHVw
UmVxdWVzdChDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJlcXVlc3QpCiB7Ci0gICAgaWYgKGNmUmVk
aXJlY3RSZXNwb25zZSkKLSAgICAgICAgcmV0dXJuIGNmUmVkaXJlY3RSZXNwb25zZTsKLQotICAg
IENGVVJMUmVmIG5ld1VSTCA9IENGVVJMUmVxdWVzdEdldFVSTChuZXdSZXF1ZXN0KTsKLSAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld1NjaGVtZSA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1l
KG5ld1VSTCkpOwotCi0gICAgLy8gSWYgdGhlIHByb3RvY29scyBvZiB0aGUgbmV3IHJlcXVlc3Qg
YW5kIHRoZSBjdXJyZW50IHJlcXVlc3QgbWF0Y2gsIHRoaXMgaXMgbm90IGFuIEhTVFMgcmVkaXJl
Y3QgYW5kIHdlIHNob3VsZG4ndCBzeW50aGVzaXplIGEgcmVkaXJlY3QgcmVzcG9uc2UuCi0gICAg
aWYgKGN1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29sKCkgPT0gU3RyaW5nKG5ld1NjaGVtZS5n
ZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjdXJy
ZW50VVJMID0gY3VycmVudFJlcXVlc3QudXJsKCkuY3JlYXRlQ0ZVUkwoKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcmVzcG9uc2VNZXNzYWdlID0gYWRvcHRDRihDRkhUVFBNZXNz
YWdlQ3JlYXRlUmVzcG9uc2UoMCwgMzAyLCAwLCBrQ0ZIVFRQVmVyc2lvbjFfMSkpOwotICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gbmV3QWJzb2x1dGVVUkwgPSBhZG9wdENGKENGVVJMQ29weUFic29s
dXRlVVJMKG5ld1VSTCkpOwotICAgIENGSFRUUE1lc3NhZ2VTZXRIZWFkZXJGaWVsZFZhbHVlKHJl
c3BvbnNlTWVzc2FnZS5nZXQoKSwgQ0ZTVFIoIkxvY2F0aW9uIiksIENGVVJMR2V0U3RyaW5nKG5l
d0Fic29sdXRlVVJMLmdldCgpKSk7Ci0gICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFs
dWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigiQ2FjaGUtQ29udHJvbCIpLCBDRlNUUigi
bm8tc3RvcmUiKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENGVVJMUmVxdWVzdFNldFNob3Vs
ZFN0YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LCAxKTsKKyNlbmRpZgorfQogCi0gICAgUmV0YWlu
UHRyPENGVVJMUmVzcG9uc2VSZWY+IG5ld1Jlc3BvbnNlID0gYWRvcHRDRihDRlVSTFJlc3BvbnNl
Q3JlYXRlV2l0aEhUVFBSZXNwb25zZSgwLCBjdXJyZW50VVJMLmdldCgpLCByZXNwb25zZU1lc3Nh
Z2UuZ2V0KCksIGtDRlVSTENhY2hlU3RvcmFnZU5vdEFsbG93ZWQpKTsKLSAgICByZXR1cm4gbmV3
UmVzcG9uc2U7Cit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5lY3Rpb25SZWYgY29u
bmVjdGlvbikKK3sKKyNpZiBQTEFURk9STShXSU4pCisgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1
bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShjb25uZWN0aW9uKTsKKyNlbGlmIFBMQVRGT1JNKElP
UykKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhSdW5Mb29wKGNvbm5lY3Rpb24sIFdl
YlRocmVhZFJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgQ0ZV
UkxDb25uZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChjb25uZWN0aW9uLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisjZW5kaWYKKyAgICBDRlVSTENvbm5l
Y3Rpb25TY2hlZHVsZURvd25sb2FkV2l0aFJ1bkxvb3AoY29ubmVjdGlvbiwgbG9hZGVyUnVuTG9v
cCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogfQogCiBDRlVSTFJlcXVlc3RSZWYgU3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVl
c3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5hbFJl
ZGlyZWN0UmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHJlZGly
ZWN0UmVzcG9uc2UgPSBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KG1faGFu
ZGxlLT5jdXJyZW50UmVxdWVzdCgpLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25z
ZSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHJlZGlyZWN0UmVzcG9uc2UgPSBz
eW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KGNmUmVxdWVzdCwgb3JpZ2luYWxS
ZWRpcmVjdFJlc3BvbnNlKTsKIAogICAgIGlmICghcmVkaXJlY3RSZXNwb25zZSkgewogICAgICAg
ICBDRlJldGFpbihjZlJlcXVlc3QpOwpAQCAtOTIsMzQgKzkxLDcgQEAgQ0ZVUkxSZXF1ZXN0UmVm
IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNl
bmRSZXF1ZXMKIAogICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBTeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdChoYW5kbGU9JXAp
ICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Ci0gICAgQ0ZI
VFRQTWVzc2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2Uo
cmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7Ci0gICAgaWYgKGh0dHBNZXNzYWdlICYmIENGSFRUUE1l
c3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cE1lc3NhZ2UpID09IDMwNykgewotICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhc3RIVFRQTWV0aG9kID0gbV9oYW5kbGUtPmxhc3RI
VFRQTWV0aG9kKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBuZXdNZXRob2QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdE1ldGhv
ZChjZlJlcXVlc3QpKTsKLSAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZVdpdGhPcHRpb25zKGxh
c3RIVFRQTWV0aG9kLmdldCgpLCBuZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3Ry
aW5nR2V0TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdldCgpKSksIGtDRkNvbXBhcmVDYXNlSW5zZW5z
aXRpdmUpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4g
bXV0YWJsZVJlcXVlc3QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5KDAs
IGNmUmVxdWVzdCkpOwotICAgICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24obV9o
YW5kbGUtPnN0b3JhZ2VTZXNzaW9uKCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKLSAgICAgICAg
ICAgIENGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0LmdldCgp
LCBsYXN0SFRUUE1ldGhvZC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0g
bV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7Ci0gICAgICAgICAgICBpZiAoIWVx
dWFsSWdub3JpbmdDYXNlKG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCksICJH
RVQiKSAmJiBib2R5ICYmICFib2R5LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgV2ViQ29y
ZTo6c2V0SFRUUEJvZHkobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGJvZHkpOwotCi0gICAgICAgICAg
ICBTdHJpbmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5o
dHRwQ29udGVudFR5cGUoKTsKLSAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRlckZpZWxk
VmFsdWUobXV0YWJsZVJlcXVlc3QuZ2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwgb3JpZ2lu
YWxDb250ZW50VHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLQotICAgICAgICAgICAgcmVx
dWVzdCA9IG11dGFibGVSZXF1ZXN0LmdldCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChy
ZXF1ZXN0LmlzTnVsbCgpKQotICAgICAgICByZXF1ZXN0ID0gY2ZSZXF1ZXN0OwotCi0gICAgLy8g
U2hvdWxkIG5vdCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVz
b3VyY2UgdG8gbm9uLXNlY3VyZSBvbmUuCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29s
SXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCAiaHR0cHMi
KSAmJiBtX2hhbmRsZS0+Y29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KCkpCi0gICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKLQorICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KGNmUmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgbV9oYW5kbGUtPndpbGxTZW5kUmVxdWVzdChyZXF1
ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKIAogICAgIGlmIChyZXF1ZXN0LmlzTnVsbCgp
KQpAQCAtMzAxLDYgKzI3MywyOCBAQCB2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycgogfQogI2VuZGlm
IC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAordm9pZCBTeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KENGVVJMUmVxdWVzdFJlZikKK3sKK30KKwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
KCkKK3sKK30KKwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkKK3sKK30K
Kwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikKK3sKK30K
KworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIFN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpCit7Cit9CisjZW5kaWYgLy8gVVNF
KFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZS4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaAppbmRleCA3NDNmNDVlMDQwMDFlZmU5ODQwMWVl
MjE1MzgxYzRmZDE1Yzg3ZWZmLi45MjQyYWM1ZDk3ZGFjMGJkODY5NjQxNWQzYzYzOWE1NzBhN2Y5
MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogI2VuZGlm
IC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAogcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVj
dGlvblJlZikgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIENGVVJMUmVxdWVzdFJlZiB3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiB3aWxsQ2FjaGVSZXNwb25z
ZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKQEAgLTUzLDYgKzU2LDE0IEBAIHBy
aXZhdGU6CiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICB2aXJ0
dWFsIEJvb2xlYW4gY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKENGVVJMUHJvdGVjdGlvblNw
YWNlUmVmKSBPVkVSUklERTsKICNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NB
TExCQUNLKQorCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJM
UmVxdWVzdFJlZikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlU2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgT1ZFUlJJREU7Cisj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2aXJ0dWFsIHZvaWQg
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpIE9WRVJS
SURFOworI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218922</attachid>
            <date>2013-12-10 16:52:22 -0800</date>
            <delta_ts>2013-12-10 17:52:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131210165222.patch</filename>
            <type>text/plain</type>
            <size>52219</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRhZGFkNDI5ZTRmY2Yx
MzYyMjdhZTVjZDQ0Mzk3OGU4OGI2M2RkMC4uY2M1MzQwMDU3YjExZjM2OTBjMmY0YjkyYjJlMjAz
N2Q3ODAyZThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTEyLTEwICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNl
Y29uZCBzdWJjbGFzcyBvZiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOiBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLgorICAgICAg
ICBUaGUgZGlmZmVyZW5jZSBpcyB0aG9zZSBvYmplY3RzIGhhbmRsZSB0aGUgbmV0d29yayBjYWxs
YmFjayBvbiBhIGRpZmZlcmVudCBxdWV1ZS4KKworICAgICAgICBTb21lIGNvbW1vbiBjb2RlIGhh
cyBiZWVuIHJlZmFjdG9yZWQgaW4gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZSB0byByZWR1Y2UgZHVwbGljYXRlZCBjb2RlLgorCisgICAgICAgIFRoZSBpbml0aWFsaXphdGlv
biBvZiB0aGUgcmVxdWVzdCBhbmQgY29ubmVjdGlvbiBpcyBtb3ZlZCB0byB0aGUgc3ViY2xhc3Mg
dG8gY2xlYW4gdXAgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVD
bGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6fkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdGlvbldhc0NhbmNlbGxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpzZXR1cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFNlbmRCb2R5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51
ZVdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c3ludGhl
c2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
c2V0dXBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29u
dGludWVXaWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaDoKKwog
MjAxMy0xMi0xMCAgUm9iIEJ1aXMgIDxyb2IuYnVpc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBD
bGVhbiB1cCBTVkdTY3JpcHRFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2RjYzkwY2I4YzQyZDgzZDA1YmY3YTU0YWUy
Y2ExMTRmZjBmZTU3Ny4uZGU5NjBkZGE1OWEyOTI0YjRkMTAxN2QyMWU1MTk2M2RkMjNjNjA3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtOTEwLDYgKzkxMCw4IEBACiAJCTI2NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlF
dmVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2NTU0MTM4MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSAqLzsgfTsKIAkJMjY1
NTQxNTIxNDg5QjIzMzAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQgLyog
Q3Vyc29ySU9TLmNwcCAqLzsgfTsKIAkJMjY5MjM5OTYxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjkyMzk5MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCAqLzsgfTsKKwkJMjZDMTVDRjYxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTVDRjQxODU3RTE1RDAwRjE1QzAz
IC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3Bw
ICovOyB9OworCQkyNkMxNUNGNzE4NTdFMTVFMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTVDRjUxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCAqLzsgfTsKIAkJ
MjZDMTdBM0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE3QTNDMTQ5MUQyRDQwMEQxMkJB
MiAvKiBGaWxlU3lzdGVtSU9TLmggKi87IH07CiAJCTI2QzE3QTNGMTQ5MUQyRDQwMEQxMkJBMiAv
KiBGaWxlU3lzdGVtSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZDMTdBM0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi87
IH07CiAJCTI2RTk4QTEwMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU5OEEw
RjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovOyB9OwpAQCAt
NzU2NCw2ICs3NTY2LDggQEAKIAkJMjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklP
Uy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXJzb3JJT1MuY3Bw
OyBwYXRoID0gaW9zL0N1cnNvcklPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2OTIzOTkxMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OTIzOTkyMTUwNUUxQUEw
MDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyNkMxNUNGNDE4NTdFMTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZDMTVDRjUx
ODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNkMxN0EzQzE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlP
Uy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlU3lzdGVtSU9TLmg7IHBh
dGggPSBpb3MvRmlsZVN5c3RlbUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
NkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEZpbGVTeXN0ZW1JT1MubW07IHBhdGggPSBpb3Mv
RmlsZVN5c3RlbUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZFOThBMEYx
MzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTk1NDAsNiArMTk1NDQsOCBAQAogCQlCMkYzNEZFNzBFODJG
ODE3MDBGNjI3Q0QgLyogY2YgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTI2QzE1Q0Y0MTg1N0UxNUQwMEYxNUMwMyAvKiBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLywKKwkJCQkyNkMxNUNGNTE4NTdF
MTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oICovLAogCQkJCTdFRTY4NDREMTJEMjZFMzgwMEU3OTQxNSAvKiBBdXRoZW50aWNh
dGlvbkNGLmggKi8sCiAJCQkJN0VFNjg0NEUxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmggKi8sCiAJCQkJN0VFNjg0NTAxMkQyNkUzODAwRTc5NDE1IC8qIENvb2tp
ZVN0b3JhZ2VDRk5ldC5jcHAgKi8sCkBAIC0yMjE3OSw2ICsyMjE4NSw3IEBACiAJCQkJNDlCMzc2
MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
NTY4NkNBMTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlvRGVjb2Rlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMjZDMTVDRjcxODU3RTE1RTAwRjE1QzAzIC8qIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdDNTM0M0ZEMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzYxRjAxMTIwOTVDODcwMDdBM0M2NyAvKiBBdG9taWNT
dHJpbmdLZXllZE1SVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUZGOEY2MDE4MDc0NDIx
MDAxMzI2NzQgLyogU3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzU0LDYgKzI1
NzYxLDcgQEAKIAkJCQk0OUIzNzYwQzE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDU2ODZDOTEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRp
b0RlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1
IC8qIEFzeW5jRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkMxNUNGNjE4NTdF
MTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEM0QTgwRTA5RDU2MzI3MDAwM0FDOEQg
LyogQXR0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDYyOUVBNDE1NEI0NzE2MDAwNkQwMjYg
LyogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTVG
RjYxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCmluZGV4IDMwOTg4NzYzNDA4Y2VlYTc1ZWZjOWZjODJhMTg5MzI0ZjNkNjVhN2IuLjIx
OWU0N2U0OWNmZTlhZTU0ZmE5YTFhMDRmNjhlYjZhNzQxZmJlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKQEAgLTY5LDYgKzY5LDcg
QEAgdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwogI2VuZGlmCiAKICNpZiBVU0UoQ0ZO
RVRXT1JLKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWY7CiB0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxDb25uZWN0aW9uKiBDRlVS
TENvbm5lY3Rpb25SZWY7CiB0eXBlZGVmIGludCBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9s
aWN5OwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3RvcmFnZSogQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZjsKQEAgLTIxMyw4ICsyMTQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gQ2FsbGVkIGluIHJlc3BvbnNlIHRvIFJlc291
cmNlSGFuZGxlQ2xpZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKCkuCisjaWYgVVNFKENGTkVU
V09SSykKKyAgICB2b2lkIGNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNw
b25zZVJlZik7CisjZWxpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBjb250aW51ZVdpbGxDYWNo
ZVJlc3BvbnNlKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNw
cAppbmRleCA2Mzk3ZDcwMjdlYjRiNDQxOWQxZGM4YjJlM2MwNjBkNWIzYTliZjZlLi44ZWI0ZWVi
NmFmNTQ5ZjlhYTBjZGU4NTI2NGQ3YThmYWE4MmFjMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmNwcApAQCAt
NjEsNyArNjEsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUNsaWVudDo6Y2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGEKIH0KICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFVTRShDRk5FVFdPUkspCit2b2lkIFJlc291cmNlSGFuZGxlQ2xp
ZW50Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCit7CisgICAgaGFuZGxlLT5jb250aW51ZVdpbGxD
YWNoZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30KKyNlbGlmIFBMQVRGT1JNKE1BQykKIHZvaWQgUmVz
b3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgTlNDYWNoZWRVUkxSZXNwb25zZSAqcmVzcG9uc2UpCiB7CiAgICAgaGFuZGxlLT5j
b250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKHJlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAppbmRleCBhMmQ4
NzFkMjNiNzczYTA5YjlkOWY3OWYzMjA0NzA2ZmJmY2FiN2QzLi5iM2E1OTIzMDQyODUwYmFjNGI3
YWRmMjM3MzdjOGFhNTEyNjYxYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCkBAIC04OSw4ICs4OSwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENsaWVudCB3aWxsIHBhc3MgYW4gdXBkYXRl
ZCByZXF1ZXN0IHVzaW5nIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UoKSB3aGVuIHJlYWR5LgogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJik7CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYm
ICFVU0UoQ0ZORVRXT1JLKQogICAgICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQg
cmVxdWVzdCB1c2luZyBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZSgp
IHdoZW4gcmVhZHkuCisjaWYgVVNFKENGTkVUV09SSykKKyAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNl
UmVmKTsKKyNlbGlmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNo
ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopOwog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MjE0YWMzMjBhYmQ5
MDgzYWQ3YTg1OGM5MTM1MTdmMzIwZjFiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuaCIKKworI2lmIFVTRShDRk5FVFdPUkspCisKKyNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkNGLmgiCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKKyAgICA6IFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUoaGFuZGxlKQorICAgICwgbV9xdWV1ZShkaXNwYXRjaF9xdWV1ZV9j
cmVhdGUoImNvbS5hcHBsZS5XZWJDb3JlL0NGTmV0d29yayIsIERJU1BBVENIX1FVRVVFX1NFUklB
TCkpCisgICAgLCBtX3NlbWFwaG9yZShkaXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApKQorewor
ICAgIGRpc3BhdGNoX3F1ZXVlX3QgYmFja2dyb3VuZFF1ZXVlID0gZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ISUdILCAwKTsKKyAgICBkaXNwYXRjaF9z
ZXRfdGFyZ2V0X3F1ZXVlKG1fcXVldWUsIGJhY2tncm91bmRRdWV1ZSk7Cit9CisKK0FzeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6On5Bc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKCkKK3sKKyAgICBkaXNwYXRjaF9y
ZWxlYXNlKG1fc2VtYXBob3JlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcXVldWUpOworfQor
CitzdGF0aWMgYm9vbCBjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUpCit7CisgICAgcmV0dXJuICFoYW5kbGU7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVS
TFJlcXVlc3RSZWYpCit7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5l
Y3Rpb25SZWYgY29ubmVjdGlvbikKK3sKKyAgICBDRlVSTENvbm5lY3Rpb25TZXREZWxlZ2F0ZURp
c3BhdGNoUXVldWUoY29ubmVjdGlvbiwgbV9xdWV1ZSk7Cit9CisKK0NGVVJMUmVxdWVzdFJlZiBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmln
aW5hbFJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIExPRyhO
ZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1f
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgICAgICBpZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkg
eworICAgICAgICAgICAgY29udGludWVXaWxsU2VuZFJlcXVlc3QobnVsbHB0cik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25z
ZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNl
c3NhcnkoY2ZSZXF1ZXN0LCBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBpZiAo
IXJlZGlyZWN0UmVzcG9uc2UpIHsKKyAgICAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChjZlJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3Qo
Y2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgbV9oYW5kbGUtPndpbGxTZW5k
UmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICB9KTsKKworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOworCisgICAgcmV0dXJuIG1fcmVxdWVzdFJlc3VsdC5sZWFrUmVmKCk7Cit9CisKK3ZvaWQg
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBSZWZQdHI8
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVj
dG9yKHRoaXMpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGU9
JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVk
KHByb3RlY3Rvci0+bV9oYW5kbGUpKSB7CisgICAgICAgICAgICBjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
QXZvaWQgTUlNRSB0eXBlIHNuaWZmaW5nIGlmIHRoZSByZXNwb25zZSBjb21lcyBiYWNrIGFzIDMw
NCBOb3QgTW9kaWZpZWQuCisgICAgICAgIENGSFRUUE1lc3NhZ2VSZWYgbXNnID0gd2tHZXRDRlVS
TFJlc3BvbnNlSFRUUFJlc3BvbnNlKGNmUmVzcG9uc2UpOworICAgICAgICBpbnQgc3RhdHVzQ29k
ZSA9IG1zZyA/IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUobXNnKSA6IDA7CisK
KyAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0KQorICAgICAgICAgICAgYWRqdXN0TUlNRVR5
cGVJZk5lY2Vzc2FyeShjZlJlc3BvbnNlKTsKKworI2lmICFQTEFURk9STShJT1MpCisgICAgICAg
IGlmIChfQ0ZVUkxSZXF1ZXN0Q29weVByb3RvY29sUHJvcGVydHlGb3JLZXkobV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLmNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIoIkZv
cmNlSFRNTE1JTUVUeXBlIikpKQorICAgICAgICAgICAgd2tTZXRDRlVSTFJlc3BvbnNlTUlNRVR5
cGUoY2ZSZXNwb25zZSwgQ0ZTVFIoInRleHQvaHRtbCIpKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQorCisgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5
bmMobV9oYW5kbGUsIGNmUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9y
ZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworfQorCit2b2lkIEFz
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2Vp
dmVEYXRhKENGRGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoKQoreworICAgIFJl
ZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBw
cm90ZWN0b3IodGhpcyk7CisgICAgQ0ZSZXRhaW4oZGF0YSk7CisKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNG
TmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
ZGlkUmVjZWl2ZURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAo
IWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAg
ICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1
ZmZlcjo6d3JhcENGRGF0YShkYXRhKSwgb3JpZ2luYWxMZW5ndGgpOworCisgICAgICAgIENGUmVs
ZWFzZShkYXRhKTsKKyAgICB9KTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBSZWZQ
dHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJv
dGVjdG9yKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRGaW5pc2hMb2FkaW5nKGhhbmRsZT0l
cCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQo
cHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlLCAwKTsKKyAgICB9KTsK
K30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpkaWRGYWlsKENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsK
KyAgICBDRlJldGFpbihlcnJvcik7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZEZhaWwoaGFuZGxlPSVw
KSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQo
cHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRp
ZEZhaWwobV9oYW5kbGUsIFJlc291cmNlRXJyb3IoZXJyb3IpKTsKKworICAgICAgICBDRlJlbGVh
c2UoZXJyb3IpOworICAgIH0pOworfQorCitDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIEFzeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxDYWNoZVJlc3Bv
bnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UpCit7CisgICAgUmVmUHRy
PEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3Rl
Y3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsQ2FjaGVSZXNwb25zZShoYW5kbGU9
JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChjb25uZWN0aW9uV2FzQ2FuY2VsbGVk
KHByb3RlY3Rvci0+bV9oYW5kbGUpKSB7CisgICAgICAgICAgICBjb250aW51ZVdpbGxDYWNoZVJl
c3BvbnNlKG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+d2lsbENhY2hlUmVzcG9uc2VBc3luYyhtX2hhbmRsZSwgY2Fj
aGVkUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2Vt
YXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworICAgIHJldHVybiBtX2NhY2hlZFJlc3Bv
bnNlUmVzdWx0LmxlYWtSZWYoKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQXV0aENo
YWxsZW5nZVJlZiBjaGFsbGVuZ2UpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBDRlJl
dGFpbihjaGFsbGVuZ2UpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGhh
bmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2Fu
Y2VsbGVkKHByb3RlY3Rvci0+bV9oYW5kbGUpKQorICAgICAgICAgICAgbV9oYW5kbGUtPmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFs
bGVuZ2UsIG1faGFuZGxlKSk7CisKKyAgICAgICAgQ0ZSZWxlYXNlKGNoYWxsZW5nZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkU2VuZEJvZHlEYXRhKENGSW5kZXggdG90YWxCeXRlc1dyaXR0ZW4sIENGSW5k
ZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSkKK3sKKyAgICBSZWZQdHI8QXN5bmNocm9ub3Vz
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVjdG9yKHRoaXMpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAg
IExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjpkaWRTZW5kQm9keURhdGEoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5k
bGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hh
bmRsZSkpCisgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKG1faGFu
ZGxlLCB0b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7CisgICAg
fSk7Cit9CisKK0Jvb2xlYW4gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQoreworICAgIFJlZlB0cjxB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBwcm90ZWN0
b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
aGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoY29ubmVjdGlvbldhc0Nh
bmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAgICAgICAgY29udGludWVTaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9oYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7Cisg
ICAgfSk7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENI
X1RJTUVfRk9SRVZFUik7CisgICAgcmV0dXJuIG1fYm9vbFJlc3VsdDsKK30KKworI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitCb29sZWFuIEFzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25T
cGFjZShDRlVSTFByb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgUmVm
UHRyPEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHBy
b3RlY3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9u
U3BhY2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoY29ubmVjdGlv
bldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAgICAgICAgY29udGlu
dWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFByb3RlY3Rpb25TcGFjZSBjb3JlUHJv
dGVjdGlvblNwYWNlID0gY29yZShwcm90ZWN0aW9uU3BhY2UpOworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgaWYgKGNvcmVQcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9
PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pIHsKKyAgICAgICAg
ICAgIG1fYm9vbFJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3Jl
X3NpZ25hbChtX3NlbWFwaG9yZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAgIG1faGFuZGxlLT5jYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvcmVQcm90ZWN0aW9uU3BhY2UpOworICAgIH0pOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVW
RVIpOworICAgIHJldHVybiBtX2Jvb2xSZXN1bHQ7Cit9CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJ
T05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9D
QUxMQkFDSykKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKK3sKKyAg
ICBSZWZQdHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZT4gcHJvdGVjdG9yKHRoaXMpOworICAgIENGUmV0YWluKGRhdGFBcnJheSk7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdv
cmssICJDRk5ldCAtIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFNlbmRCb2R5RGF0YShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
ICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkKKyAg
ICAgICAgICAgIG1faGFuZGxlLT5oYW5kbGVEYXRhQXJyYXkoZGF0YUFycmF5KTsKKyAgICAgICAg
Q0ZSZWxlYXNlKGRhdGFBcnJheSk7CisgICAgfSk7Cit9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktf
Q0ZEQVRBX0FSUkFZX0NBTExCQUNLKQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJMUmVx
dWVzdFJlZiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3Q7CisgICAg
ZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3NlbWFwaG9yZSk7Cit9CisKK3ZvaWQgQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKQoreworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1h
cGhvcmUpOworfQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBtX2Jvb2xSZXN1bHQgPSBzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1fc2VtYXBo
b3JlKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VS
ZWYgcmVzcG9uc2UpCit7CisgICAgbV9jYWNoZWRSZXNwb25zZVJlc3VsdCA9IHJlc3BvbnNlOwor
ICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1hcGhvcmUpOworfQorCisjaWYgVVNF
KFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgY2FuQXV0aGVudGljYXRlKQoreworICAgIG1fYm9v
bFJlc3VsdCA9IGNhbkF1dGhlbnRpY2F0ZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFs
KG1fc2VtYXBob3JlKTsKK30KKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NB
TExCQUNLKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENGTkVUV09S
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Bc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YzMjc1MjE5YWYwNzk2MmVmMzllYTRl
MTE4M2I1N2M3ODI4YzEyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVfaAorI2RlZmluZSBBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlX2gKKworI2lmIFVTRShD
Rk5FVFdPUkspCisKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUgPGRpc3Bh
dGNoL3F1ZXVlLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvc2VtYXBob3JlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZSBGSU5BTCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlKFJlc291cmNlSGFuZGxlKik7CisgICAgfkFzeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVj
dGlvblJlZikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIENGVVJMUmVxdWVzdFJlZiB3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYsIENGSW5kZXgg
b3JpZ2luYWxMZW5ndGgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoQ0ZFcnJvclJlZikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3Bv
bnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQXV0aENoYWxsZW5nZVJlZikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFNlbmRCb2R5RGF0YShDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBD
RkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Qm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpIE9WRVJSSURFOworI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCBCb29sZWFuIGNhblJl
c3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTFByb3RlY3Rpb25TcGFjZVJlZikgT1ZFUlJJREU7
CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyNpZiBVU0Uo
TkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpIE9WRVJSSURFOworI2VuZGlmIC8vIFVT
RShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKworICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJM
UmVzcG9uc2VSZWYpIE9WRVJSSURFOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FM
TEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShib29sKSBPVkVSUklERTsKKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQorCisgICAgZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV90IG1fc2VtYXBob3JlOworCisgICAgUmV0YWluUHRyPENGVVJM
UmVxdWVzdFJlZj4gbV9yZXF1ZXN0UmVzdWx0OworICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJl
c3BvbnNlUmVmPiBtX2NhY2hlZFJlc3BvbnNlUmVzdWx0OworICAgIGJvb2wgbV9ib29sUmVzdWx0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShDRk5FVFdP
UkspCisKKyNlbmRpZiAvLyBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCmluZGV4IDJkMzQ4ODBmZDg0M2E3ZTM4MDg5
ZGQ2OWU2ODA1MDQyNDhhMTVlZmQuLmQwZjQyYjA0NDQ3ODU4OTYyZWUzZjExYzZmMDBiMjJkN2M4
MTY1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUg
IkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VFcnJvci5oIgpAQCAtNTIsMTEgKzUxLDggQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0j
aW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQogI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgogI2lmIFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCkBA
IC0xMDUsNiArMTAxLDkgQEAgc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFk
ZXIoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDcmVkZW4KIAogUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogeworICAgIGlmIChtX2Nvbm5l
Y3Rpb25EZWxlZ2F0ZSkKKyAgICAgICAgbV9jb25uZWN0aW9uRGVsZWdhdGUtPnJlbGVhc2VIYW5k
bGUoKTsKKwogICAgIGlmIChtX2Nvbm5lY3Rpb24pIHsKICAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIENhbmNlbGxpbmcgY29ubmVjdGlvbiAlcCAoJXMpIiwgbV9jb25uZWN0aW9uLmdldCgp
LCBtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
Q0ZVUkxDb25uZWN0aW9uQ2FuY2VsKG1fY29ubmVjdGlvbi5nZXQoKSk7CkBAIC0yMDQsMTEgKzIw
MywxOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHByb3BlcnRpZXNEaWN0aW9uYXJ5LmdldCgpLCBrQ0ZVUkxDb25uZWN0aW9uU29ja2V0U3RyZWFt
UHJvcGVydGllcywgc3RyZWFtUHJvcGVydGllcyk7CiAgICAgQ0ZSZWxlYXNlKHN0cmVhbVByb3Bl
cnRpZXMpOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIENGVVJMUmVxdWVzdFNldFNob3VsZFN0
YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LmdldCgpLCAxKTsKLSNlbmRpZgogCisKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT51c2VzQXN5bmNDYWxsYmFj
a3MoKSkKKyAgICAgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgQXN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSh0aGlzKSk7Cisg
ICAgZWxzZQorICAgICAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGFkb3B0UmVmKG5ldyBT
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUodGhpcykpOwor
I2Vsc2UKICAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZSA9IGFkb3B0UmVmKG5ldyBTeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUodGhpcykpOworI2VuZGlm
CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPnNldHVwUmVxdWVzdChyZXF1ZXN0LmdldCgp
KTsKKwogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBjbGllbnQgPSBkLT5tX2Nvbm5lY3Rp
b25EZWxlZ2F0ZS0+bWFrZUNvbm5lY3Rpb25DbGllbnQoKTsKIAogICAgIGQtPm1fY29ubmVjdGlv
biA9IGFkb3B0Q0YoQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoMCwgcmVxdWVz
dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25DbGllbnQqPigmY2xpZW50
KSwgcHJvcGVydGllc0RpY3Rpb25hcnkuZ2V0KCkpKTsKQEAgLTIzMCwxNCArMjM2LDcgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgY3JlYXRlQ0ZVUkxDb25uZWN0aW9uKHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZiwgY2xpZW50
KCktPmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKHRoaXMpLmdldCgpKTsKIAotI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVlKGQt
Pm1fY29ubmVjdGlvbi5nZXQoKSk7Ci0jZWxpZiBQTEFURk9STShJT1MpCi0gICAgQ0ZVUkxDb25u
ZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIFdlYlRocmVh
ZFJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZVUkxDb25u
ZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIENGUnVuTG9v
cEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbmRpZgotICAgIENGVVJM
Q29ubmVjdGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0
KCksIGxvYWRlclJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyAgICBkLT5tX2Nv
bm5lY3Rpb25EZWxlZ2F0ZS0+c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCkpOwogICAgIENGVVJMQ29ubmVjdGlvblN0YXJ0KGQtPm1fY29ubmVjdGlvbi5nZXQo
KSk7CiAKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gU3RhcnRpbmcgVVJMICVzIChoYW5kbGU9
JXAsIGNvbm49JXApIiwgZmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgdGhpcywgZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKQEAgLTI5Myw5ICsyOTIsMTIgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXMKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCkKIHsKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoKSIpOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKLQorICAgIGlmIChSZXNv
dXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpIHsKKyAgICAgICAgaWYg
KGNsaWVudC0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgICAgICBjbGllbnQtPnNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlQXN5bmModGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBjbGllbnQtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpOworICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM2NSw5ICszNjcsMTIgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGwKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQog
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKIHsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZSh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOwotCisgICAgaWYgKFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkgeworICAgICAgICBpZiAoY2xp
ZW50LT51c2VzQXN5bmNDYWxsYmFja3MoKSkKKyAgICAgICAgICAgIGNsaWVudC0+Y2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQtPmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodGhpcywgcHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCkBAIC01NTIsNiArNTU3LDM2IEBAIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRSZXF1ZXN0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZC0+bV9jdXJyZW50UmVxdWVzdDsKIH0KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdDsKKyAgICBp
ZiAoIXJlcXVlc3RSZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJlcXVlc3RSZXN1bHQuc2V0U3Rv
cmFnZVNlc3Npb24oZC0+bV9zdG9yYWdlU2Vzc2lvbi5nZXQoKSk7CisgICAgZC0+bV9jb25uZWN0
aW9uRGVsZWdhdGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3RSZXN1bHQuY2ZVUkxS
ZXF1ZXN0KFVwZGF0ZUhUVFBCb2R5KSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRp
bnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+
Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sIHVzZUNyZWRlbnRpYWxTdG9y
YWdlKQoreworICAgIGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5jb250aW51ZVNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKHVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKK30KKworI2lmIFVTRShQUk9U
RUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51
ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCBjYW5BdXRoZW50aWNh
dGUpCit7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjYW5BdXRoZW50aWNhdGUpOworfQorI2VuZGlmCisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRV
UkxSZXNwb25zZVJlZiByZXNwb25zZSkKK3sKKyAgICBkLT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+
Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7Cit9CiAjZW5kaWYgLy8gVVNFKENG
TkVUV09SSykKIAogI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCmluZGV4IGM0
MzM4ZWIzYmUxODMzMDhmNTMwOWI4MDU1OWUwMDEzOWUyZjY2YzUuLmUwZjlhODI2YjUwMTNhZDc2
NjkyMDU5MmUyZTdmMWUwNGUxNzNkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcApAQCAtMjgsNiArMjgsMTggQEAKIAogI2lmIFVTRShD
Rk5FVFdPUkspCiAKKyNpbmNsdWRlICJGb3JtRGF0YVN0cmVhbUNGTmV0LmgiCisjaW5jbHVkZSAi
TmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorCisjaWYg
UExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmIC8vIFBMQVRG
T1JNKFdJTikKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUpCkBAIC0zOSw2ICs1MSwxMSBAQCBSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp+UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZSgpCiB7CiB9CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZTo6cmVsZWFzZUhhbmRsZSgpCit7CisgICAgbV9oYW5kbGUgPSBudWxscHRyOworfQorCiBDRlVS
TFJlcXVlc3RSZWYgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNl
bmRSZXF1ZXN0Q2FsbGJhY2soQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYgY2ZS
ZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8p
KS0+d2lsbFNlbmRSZXF1ZXN0KGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNlKTsK
QEAgLTk5LDYgKzExNiw2MSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFJlY2VpdmVEYXRhQXJyYXlDYWxsYmFjayhDRlVSTENvbgogfQogI2VuZGlmIC8v
IFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAorUmV0YWluUHRyPENGVVJMUmVz
cG9uc2VSZWY+IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnN5bnRoZXNp
emVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoQ0ZVUkxSZXF1ZXN0UmVmIG5ld1JlcXVlc3Qs
IENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlmIChjZlJlZGly
ZWN0UmVzcG9uc2UpCisgICAgICAgIHJldHVybiBjZlJlZGlyZWN0UmVzcG9uc2U7CisKKyAgICBD
RlVSTFJlZiBuZXdVUkwgPSBDRlVSTFJlcXVlc3RHZXRVUkwobmV3UmVxdWVzdCk7CisgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBuZXdTY2hlbWUgPSBhZG9wdENGKENGVVJMQ29weVNjaGVtZShu
ZXdVUkwpKTsKKworICAgIC8vIElmIHRoZSBwcm90b2NvbHMgb2YgdGhlIG5ldyByZXF1ZXN0IGFu
ZCB0aGUgY3VycmVudCByZXF1ZXN0IG1hdGNoLCB0aGlzIGlzIG5vdCBhbiBIU1RTIHJlZGlyZWN0
IGFuZCB3ZSBzaG91bGRuJ3Qgc3ludGhlc2l6ZSBhIHJlZGlyZWN0IHJlc3BvbnNlLgorICAgIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QgPSBtX2hhbmRsZS0+Y3VycmVudFJl
cXVlc3QoKTsKKyAgICBpZiAoY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2woKSA9PSBTdHJp
bmcobmV3U2NoZW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IGN1cnJlbnRVUkwgPSBjdXJyZW50UmVxdWVzdC51cmwoKS5jcmVhdGVDRlVSTCgp
OworICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiByZXNwb25zZU1lc3NhZ2UgPSBhZG9w
dENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXNwb25zZSgwLCAzMDIsIDAsIGtDRkhUVFBWZXJzaW9u
MV8xKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBuZXdBYnNvbHV0ZVVSTCA9IGFkb3B0Q0Yo
Q0ZVUkxDb3B5QWJzb2x1dGVVUkwobmV3VVJMKSk7CisgICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRl
ckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigiTG9jYXRpb24iKSwgQ0ZV
UkxHZXRTdHJpbmcobmV3QWJzb2x1dGVVUkwuZ2V0KCkpKTsKKyAgICBDRkhUVFBNZXNzYWdlU2V0
SGVhZGVyRmllbGRWYWx1ZShyZXNwb25zZU1lc3NhZ2UuZ2V0KCksIENGU1RSKCJDYWNoZS1Db250
cm9sIiksIENGU1RSKCJuby1zdG9yZSIpKTsKKworICAgIFJldGFpblB0cjxDRlVSTFJlc3BvbnNl
UmVmPiBuZXdSZXNwb25zZSA9IGFkb3B0Q0YoQ0ZVUkxSZXNwb25zZUNyZWF0ZVdpdGhIVFRQUmVz
cG9uc2UoMCwgY3VycmVudFVSTC5nZXQoKSwgcmVzcG9uc2VNZXNzYWdlLmdldCgpLCBrQ0ZVUkxD
YWNoZVN0b3JhZ2VOb3RBbGxvd2VkKSk7CisgICAgcmV0dXJuIG5ld1Jlc3BvbnNlOworfQorCitS
ZXNvdXJjZVJlcXVlc3QgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y3Jl
YXRlUmVzb3VyY2VSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIGNvbnN0IFJldGFp
blB0cjxDRlVSTFJlc3BvbnNlUmVmPiYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBNZXNzYWdlID0gQ0ZV
UkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICBp
ZiAoaHR0cE1lc3NhZ2UgJiYgQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRw
TWVzc2FnZSkgPT0gMzA3KSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFzdEhU
VFBNZXRob2QgPSBtX2hhbmRsZS0+bGFzdEhUVFBNZXRob2QoKS5jcmVhdGVDRlN0cmluZygpOwor
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxS
ZXF1ZXN0Q29weUhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOworICAgICAgICBpZiAoQ0ZT
dHJpbmdDb21wYXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0KCksIG5ld01ldGhvZC5n
ZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFzdEhUVFBNZXRob2QuZ2V0
KCkpKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIFJldGFpblB0
cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxS
ZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7CisgICAgICAgICAgICB3a1Nl
dFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihtX2hhbmRsZS0+c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJs
ZVJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RN
ZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9kLmdldCgpKTsKKworICAg
ICAgICAgICAgRm9ybURhdGEqIGJvZHkgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJv
ZHkoKTsKKyAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobV9oYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkgJiYgIWJvZHktPmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keShtdXRhYmxlUmVxdWVzdC5n
ZXQoKSwgYm9keSk7CisKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5hbENvbnRlbnRUeXBlID0g
bV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOworICAgICAgICAgICAg
aWYgKCFvcmlnaW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBDRlVS
TFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgQ0ZT
VFIoIkNvbnRlbnQtVHlwZSIpLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCkpOworCisgICAgICAgICAgICByZXF1ZXN0ID0gbXV0YWJsZVJlcXVlc3QuZ2V0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVxdWVzdC5pc051bGwoKSkKKyAgICAgICAgcmVx
dWVzdCA9IGNmUmVxdWVzdDsKKworICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJo
dHRwcyIpICYmIHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYg
bV9oYW5kbGUtPmNvbnRleHQoKS0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCgpKQorICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVyKCk7CisgICAgcmV0dXJu
IHJlcXVlc3Q7Cit9CisKIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlOjptYWtlQ29ubmVjdGlvbkNsaWVudCgpIGNvbnN0CiB7CiAg
ICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IGNsaWVudCA9IHsgNiwgdGhpcywgMCwgMCwgMCwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKaW5kZXgg
MDVlMjc3ZmJiODZlNGY3NTJhMjc1MTRlY2UwNzYwNDMwZTcwMTg5Ni4uZTc0NWI3NDU2NGQwY2Q3
OTczZjg0MjJhOTk0MTRkNjlkNjBmNzY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2lmIFVTRShDRk5F
VFdPUkspCiAKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlIDxDRk5ldHdv
cmsvQ0ZVUkxDb25uZWN0aW9uUHJpdi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDEsNiArNDMsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUoKTsKIAogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9W
NiBtYWtlQ29ubmVjdGlvbkNsaWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cFJl
cXVlc3QoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXR1
cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZikgPSAwOworICAgIHZvaWQg
cmVsZWFzZUhhbmRsZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1
ZXN0KENGVVJMUmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZShib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2ls
bENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgPSAwOworI2lmIFVTRShQUk9U
RUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKSA9IDA7CisjZW5kaWYgLy8g
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworcHJvdGVjdGVkOgorICAgIFJl
dGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVj
ZXNzYXJ5KENGVVJMUmVxdWVzdFJlZiwgQ0ZVUkxSZXNwb25zZVJlZik7CisgICAgUmVzb3VyY2VS
ZXF1ZXN0IGNyZWF0ZVJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYsIGNvbnN0IFJldGFp
blB0cjxDRlVSTFJlc3BvbnNlUmVmPiYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBDRlVSTFJl
cXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0Q2FsbGJhY2soQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVS
TFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUuY3BwCmluZGV4IDE1NDllYjc1NTVkMjgyMzRlYzMzZDgxOTk0NTUzMWE4
YzkyMzI3NDEuLjY3ZmRmNTExNDQ2ZDQ2YzgyNDg5NzllNDZjMmU5ZWM0YmNjNDdlY2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZS5jcHAKQEAgLTMwLDEyICszMCwxMCBAQAogCiAjaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25DRi5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5j
bHVkZSAiRm9ybURhdGFTdHJlYW1DRk5ldC5oIgorI2luY2x1ZGUgIkxvYWRlclJ1bkxvb3BDRi5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGll
bnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
c3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgpAQCAtNDcsOSArNDUsMTIgQEAKICNpbmNsdWRlICJXZWJDb3JlVVJMUmVzcG9uc2Uu
aCIKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVk
ZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogI2lmIFBMQVRG
T1JNKFdJTikKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2VuZGlmIC8vIFBMQVRG
T1JNKFdJTikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTksMzEgKzYwLDI4IEBAIFN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6U3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMCiB7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25z
ZVJlZj4gc3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIGN1cnJlbnRSZXF1ZXN0LCBDRlVSTFJlcXVlc3RSZWYgbmV3UmVxdWVzdCwgQ0ZV
UkxSZXNwb25zZVJlZiBjZlJlZGlyZWN0UmVzcG9uc2UpCit2b2lkIFN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVS
TFJlcXVlc3RSZWYgcmVxdWVzdCkKIHsKLSAgICBpZiAoY2ZSZWRpcmVjdFJlc3BvbnNlKQotICAg
ICAgICByZXR1cm4gY2ZSZWRpcmVjdFJlc3BvbnNlOwotCi0gICAgQ0ZVUkxSZWYgbmV3VVJMID0g
Q0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1JlcXVlc3QpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gbmV3U2NoZW1lID0gYWRvcHRDRihDRlVSTENvcHlTY2hlbWUobmV3VVJMKSk7Ci0KLSAgICAv
LyBJZiB0aGUgcHJvdG9jb2xzIG9mIHRoZSBuZXcgcmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQgcmVx
dWVzdCBtYXRjaCwgdGhpcyBpcyBub3QgYW4gSFNUUyByZWRpcmVjdCBhbmQgd2Ugc2hvdWxkbid0
IHN5bnRoZXNpemUgYSByZWRpcmVjdCByZXNwb25zZS4KLSAgICBpZiAoY3VycmVudFJlcXVlc3Qu
dXJsKCkucHJvdG9jb2woKSA9PSBTdHJpbmcobmV3U2NoZW1lLmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGN1cnJlbnRVUkwgPSBjdXJyZW50UmVx
dWVzdC51cmwoKS5jcmVhdGVDRlVSTCgpOwotICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVm
PiByZXNwb25zZU1lc3NhZ2UgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXNwb25zZSgw
LCAzMDIsIDAsIGtDRkhUVFBWZXJzaW9uMV8xKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBu
ZXdBYnNvbHV0ZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxDb3B5QWJzb2x1dGVVUkwobmV3VVJMKSk7Ci0g
ICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgp
LCBDRlNUUigiTG9jYXRpb24iKSwgQ0ZVUkxHZXRTdHJpbmcobmV3QWJzb2x1dGVVUkwuZ2V0KCkp
KTsKLSAgICBDRkhUVFBNZXNzYWdlU2V0SGVhZGVyRmllbGRWYWx1ZShyZXNwb25zZU1lc3NhZ2Uu
Z2V0KCksIENGU1RSKCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJuby1zdG9yZSIpKTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgQ0ZVUkxSZXF1ZXN0U2V0U2hvdWxkU3RhcnRTeW5jaHJvbm91c2x5
KHJlcXVlc3QsIDEpOworI2VuZGlmCit9CiAKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJl
Zj4gbmV3UmVzcG9uc2UgPSBhZG9wdENGKENGVVJMUmVzcG9uc2VDcmVhdGVXaXRoSFRUUFJlc3Bv
bnNlKDAsIGN1cnJlbnRVUkwuZ2V0KCksIHJlc3BvbnNlTWVzc2FnZS5nZXQoKSwga0NGVVJMQ2Fj
aGVTdG9yYWdlTm90QWxsb3dlZCkpOwotICAgIHJldHVybiBuZXdSZXNwb25zZTsKK3ZvaWQgU3lu
Y2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzZXR1cENvbm5l
Y3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uKQoreworI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVzc2Fn
ZVF1ZXVlKGNvbm5lY3Rpb24pOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIENGVVJMQ29ubmVj
dGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoY29ubmVjdGlvbiwgV2ViVGhyZWFkUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVs
ZVdpdGhSdW5Mb29wKGNvbm5lY3Rpb24sIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9v
cERlZmF1bHRNb2RlKTsKKyNlbmRpZgorICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlRG93bmxv
YWRXaXRoUnVuTG9vcChjb25uZWN0aW9uLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZh
dWx0TW9kZSk7CiB9CiAKIENGVVJMUmVxdWVzdFJlZiBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYg
Y2ZSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSkKIHsK
LSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5bnRo
ZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkobV9oYW5kbGUtPmN1cnJlbnRSZXF1ZXN0
KCksIGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBSZXRhaW5QdHI8
Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJl
c3BvbnNlSWZOZWNlc3NhcnkoY2ZSZXF1ZXN0LCBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2UpOwog
CiAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlKSB7CiAgICAgICAgIENGUmV0YWluKGNmUmVxdWVz
dCk7CkBAIC05MiwzNCArOTAsNyBAQCBDRlVSTFJlcXVlc3RSZWYgU3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlcwogCiAgICAgTE9H
KE5ldHdvcmssICJDRk5ldCAtIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBt
X2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAK
LSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKLSAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBN
ZXNzYWdlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLmdl
dCgpKTsKLSAgICBpZiAoaHR0cE1lc3NhZ2UgJiYgQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3Rh
dHVzQ29kZShodHRwTWVzc2FnZSkgPT0gMzA3KSB7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gbGFzdEhUVFBNZXRob2QgPSBtX2hhbmRsZS0+bGFzdEhUVFBNZXRob2QoKS5jcmVhdGVD
RlN0cmluZygpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9IGFk
b3B0Q0YoQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOwotICAg
ICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0KCks
IG5ld01ldGhvZC5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFzdEhU
VFBNZXRob2QuZ2V0KCkpKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9IGFk
b3B0Q0YoQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7Ci0gICAg
ICAgICAgICB3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihtX2hhbmRsZS0+c3RvcmFnZVNlc3Np
b24oKSwgbXV0YWJsZVJlcXVlc3QuZ2V0KCkpOwotICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0
SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9kLmdl
dCgpKTsKLQotICAgICAgICAgICAgRm9ybURhdGEqIGJvZHkgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkuaHR0cEJvZHkoKTsKLSAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobV9o
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkgJiYgIWJv
ZHktPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keShtdXRh
YmxlUmVxdWVzdC5nZXQoKSwgYm9keSk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBvcmlnaW5hbENv
bnRlbnRUeXBlID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOwot
ICAgICAgICAgICAgaWYgKCFvcmlnaW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVxdWVz
dC5nZXQoKSwgQ0ZTVFIoIkNvbnRlbnQtVHlwZSIpLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCkpOwotCi0gICAgICAgICAgICByZXF1ZXN0ID0gbXV0YWJsZVJlcXVl
c3QuZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVlc3QuaXNOdWxsKCkpCi0g
ICAgICAgIHJlcXVlc3QgPSBjZlJlcXVlc3Q7Ci0KLSAgICAvLyBTaG91bGQgbm90IHNldCBSZWZl
cmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJl
IG9uZS4KLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBwcm90
b2NvbElzKHJlcXVlc3QuaHR0cFJlZmVycmVyKCksICJodHRwcyIpICYmIG1faGFuZGxlLT5jb250
ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKLSAgICAg
ICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOwotCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoY2ZSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNl
KTsKICAgICBtX2hhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UuZ2V0KCkpOwogCiAgICAgaWYgKHJlcXVlc3QuaXNOdWxsKCkpCkBAIC0zMDEsNiArMjcyLDI4
IEBAIHZvaWQgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
OjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyCiB9CiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfQ0ZE
QVRBX0FSUkFZX0NBTExCQUNLKQogCit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0
UmVmKQoreworfQorCit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworfQorCit2b2lkIFN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVT
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sKQoreworfQorCit2b2lkIFN5bmNocm9ub3Vz
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsQ2FjaGVS
ZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKQoreworfQorCisjaWYgVVNFKFBST1RFQ1RJ
T05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoYm9vbCkKK3sKK30KKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9B
VVRIX0NBTExCQUNLKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5oCmluZGV4IDc0M2Y0NWUwNDAwMWVmZTk4NDAxZWUyMTUzODFjNGZkMTVjODdlZmYu
LjkyNDJhYzVkOTdkYWMwYmQ4Njk2NDE1ZDNjNjM5YTU3MGE3ZjkxZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUuaApAQCAtNDQsNiArNDQsOSBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfQ0ZE
QVRBX0FSUkFZX0NBTExCQUNLKQogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBzZXR1cFJl
cXVlc3QoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldHVwQ29ubmVjdGlvblNjaGVkdWxpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmKSBPVkVSUklERTsK
KwogICAgIHZpcnR1YWwgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVl
c3RSZWYsIENGVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoQ0ZVUkxSZXNwb25zZVJlZikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBD
RkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9u
c2VSZWYpIE9WRVJSSURFOwpAQCAtNTMsNiArNTYsMTQgQEAgcHJpdmF0ZToKICNpZiBVU0UoUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZpcnR1YWwgQm9vbGVhbiBjYW5SZXNw
b25kVG9Qcm90ZWN0aW9uU3BhY2UoQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYpIE9WRVJSSURFOwog
I2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisKKyAgICB2aXJ0
dWFsIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShi
b29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVXaWxsQ2FjaGVSZXNwb25z
ZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyNpZiBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCkgT1ZFUlJJREU7CisjZW5kaWYgLy8gVVNF
KFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218928</attachid>
            <date>2013-12-10 17:52:14 -0800</date>
            <delta_ts>2013-12-11 14:36:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131210175212.patch</filename>
            <type>text/plain</type>
            <size>53612</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRhZGFkNDI5ZTRmY2Yx
MzYyMjdhZTVjZDQ0Mzk3OGU4OGI2M2RkMC4uY2M1MzQwMDU3YjExZjM2OTBjMmY0YjkyYjJlMjAz
N2Q3ODAyZThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTEyLTEwICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNl
Y29uZCBzdWJjbGFzcyBvZiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOiBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLgorICAgICAg
ICBUaGUgZGlmZmVyZW5jZSBpcyB0aG9zZSBvYmplY3RzIGhhbmRsZSB0aGUgbmV0d29yayBjYWxs
YmFjayBvbiBhIGRpZmZlcmVudCBxdWV1ZS4KKworICAgICAgICBTb21lIGNvbW1vbiBjb2RlIGhh
cyBiZWVuIHJlZmFjdG9yZWQgaW4gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZSB0byByZWR1Y2UgZHVwbGljYXRlZCBjb2RlLgorCisgICAgICAgIFRoZSBpbml0aWFsaXphdGlv
biBvZiB0aGUgcmVxdWVzdCBhbmQgY29ubmVjdGlvbiBpcyBtb3ZlZCB0byB0aGUgc3ViY2xhc3Mg
dG8gY2xlYW4gdXAgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVD
bGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6fkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdGlvbldhc0NhbmNlbGxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpzZXR1cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmRpZFNlbmRCb2R5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51
ZVdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxs
Q2FjaGVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c3ludGhl
c2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
c2V0dXBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29u
dGludWVXaWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaDoKKwog
MjAxMy0xMi0xMCAgUm9iIEJ1aXMgIDxyb2IuYnVpc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBD
bGVhbiB1cCBTVkdTY3JpcHRFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDMxM2RhN2E4
NzA5Nzg4NjhmNzg0N2FkMTE3NGM5ZjE1OWFiZGE3NmMuLjZmMDM3MjFlMjFkZDhhYWZjOTlkMGFj
MmI3N2EzNDQ4ODE1NmE1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yMjc2LDYgKzIyNzYs
NyBAQCBfX1pON1dlYkNvcmUxOHRleHRCcmVha0ZvbGxvd2luZ0VQTlNfMTdUZXh0QnJlYWtJdGVy
YXRvckVpCiBfX1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UxNHNldENhY2hlUG9saWN5
RU5TXzI2UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3lFCiBfX1pON1dlYkNvcmUxOWFwcGxpY2F0
aW9uSXNXZWJBcHBFdgogX19aTjdXZWJDb3JlMjBOZXR3b3JrU3RhdGVOb3RpZmllcjExc2V0SXNP
bkxpbmVFYgorX19aTjdXZWJDb3JlMjBSZXNvdXJjZUhhbmRsZUNsaWVudDIyd2lsbENhY2hlUmVz
cG9uc2VBc3luY0VQTlNfMTRSZXNvdXJjZUhhbmRsZUVQSzIwX0NGQ2FjaGVkVVJMUmVzcG9uc2UK
IF9fWk43V2ViQ29yZTIwYXBwbGljYXRpb25Jc09rQ3VwaWRFdgogX19aTjdXZWJDb3JlMjBlbmRP
ZkVkaXRhYmxlQ29udGVudEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMjBs
YXN0T2Zmc2V0Rm9yRWRpdGluZ0VQS05TXzROb2RlRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdkY2M5MGNiOGM0MmQ4M2QwNWJm
N2E1NGFlMmNhMTE0ZmYwZmU1NzcuLmRlOTYwZGRhNTlhMjkyNGI0ZDEwMTdkMjFlNTE5NjNkZDIz
YzYwNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTkxMCw2ICs5MTAsOCBAQAogCQkyNjU1NDEzQTE0ODk4MTFDMDAwREZDNUQg
LyogS2V5RXZlbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNjU1NDEzODE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRJT1MubW0gKi87IH07
CiAJCTI2NTU0MTUyMTQ4OUIyMzMwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY1NTQxNEIxNDg5QUEyQjAwMERG
QzVEIC8qIEN1cnNvcklPUy5jcHAgKi87IH07CiAJCTI2OTIzOTk2MTUwNUUxQUEwMDlFNTdGQyAv
KiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjY5MjM5OTIxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmggKi87IH07CisJCTI2QzE1Q0Y2MTg1N0UxNUQwMEYxNUMwMyAvKiBBc3lu
Y2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE1Q0Y0MTg1N0UxNUQw
MEYxNUMwMyAvKiBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlLmNwcCAqLzsgfTsKKwkJMjZDMTVDRjcxODU3RTE1RTAwRjE1QzAzIC8qIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE1Q0Y1MTg1N0UxNUQwMEYxNUMwMyAv
KiBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggKi87
IH07CiAJCTI2QzE3QTNFMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkMxN0EzQzE0OTFEMkQ0
MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oICovOyB9OwogCQkyNkMxN0EzRjE0OTFEMkQ0MDBE
MTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9T
Lm1tICovOyB9OwogCQkyNkU5OEExMDEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlG
YXN0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjZFOThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCAqLzsg
fTsKQEAgLTc1NjQsNiArNzU2Niw4IEBACiAJCTI2NTU0MTRCMTQ4OUFBMkIwMDBERkM1RCAvKiBD
dXJzb3JJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3Vyc29y
SU9TLmNwcDsgcGF0aCA9IGlvcy9DdXJzb3JJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyNjkyMzk5MTE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjkyMzk5MjE1
MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZDMTVDRjQxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
QzE1Q0Y1MTg1N0UxNUQwMEYxNUMwMyAvKiBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFz
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVT
eXN0ZW1JT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVN5c3RlbUlP
Uy5oOyBwYXRoID0gaW9zL0ZpbGVTeXN0ZW1JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjZDMTdBM0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBGaWxlU3lzdGVtSU9TLm1tOyBwYXRo
ID0gaW9zL0ZpbGVTeXN0ZW1JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2
RTk4QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTQwLDYgKzE5NTQ0LDggQEAKIAkJQjJGMzRG
RTcwRTgyRjgxNzAwRjYyN0NEIC8qIGNmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkyNkMxNUNGNDE4NTdFMTVEMDBGMTVDMDMgLyogQXN5bmNocm9ub3Vz
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8sCisJCQkJMjZDMTVD
RjUxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUuaCAqLywKIAkJCQk3RUU2ODQ0RDEyRDI2RTM4MDBFNzk0MTUgLyogQXV0
aGVudGljYXRpb25DRi5oICovLAogCQkJCTdFRTY4NDRFMTJEMjZFMzgwMEU3OTQxNSAvKiBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oICovLAogCQkJCTdFRTY4NDUwMTJEMjZFMzgwMEU3OTQxNSAv
KiBDb29raWVTdG9yYWdlQ0ZOZXQuY3BwICovLApAQCAtMjIxNzksNiArMjIxODUsNyBAQAogCQkJ
CTQ5QjM3NjBEMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRDU2ODZDQTEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRpb0RlY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJl
YW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAvKiBBc3lu
Y2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3QzUzNDNGRDE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M2MUYwMTEyMDk1Qzg3MDA3QTNDNjcgLyog
QXRvbWljU3RyaW5nS2V5ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFGRjhGNjAx
ODA3NDQyMTAwMTMyNjc0IC8qIFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc1
NCw2ICsyNTc2MSw3IEBACiAJCQkJNDlCMzc2MEMxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1Njg2QzkxM0FDMTgwMjAwQjY5QzY4IC8qIEFz
eW5jQXVkaW9EZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQ0RFOTIwMTUwMThFRDAw
MDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZDMTVD
RjYxODU3RTE1RDAwRjE1QzAzIC8qIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDNEE4MEUwOUQ1NjMyNzAw
MDNBQzhEIC8qIEF0dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2MjlFQTQxNTRCNDcxNjAw
MDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZEMzE1RkY2MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggMjhjZjA5NzM5M2VkZWJhOGRkNjIxMDhjNGFjZTY4ZjI1
MGM5NzU1OS4uY2E1MzFiMjY2N2EyOWFjNWU1NDAwYmIzZjU0M2Y2MmNhYjMxOTVmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAK
QEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnQoUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCkKICAgICBkLT5tX2NsaWVudCA9IGNsaWVudDsKIH0KIAot
I2lmICFQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVVTRShDRk5FVFdPUksp
CiAvLyBSZXNvdXJjZUhhbmRsZSBuZXZlciB1c2VzIGFzeW5jIGNsaWVudCBjYWxscyBvbiB0aGVz
ZSBwbGF0Zm9ybXMgeWV0Lgogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVXaWxsU2VuZFJl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCAzMDk4ODc2MzQwOGNlZWE3NWVm
YzlmYzgyYTE4OTMyNGYzZDY1YTdiLi4yMTllNDdlNDljZmU5YWU1NGZhOWExYTA0ZjY4ZWI2YTc0
MWZiZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCkBAIC02OSw2ICs2OSw3IEBAIHR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICpp
ZDsKICNlbmRpZgogCiAjaWYgVVNFKENGTkVUV09SSykKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9D
RkNhY2hlZFVSTFJlc3BvbnNlKiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmOwogdHlwZWRlZiBzdHJ1
Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwogdHlwZWRlZiBpbnQgQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeTsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRU
UENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CkBAIC0yMTMsOCArMjE0LDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZShib29sKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIENh
bGxlZCBpbiByZXNwb25zZSB0byBSZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENhY2hlUmVzcG9u
c2VBc3luYygpLgorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdm9pZCBjb250aW51ZVdpbGxDYWNo
ZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOworI2VsaWYgUExBVEZPUk0oTUFDKQog
ICAgIHZvaWQgY29udGludWVXaWxsQ2FjaGVSZXNwb25zZShOU0NhY2hlZFVSTFJlc3BvbnNlICop
OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKaW5kZXggNjM5N2Q3MDI3ZWI0YjQ0MTlkMWRjOGIy
ZTNjMDYwZDViM2E5YmY2ZS4uOGViNGVlYjZhZjU0OWY5YWEwY2RlODUyNjRkN2E4ZmFhODJhYzFm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUNsaWVudC5jcHAKQEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGVDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhSZXNv
dXJjZUhhCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQ0ZORVRXT1JL
KQordm9pZCBSZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQorewor
ICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7Cit9CisjZWxp
ZiBQTEFURk9STShNQUMpCiB2b2lkIFJlc291cmNlSGFuZGxlQ2xpZW50Ojp3aWxsQ2FjaGVSZXNw
b25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKnJl
c3BvbnNlKQogewogICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25z
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlQ2xpZW50LmgKaW5kZXggYTJkODcxZDIzYjc3M2EwOWI5ZDlmNzlmMzIwNDcwNmZiZmNh
YjdkMy4uYjNhNTkyMzA0Mjg1MGJhYzRiN2FkZjIzNzM3YzhhYTUxMjY2MWE3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGll
bnQuaApAQCAtODksOCArODksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBD
bGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQgcmVxdWVzdCB1c2luZyBSZXNvdXJjZUhhbmRsZTo6
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKCkgd2hlbiByZWFk
eS4KICAgICAgICAgdmlydHVhbCB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2VBc3luYyhSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwogI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhVVNFKENGTkVUV09SSykKICAgICAgICAgLy8gQ2xp
ZW50IHdpbGwgcGFzcyBhbiB1cGRhdGVkIHJlcXVlc3QgdXNpbmcgUmVzb3VyY2VIYW5kbGU6OmNv
bnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoKSB3aGVuIHJlYWR5LgorI2lmIFVTRShDRk5FVFdPUksp
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFu
ZGxlKiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZik7CisjZWxpZiBQTEFURk9STShNQUMpCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiwg
TlNDYWNoZWRVUkxSZXNwb25zZSAqKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9Bc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNjIxNGFjMzIwYWJkOTA4M2FkN2E4NThjOTEzNTE3ZjMyMGYxYjI1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Bc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcApAQCAtMCwwICsx
LDMwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBc3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgiCisKKyNpZiBVU0Uo
Q0ZORVRXT1JLKQorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DRi5oIgorI2luY2x1ZGUgIkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgIldlYkNvcmVVUkxS
ZXNwb25zZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCisg
ICAgOiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKGhhbmRsZSkKKyAgICAs
IG1fcXVldWUoZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViQ29yZS9DRk5ldHdv
cmsiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKQorICAgICwgbV9zZW1hcGhvcmUoZGlzcGF0Y2hf
c2VtYXBob3JlX2NyZWF0ZSgwKSkKK3sKKyAgICBkaXNwYXRjaF9xdWV1ZV90IGJhY2tncm91bmRR
dWV1ZSA9IGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlf
SElHSCwgMCk7CisgICAgZGlzcGF0Y2hfc2V0X3RhcmdldF9xdWV1ZShtX3F1ZXVlLCBiYWNrZ3Jv
dW5kUXVldWUpOworfQorCitBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjp+QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZSgpCit7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX3NlbWFwaG9yZSk7CisgICAgZGlzcGF0
Y2hfcmVsZWFzZShtX3F1ZXVlKTsKK30KKworc3RhdGljIGJvb2wgY29ubmVjdGlvbldhc0NhbmNl
bGxlZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQoreworICAgIHJldHVybiAhaGFuZGxlOworfQor
Cit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OnNldHVwUmVxdWVzdChDRk11dGFibGVVUkxSZXF1ZXN0UmVmKQoreworfQorCit2b2lkIEFzeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnNldHVwQ29ubmVj
dGlvblNjaGVkdWxpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24pCit7CisgICAgQ0ZV
UkxDb25uZWN0aW9uU2V0RGVsZWdhdGVEaXNwYXRjaFF1ZXVlKGNvbm5lY3Rpb24sIG1fcXVldWUp
OworfQorCitDRlVSTFJlcXVlc3RSZWYgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiBjZlJlcXVl
c3QsIENGVVJMUmVzcG9uc2VSZWYgb3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNlKQoreworICAgIFJl
ZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBw
cm90ZWN0b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gQXN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KGhhbmRs
ZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxs
ZWQocHJvdGVjdG9yLT5tX2hhbmRsZSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHJlZGlyZWN0UmVzcG9uc2UgPSBzeW50aGVz
aXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVj
dFJlc3BvbnNlKTsKKyAgICAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlKSB7CisgICAgICAgICAg
ICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY2ZSZXF1ZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
ID0gY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KGNmUmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Cisg
ICAgICAgIG1faGFuZGxlLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25z
ZS5nZXQoKSk7CisgICAgfSk7CisKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChtX3NlbWFw
aG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKKworICAgIHJldHVybiBtX3JlcXVlc3RSZXN1
bHQubGVha1JlZigpOworfQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVSZXNwb25zZShDRlVSTFJlc3BvbnNlUmVmIGNm
UmVzcG9uc2UpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZO
ZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpk
aWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBp
ZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAg
ICAgICAgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEF2b2lkIE1JTUUgdHlwZSBzbmlmZmluZyBpZiB0aGUg
cmVzcG9uc2UgY29tZXMgYmFjayBhcyAzMDQgTm90IE1vZGlmaWVkLgorICAgICAgICBDRkhUVFBN
ZXNzYWdlUmVmIG1zZyA9IHdrR2V0Q0ZVUkxSZXNwb25zZUhUVFBSZXNwb25zZShjZlJlc3BvbnNl
KTsKKyAgICAgICAgaW50IHN0YXR1c0NvZGUgPSBtc2cgPyBDRkhUVFBNZXNzYWdlR2V0UmVzcG9u
c2VTdGF0dXNDb2RlKG1zZykgOiAwOworCisgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IDMwNCkK
KyAgICAgICAgICAgIGFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkoY2ZSZXNwb25zZSk7CisKKyNp
ZiAhUExBVEZPUk0oSU9TKQorICAgICAgICBpZiAoX0NGVVJMUmVxdWVzdENvcHlQcm90b2NvbFBy
b3BlcnR5Rm9yS2V5KG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5jZlVSTFJlcXVlc3QoRG9Ob3RV
cGRhdGVIVFRQQm9keSksIENGU1RSKCJGb3JjZUhUTUxNSU1FVHlwZSIpKSkKKyAgICAgICAgICAg
IHdrU2V0Q0ZVUkxSZXNwb25zZU1JTUVUeXBlKGNmUmVzcG9uc2UsIENGU1RSKCJ0ZXh0L2h0bWwi
KSk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworICAgICAgICBtX2hhbmRsZS0+Y2xpZW50
KCktPmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKG1faGFuZGxlLCBjZlJlc3BvbnNlKTsKKyAgICB9
KTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChtX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElN
RV9GT1JFVkVSKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYgZGF0YSwgQ0ZJbmRleCBv
cmlnaW5hbExlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVjdG9yKHRoaXMpOworICAgIENGUmV0YWluKGRh
dGEpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsK
KyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKGhhbmRsZT0lcCkgKCVzKSIs
IG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKHByb3RlY3Rv
ci0+bV9oYW5kbGUpKQorICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZl
QnVmZmVyKG1faGFuZGxlLCBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YSksIG9yaWdpbmFs
TGVuZ3RoKTsKKworICAgICAgICBDRlJlbGVhc2UoZGF0YSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkRmlu
aXNoTG9hZGluZygpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNG
TmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
ZGlkRmluaXNoTG9hZGluZyhoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlm
IChjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKHByb3RlY3Rvci0+bV9oYW5kbGUpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGlu
ZyhtX2hhbmRsZSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkRmFpbChDRkVycm9yUmVmIGVycm9yKQor
eworICAgIFJlZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlPiBwcm90ZWN0b3IodGhpcyk7CisgICAgQ0ZSZXRhaW4oZXJyb3IpOworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIExPRyhOZXR3
b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlOjpkaWRGYWlsKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYg
KCFjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKHByb3RlY3Rvci0+bV9oYW5kbGUpKQorICAgICAgICAg
ICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCBSZXNvdXJjZUVycm9yKGVy
cm9yKSk7CisKKyAgICAgICAgQ0ZSZWxlYXNlKGVycm9yKTsKKyAgICB9KTsKK30KKworQ0ZDYWNo
ZWRVUkxSZXNwb25zZVJlZiBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjp3aWxsQ2FjaGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNhY2hl
ZFJlc3BvbnNlKQoreworICAgIFJlZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlPiBwcm90ZWN0b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNG
TmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
d2lsbENhY2hlUmVzcG9uc2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBp
ZiAoY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkgeworICAgICAg
ICAgICAgY29udGludWVXaWxsQ2FjaGVSZXNwb25zZShudWxscHRyKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMobV9oYW5kbGUsIGNhY2hlZFJlc3BvbnNlKTsKKyAgICB9KTsKKyAgICBkaXNw
YXRjaF9zZW1hcGhvcmVfd2FpdChtX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsK
KyAgICByZXR1cm4gbV9jYWNoZWRSZXNwb25zZVJlc3VsdC5sZWFrUmVmKCk7Cit9CisKK3ZvaWQg
QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVj
ZWl2ZUNoYWxsZW5nZShDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdlKQoreworICAgIFJl
ZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBw
cm90ZWN0b3IodGhpcyk7CisgICAgQ0ZSZXRhaW4oY2hhbGxlbmdlKTsKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywg
IkNGTmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZTo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
ICAgIGlmICghY29ubmVjdGlvbldhc0NhbmNlbGxlZChwcm90ZWN0b3ItPm1faGFuZGxlKSkKKyAg
ICAgICAgICAgIG1faGFuZGxlLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlLCBtX2hhbmRsZSkpOworCisgICAgICAgIENG
UmVsZWFzZShjaGFsbGVuZ2UpOworICAgIH0pOworfQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFNlbmRCb2R5RGF0YShDRkluZGV4
IHRvdGFsQnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpCit7
CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gQXN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkU2VuZEJvZHlEYXRh
KGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKCFjb25uZWN0aW9uV2Fz
Q2FuY2VsbGVkKHByb3RlY3Rvci0+bV9oYW5kbGUpKQorICAgICAgICAgICAgbV9oYW5kbGUtPmNs
aWVudCgpLT5kaWRTZW5kRGF0YShtX2hhbmRsZSwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFsQnl0
ZXNFeHBlY3RlZFRvV3JpdGUpOworICAgIH0pOworfQorCitCb29sZWFuIEFzeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKCkKK3sKKyAgICBSZWZQdHI8QXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZT4gcHJvdGVjdG9yKHRoaXMpOworCisgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5l
dCAtIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hhbmRsZSkpIHsK
KyAgICAgICAgICAgIGNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoZmFsc2UpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1faGFuZGxlLT5zaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSgpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93
YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworICAgIHJldHVybiBtX2Jv
b2xSZXN1bHQ7Cit9CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQor
Qm9vbGVhbiBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
OjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJv
dGVjdGlvblNwYWNlKQoreworICAgIFJlZlB0cjxBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlPiBwcm90ZWN0b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBMT0coTmV0d29yaywg
IkNGTmV0IC0gQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZTo6Y2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxl
LCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25XYXNDYW5jZWxsZWQocHJvdGVjdG9yLT5tX2hhbmRs
ZSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBQcm90ZWN0aW9uU3BhY2UgY29yZVByb3RlY3Rpb25TcGFjZSA9IGNvcmUocHJvdGVjdGlvblNw
YWNlKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChjb3JlUHJvdGVjdGlvblNwYWNl
LmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVVbmtub3duKSB7CisgICAgICAgICAgICBtX2Jvb2xSZXN1bHQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1hcGhvcmUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICBt
X2hhbmRsZS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb3JlUHJvdGVj
dGlvblNwYWNlKTsKKyAgICB9KTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChtX3NlbWFw
aG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKKyAgICByZXR1cm4gbV9ib29sUmVzdWx0Owor
fQorI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisKKyNpZiBV
U0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCit2b2lkIEFzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZB
cnJheVJlZiBkYXRhQXJyYXkpCit7CisgICAgUmVmUHRyPEFzeW5jaHJvbm91c1Jlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBDRlJldGFp
bihkYXRhQXJyYXkpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBBc3luY2hyb25vdXNSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRTZW5kQm9keURhdGEoaGFuZGxlPSVw
KSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoIWNvbm5lY3Rpb25XYXNDYW5jZWxsZWQo
cHJvdGVjdG9yLT5tX2hhbmRsZSkpCisgICAgICAgICAgICBtX2hhbmRsZS0+aGFuZGxlRGF0YUFy
cmF5KGRhdGFBcnJheSk7CisgICAgICAgIENGUmVsZWFzZShkYXRhQXJyYXkpOworICAgIH0pOwor
fQorI2VuZGlmIC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKwordm9pZCBB
c3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51
ZVdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCkKK3sKKyAgICBtX3JlcXVl
c3RSZXN1bHQgPSByZXF1ZXN0OworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1h
cGhvcmUpOworfQorCit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyAgICBkaXNwYXRj
aF9zZW1hcGhvcmVfc2lnbmFsKG1fc2VtYXBob3JlKTsKK30KKwordm9pZCBBc3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZVNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCit7CisgICAg
bV9ib29sUmVzdWx0ID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U7CisgICAgZGlzcGF0Y2hf
c2VtYXBob3JlX3NpZ25hbChtX3NlbWFwaG9yZSk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsQ2FjaGVSZXNw
b25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQoreworICAgIG1fY2FjaGVkUmVz
cG9uc2VSZXN1bHQgPSByZXNwb25zZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1f
c2VtYXBob3JlKTsKK30KKworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sp
Cit2b2lkIEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIGNhbkF1
dGhlbnRpY2F0ZSkKK3sKKyAgICBtX2Jvb2xSZXN1bHQgPSBjYW5BdXRoZW50aWNhdGU7CisgICAg
ZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3NlbWFwaG9yZSk7Cit9CisjZW5kaWYgLy8gVVNF
KFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmNmMzI3NTIxOWFmMDc5NjJlZjM5ZWE0ZTExODNiNTdjNzgyOGMxMjIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0FzeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaApAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlX2gKKyNkZWZpbmUgQXN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZV9oCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorCisjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIgorI2luY2x1ZGUgPENGTmV0d29yay9DRk5l
dHdvcmsuaD4KKyNpbmNsdWRlIDxkaXNwYXRjaC9xdWV1ZS5oPgorI2luY2x1ZGUgPGRpc3BhdGNo
L3NlbWFwaG9yZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFzeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUgRklOQUwgOiBwdWJsaWMgUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZShSZXNvdXJjZUhhbmRs
ZSopOworICAgIH5Bc3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHNldHVwUmVxdWVzdChDRk11dGFi
bGVVUkxSZXF1ZXN0UmVmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBDb25uZWN0
aW9uU2NoZWR1bGluZyhDRlVSTENvbm5lY3Rpb25SZWYpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBDRlVSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiwgQ0ZVUkxS
ZXNwb25zZVJlZikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShDRlVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGEoQ0ZEYXRhUmVmLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKENGRXJyb3JSZWYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZiB3aWxsQ2FjaGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShDRlVSTEF1dGhDaGFs
bGVuZ2VSZWYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kQm9keURhdGEoQ0ZJ
bmRleCB0b3RhbEJ5dGVzV3JpdHRlbiwgQ0ZJbmRleCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRl
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoKSBPVkVSUklERTsKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQor
ICAgIHZpcnR1YWwgQm9vbGVhbiBjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoQ0ZVUkxQcm90
ZWN0aW9uU3BhY2VSZWYpIE9WRVJSSURFOworI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNF
X0FVVEhfQ0FMTEJBQ0spCisjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgZGF0YUFycmF5
KSBPVkVSUklERTsKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0sp
CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0
UmVmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2UoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVXaWxs
Q2FjaGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgdm9pZCBjb250aW51
ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCkgT1ZFUlJJREU7Cisj
ZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworICAgIGRpc3Bh
dGNoX3F1ZXVlX3QgbV9xdWV1ZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfdCBtX3NlbWFwaG9y
ZTsKKworICAgIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IG1fcmVxdWVzdFJlc3VsdDsKKyAg
ICBSZXRhaW5QdHI8Q0ZDYWNoZWRVUkxSZXNwb25zZVJlZj4gbV9jYWNoZWRSZXNwb25zZVJlc3Vs
dDsKKyAgICBib29sIG1fYm9vbFJlc3VsdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUu
CisKKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQorCisjZW5kaWYgLy8gQXN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcApp
bmRleCAyZDM0ODgwZmQ4NDNhN2UzODA4OWRkNjllNjgwNTA0MjQ4YTE1ZWZkLi5kMGY0MmIwNDQ0
Nzg1ODk2MmVlM2YxMWM2ZjAwYjIyZDdjODE2NTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKQEAg
LTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJGb3JtRGF0YVN0cmVhbUNGTmV0LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxvYWRlclJ1
bkxvb3BDRi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKQEAgLTUyLDExICs1MSw4IEBACiAj
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCi0KICNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiQXN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIgogI2luY2x1ZGUg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQ0ZORVRXT1JLKQogI2luY2x1ZGUg
IldlYkNvcmVVUkxSZXNwb25zZS5oIgpAQCAtMTA1LDYgKzEwMSw5IEBAIHN0YXRpYyB2b2lkIGFw
cGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgQ3JlZGVuCiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVy
bmFsKCkKIHsKKyAgICBpZiAobV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAgICAgIG1fY29ubmVj
dGlvbkRlbGVnYXRlLT5yZWxlYXNlSGFuZGxlKCk7CisKICAgICBpZiAobV9jb25uZWN0aW9uKSB7
CiAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBDYW5jZWxsaW5nIGNvbm5lY3Rpb24gJXAg
KCVzKSIsIG1fY29ubmVjdGlvbi5nZXQoKSwgbV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIENGVVJMQ29ubmVjdGlvbkNhbmNlbChtX2Nvbm5lY3Rp
b24uZ2V0KCkpOwpAQCAtMjA0LDExICsyMDMsMTggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3Jl
YXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wK
ICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShwcm9wZXJ0aWVzRGljdGlvbmFyeS5nZXQoKSwga0NG
VVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMsIHN0cmVhbVByb3BlcnRpZXMpOwog
ICAgIENGUmVsZWFzZShzdHJlYW1Qcm9wZXJ0aWVzKTsKIAotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5bmNocm9ub3VzbHkocmVxdWVzdC5nZXQoKSwg
MSk7Ci0jZW5kaWYKIAorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChjbGllbnQoKSAmJiBj
bGllbnQoKS0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgIGQtPm1fY29ubmVjdGlvbkRl
bGVnYXRlID0gYWRvcHRSZWYobmV3IEFzeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUodGhpcykpOworICAgIGVsc2UKKyAgICAgICAgZC0+bV9jb25uZWN0aW9u
RGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlKHRoaXMpKTsKKyNlbHNlCiAgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdh
dGUgPSBhZG9wdFJlZihuZXcgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlKHRoaXMpKTsKKyNlbmRpZgorICAgIGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5z
ZXR1cFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisKICAgICBDRlVSTENvbm5lY3Rpb25DbGllbnRf
VjYgY2xpZW50ID0gZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPm1ha2VDb25uZWN0aW9uQ2xpZW50
KCk7CiAKICAgICBkLT5tX2Nvbm5lY3Rpb24gPSBhZG9wdENGKENGVVJMQ29ubmVjdGlvbkNyZWF0
ZVdpdGhQcm9wZXJ0aWVzKDAsIHJlcXVlc3QuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZVUkxD
b25uZWN0aW9uQ2xpZW50Kj4oJmNsaWVudCksIHByb3BlcnRpZXNEaWN0aW9uYXJ5LmdldCgpKSk7
CkBAIC0yMzAsMTQgKzIzNiw3IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKIAogICAg
IGNyZWF0ZUNGVVJMQ29ubmVjdGlvbihzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgZC0+bV9z
aG91bGRDb250ZW50U25pZmYsIGNsaWVudCgpLT5jb25uZWN0aW9uUHJvcGVydGllcyh0aGlzKS5n
ZXQoKSk7CiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVX
aXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwotI2VsaWYgUExB
VEZPUk0oSU9TKQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9j
b25uZWN0aW9uLmdldCgpLCBXZWJUaHJlYWRSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9k
ZSk7Ci0jZWxzZQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoZC0+bV9j
b25uZWN0aW9uLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7Ci0jZW5kaWYKLSAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZURvd25sb2FkV2l0aFJ1
bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BE
ZWZhdWx0TW9kZSk7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPnNldHVwQ29ubmVjdGlv
blNjaGVkdWxpbmcoZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKICAgICBDRlVSTENvbm5lY3Rpb25T
dGFydChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwogCiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAt
IFN0YXJ0aW5nIFVSTCAlcyAoaGFuZGxlPSVwLCBjb25uPSVwKSIsIGZpcnN0UmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRoaXMsIGQtPm1fY29ubmVjdGlvbi5nZXQoKSk7
CkBAIC0yOTMsOSArMjkyLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzCiBib29sIFJlc291
cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCiB7CiAgICAgTE9HKE5ldHdv
cmssICJDRk5ldCAtIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkiKTsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UodGhpcyk7Ci0KKyAgICBpZiAoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IHRoaXMt
PmNsaWVudCgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnVzZXNBc3luY0NhbGxiYWNrcygpKQor
ICAgICAgICAgICAgY2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUFzeW5jKHRoaXMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gY2xpZW50LT5zaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSh0aGlzKTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0z
NjUsOSArMzY3LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAjaWYgVVNFKFBST1RFQ1RJ
T05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OmNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0
aW9uU3BhY2UpCiB7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICByZXR1cm4gY2xpZW50KCkt
PmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodGhpcywgcHJvdGVjdGlvblNw
YWNlKTsKLQorICAgIGlmIChSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2xp
ZW50KCkpIHsKKyAgICAgICAgaWYgKGNsaWVudC0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAg
ICAgICAgICBjbGllbnQtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3lu
Yyh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gY2xpZW50LT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHRoaXMsIHBy
b3RlY3Rpb25TcGFjZSk7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KICNlbmRpZgpAQCAt
NTUyLDYgKzU1NywzNiBAQCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlSGFuZGxlOjpj
dXJyZW50UmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPm1fY3VycmVudFJlcXVlc3Q7
CiB9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dFJlc3VsdCA9IHJlcXVlc3Q7CisgICAgaWYgKCFyZXF1ZXN0UmVzdWx0LmlzTnVsbCgpKQorICAg
ICAgICByZXF1ZXN0UmVzdWx0LnNldFN0b3JhZ2VTZXNzaW9uKGQtPm1fc3RvcmFnZVNlc3Npb24u
Z2V0KCkpOworICAgIGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5jb250aW51ZVdpbGxTZW5kUmVx
dWVzdChyZXF1ZXN0UmVzdWx0LmNmVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9keSkpOworfQorCit2
b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCit7CisgICAg
ZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoYm9vbCB1c2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBkLT5tX2Nvbm5lY3Rpb25EZWxl
Z2F0ZS0+Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh1c2VDcmVkZW50aWFsU3Rv
cmFnZSk7Cit9CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlKGJvb2wgY2FuQXV0aGVudGljYXRlKQoreworICAgIGQtPm1fY29ubmVjdGlvbkRlbGVn
YXRlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY2FuQXV0
aGVudGljYXRlKTsKK30KKyNlbmRpZgorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZVdp
bGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCit7CisgICAg
ZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UocmVzcG9u
c2UpOworfQogI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCiAKICNpZiBVU0UoTkVUV09SS19DRkRB
VEFfQVJSQVlfQ0FMTEJBQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcAppbmRleCBjNDMzOGViM2JlMTgzMzA4ZjUzMDliODA1NTllMDAxMzll
MmY2NmM1Li5lMGY5YTgyNmI1MDEzYWQ3NjY5MjA1OTJlMmU3ZjFlMDRlMTczZDgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKQEAgLTI4
LDYgKzI4LDE4IEBACiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCisjaW5jbHVkZSAiRm9ybURhdGFT
dHJlYW1DRk5ldC5oIgorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgiCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjaWYgUExBVEZP
Uk0oV0lOKQorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KKyNlbmRpZiAvLyBQTEFURk9STShXSU4pCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpAQCAtMzksNiAr
NTEsMTEgQEAgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6flJlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUoKQogewogfQogCit2b2lkIFJlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUoKQoreworICAgIG1faGFu
ZGxlID0gbnVsbHB0cjsKK30KKwogQ0ZVUkxSZXF1ZXN0UmVmIFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdENhbGxiYWNrKENGVVJMQ29ubmVjdGlv
blJlZiwgQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5h
bFJlZGlyZWN0UmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUqPihjb25z
dF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPndpbGxTZW5kUmVxdWVzdChjZlJlcXVlc3QsIG9y
aWdpbmFsUmVkaXJlY3RSZXNwb25zZSk7CkBAIC05OSw2ICsxMTYsNjEgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5Q2FsbGJh
Y2soQ0ZVUkxDb24KIH0KICNlbmRpZiAvLyBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJB
Q0spCiAKK1JldGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlOjpzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KENG
VVJMUmVxdWVzdFJlZiBuZXdSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVkaXJlY3RSZXNw
b25zZSkKK3sKKyAgICBpZiAoY2ZSZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICByZXR1cm4gY2ZS
ZWRpcmVjdFJlc3BvbnNlOworCisgICAgQ0ZVUkxSZWYgbmV3VVJMID0gQ0ZVUkxSZXF1ZXN0R2V0
VVJMKG5ld1JlcXVlc3QpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmV3U2NoZW1lID0g
YWRvcHRDRihDRlVSTENvcHlTY2hlbWUobmV3VVJMKSk7CisKKyAgICAvLyBJZiB0aGUgcHJvdG9j
b2xzIG9mIHRoZSBuZXcgcmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQgcmVxdWVzdCBtYXRjaCwgdGhp
cyBpcyBub3QgYW4gSFNUUyByZWRpcmVjdCBhbmQgd2Ugc2hvdWxkbid0IHN5bnRoZXNpemUgYSBy
ZWRpcmVjdCByZXNwb25zZS4KKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGN1cnJlbnRSZXF1
ZXN0ID0gbV9oYW5kbGUtPmN1cnJlbnRSZXF1ZXN0KCk7CisgICAgaWYgKGN1cnJlbnRSZXF1ZXN0
LnVybCgpLnByb3RvY29sKCkgPT0gU3RyaW5nKG5ld1NjaGVtZS5nZXQoKSkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBjdXJyZW50VVJMID0gY3VycmVudFJl
cXVlc3QudXJsKCkuY3JlYXRlQ0ZVUkwoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJl
Zj4gcmVzcG9uc2VNZXNzYWdlID0gYWRvcHRDRihDRkhUVFBNZXNzYWdlQ3JlYXRlUmVzcG9uc2Uo
MCwgMzAyLCAwLCBrQ0ZIVFRQVmVyc2lvbjFfMSkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
bmV3QWJzb2x1dGVVUkwgPSBhZG9wdENGKENGVVJMQ29weUFic29sdXRlVVJMKG5ld1VSTCkpOwor
ICAgIENGSFRUUE1lc3NhZ2VTZXRIZWFkZXJGaWVsZFZhbHVlKHJlc3BvbnNlTWVzc2FnZS5nZXQo
KSwgQ0ZTVFIoIkxvY2F0aW9uIiksIENGVVJMR2V0U3RyaW5nKG5ld0Fic29sdXRlVVJMLmdldCgp
KSk7CisgICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdl
LmdldCgpLCBDRlNUUigiQ2FjaGUtQ29udHJvbCIpLCBDRlNUUigibm8tc3RvcmUiKSk7CisKKyAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gbmV3UmVzcG9uc2UgPSBhZG9wdENGKENGVVJM
UmVzcG9uc2VDcmVhdGVXaXRoSFRUUFJlc3BvbnNlKDAsIGN1cnJlbnRVUkwuZ2V0KCksIHJlc3Bv
bnNlTWVzc2FnZS5nZXQoKSwga0NGVVJMQ2FjaGVTdG9yYWdlTm90QWxsb3dlZCkpOworICAgIHJl
dHVybiBuZXdSZXNwb25zZTsKK30KKworUmVzb3VyY2VSZXF1ZXN0IFJlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGU6OmNyZWF0ZVJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RS
ZWYgY2ZSZXF1ZXN0LCBjb25zdCBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4mIHJlZGlyZWN0
UmVzcG9uc2UpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgQ0ZIVFRQTWVz
c2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UocmVkaXJl
Y3RSZXNwb25zZS5nZXQoKSk7CisgICAgaWYgKGh0dHBNZXNzYWdlICYmIENGSFRUUE1lc3NhZ2VH
ZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cE1lc3NhZ2UpID09IDMwNykgeworICAgICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGxhc3RIVFRQTWV0aG9kID0gbV9oYW5kbGUtPmxhc3RIVFRQTWV0
aG9kKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBu
ZXdNZXRob2QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdE1ldGhvZChjZlJl
cXVlc3QpKTsKKyAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZVdpdGhPcHRpb25zKGxhc3RIVFRQ
TWV0aG9kLmdldCgpLCBuZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0
TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdldCgpKSksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUp
KSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4gbXV0YWJs
ZVJlcXVlc3QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5KDAsIGNmUmVx
dWVzdCkpOworICAgICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24obV9oYW5kbGUt
PnN0b3JhZ2VTZXNzaW9uKCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAgIENG
VVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0LmdldCgpLCBsYXN0
SFRUUE1ldGhvZC5nZXQoKSk7CisKKyAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0gbV9oYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CisgICAgICAgICAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCksICJHRVQiKSAm
JiBib2R5ICYmICFib2R5LT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgV2ViQ29yZTo6c2V0
SFRUUEJvZHkobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGJvZHkpOworCisgICAgICAgICAgICBTdHJp
bmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwQ29u
dGVudFR5cGUoKTsKKyAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRlckZpZWxkVmFsdWUo
bXV0YWJsZVJlcXVlc3QuZ2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwgb3JpZ2luYWxDb250
ZW50VHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKKworICAgICAgICAgICAgcmVxdWVzdCA9
IG11dGFibGVSZXF1ZXN0LmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVl
c3QuaXNOdWxsKCkpCisgICAgICAgIHJlcXVlc3QgPSBjZlJlcXVlc3Q7CisKKyAgICBpZiAoIXJl
cXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBwcm90b2NvbElzKHJlcXVlc3QuaHR0
cFJlZmVycmVyKCksICJodHRwcyIpICYmIG1faGFuZGxlLT5jb250ZXh0KCktPnNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhU
VFBSZWZlcnJlcigpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCiBDRlVSTENvbm5lY3Rpb25D
bGllbnRfVjYgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6bWFrZUNvbm5l
Y3Rpb25DbGllbnQoKSBjb25zdAogewogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBjbGll
bnQgPSB7IDYsIHRoaXMsIDAsIDAsIDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZS5oCmluZGV4IDA1ZTI3N2ZiYjg2ZTRmNzUyYTI3NTE0ZWNlMDc2MDQz
MGU3MDE4OTYuLmU3NDViNzQ1NjRkMGNkNzk3M2Y4NDIyYTk5NDE0ZDY5ZDYwZjc2OGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oCkBAIC0yOCw3
ICsyOCw5IEBACiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMQ29ubmVjdGlvblByaXYuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDYgKzQzLDIxIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKCk7CiAKICAg
ICBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjYgbWFrZUNvbm5lY3Rpb25DbGllbnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5l
Y3Rpb25SZWYpID0gMDsKKyAgICB2b2lkIHJlbGVhc2VIYW5kbGUoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9u
c2VSZWYpID0gMDsKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAg
IHZpcnR1YWwgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UoYm9vbCkgPSAwOworI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJB
Q0spCisKK3Byb3RlY3RlZDoKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gc3ludGhl
c2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVz
cG9uc2VSZWYpOworICAgIFJlc291cmNlUmVxdWVzdCBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoQ0ZV
UkxSZXF1ZXN0UmVmLCBjb25zdCBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4mKTsKIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNr
KENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAppbmRleCAxNTQ5ZWI3
NTU1ZDI4MjM0ZWMzM2Q4MTk5NDU1MzFhOGM5MjMyNzQxLi42N2ZkZjUxMTQ0NmQ0NmM4MjQ4OTc5
ZTQ2YzJlOWVjNGJjYzQ3ZWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91
c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCkBAIC0zMCwxMiArMzAs
MTAgQEAKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ0YuaCIKICNpbmNsdWRlICJBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKKyNp
bmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDkgKzQ1LDEyIEBACiAjaW5j
bHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCisj
aWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCisKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KICNlbmRpZiAvLyBQTEFURk9STShXSU4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU5LDMxICs2MCwyOCBAQCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTAogewogfQogCi1zdGF0
aWMgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNl
SWZOZWNlc3NhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCwgQ0ZVUkxS
ZXF1ZXN0UmVmIG5ld1JlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNl
KQordm9pZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OnNldHVwUmVxdWVzdChDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJlcXVlc3QpCiB7Ci0gICAgaWYg
KGNmUmVkaXJlY3RSZXNwb25zZSkKLSAgICAgICAgcmV0dXJuIGNmUmVkaXJlY3RSZXNwb25zZTsK
LQotICAgIENGVVJMUmVmIG5ld1VSTCA9IENGVVJMUmVxdWVzdEdldFVSTChuZXdSZXF1ZXN0KTsK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld1NjaGVtZSA9IGFkb3B0Q0YoQ0ZVUkxDb3B5
U2NoZW1lKG5ld1VSTCkpOwotCi0gICAgLy8gSWYgdGhlIHByb3RvY29scyBvZiB0aGUgbmV3IHJl
cXVlc3QgYW5kIHRoZSBjdXJyZW50IHJlcXVlc3QgbWF0Y2gsIHRoaXMgaXMgbm90IGFuIEhTVFMg
cmVkaXJlY3QgYW5kIHdlIHNob3VsZG4ndCBzeW50aGVzaXplIGEgcmVkaXJlY3QgcmVzcG9uc2Uu
Ci0gICAgaWYgKGN1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29sKCkgPT0gU3RyaW5nKG5ld1Nj
aGVtZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVm
PiBjdXJyZW50VVJMID0gY3VycmVudFJlcXVlc3QudXJsKCkuY3JlYXRlQ0ZVUkwoKTsKLSAgICBS
ZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcmVzcG9uc2VNZXNzYWdlID0gYWRvcHRDRihDRkhU
VFBNZXNzYWdlQ3JlYXRlUmVzcG9uc2UoMCwgMzAyLCAwLCBrQ0ZIVFRQVmVyc2lvbjFfMSkpOwot
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gbmV3QWJzb2x1dGVVUkwgPSBhZG9wdENGKENGVVJMQ29w
eUFic29sdXRlVVJMKG5ld1VSTCkpOwotICAgIENGSFRUUE1lc3NhZ2VTZXRIZWFkZXJGaWVsZFZh
bHVlKHJlc3BvbnNlTWVzc2FnZS5nZXQoKSwgQ0ZTVFIoIkxvY2F0aW9uIiksIENGVVJMR2V0U3Ry
aW5nKG5ld0Fic29sdXRlVVJMLmdldCgpKSk7Ci0gICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZp
ZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigiQ2FjaGUtQ29udHJvbCIpLCBD
RlNUUigibm8tc3RvcmUiKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENGVVJMUmVxdWVzdFNl
dFNob3VsZFN0YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LCAxKTsKKyNlbmRpZgorfQogCi0gICAg
UmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IG5ld1Jlc3BvbnNlID0gYWRvcHRDRihDRlVSTFJl
c3BvbnNlQ3JlYXRlV2l0aEhUVFBSZXNwb25zZSgwLCBjdXJyZW50VVJMLmdldCgpLCByZXNwb25z
ZU1lc3NhZ2UuZ2V0KCksIGtDRlVSTENhY2hlU3RvcmFnZU5vdEFsbG93ZWQpKTsKLSAgICByZXR1
cm4gbmV3UmVzcG9uc2U7Cit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5lY3Rpb25S
ZWYgY29ubmVjdGlvbikKK3sKKyNpZiBQTEFURk9STShXSU4pCisgICAgQ0ZVUkxDb25uZWN0aW9u
U2NoZWR1bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShjb25uZWN0aW9uKTsKKyNlbGlmIFBMQVRG
T1JNKElPUykKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhSdW5Mb29wKGNvbm5lY3Rp
b24sIFdlYlRocmVhZFJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisg
ICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChjb25uZWN0aW9uLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisjZW5kaWYKKyAgICBDRlVS
TENvbm5lY3Rpb25TY2hlZHVsZURvd25sb2FkV2l0aFJ1bkxvb3AoY29ubmVjdGlvbiwgbG9hZGVy
UnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogfQogCiBDRlVSTFJlcXVlc3RSZWYg
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmln
aW5hbFJlZGlyZWN0UmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+
IHJlZGlyZWN0UmVzcG9uc2UgPSBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5
KG1faGFuZGxlLT5jdXJyZW50UmVxdWVzdCgpLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RS
ZXNwb25zZSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHJlZGlyZWN0UmVzcG9u
c2UgPSBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KGNmUmVxdWVzdCwgb3Jp
Z2luYWxSZWRpcmVjdFJlc3BvbnNlKTsKIAogICAgIGlmICghcmVkaXJlY3RSZXNwb25zZSkgewog
ICAgICAgICBDRlJldGFpbihjZlJlcXVlc3QpOwpAQCAtOTIsMzQgKzkwLDcgQEAgQ0ZVUkxSZXF1
ZXN0UmVmIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6
d2lsbFNlbmRSZXF1ZXMKIAogICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdChoYW5k
bGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Ci0g
ICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVz
cG9uc2UocmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7Ci0gICAgaWYgKGh0dHBNZXNzYWdlICYmIENG
SFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cE1lc3NhZ2UpID09IDMwNykgewot
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhc3RIVFRQTWV0aG9kID0gbV9oYW5kbGUt
Pmxhc3RIVFRQTWV0aG9kKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBuZXdNZXRob2QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVz
dE1ldGhvZChjZlJlcXVlc3QpKTsKLSAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZVdpdGhPcHRp
b25zKGxhc3RIVFRQTWV0aG9kLmdldCgpLCBuZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VNYWtlKDAs
IENGU3RyaW5nR2V0TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdldCgpKSksIGtDRkNvbXBhcmVDYXNl
SW5zZW5zaXRpdmUpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVz
dFJlZj4gbXV0YWJsZVJlcXVlc3QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVD
b3B5KDAsIGNmUmVxdWVzdCkpOwotICAgICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Np
b24obV9oYW5kbGUtPnN0b3JhZ2VTZXNzaW9uKCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKLSAg
ICAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0
LmdldCgpLCBsYXN0SFRUUE1ldGhvZC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIEZvcm1EYXRhKiBi
b2R5ID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7Ci0gICAgICAgICAgICBp
ZiAoIWVxdWFsSWdub3JpbmdDYXNlKG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9k
KCksICJHRVQiKSAmJiBib2R5ICYmICFib2R5LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
V2ViQ29yZTo6c2V0SFRUUEJvZHkobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGJvZHkpOwotCi0gICAg
ICAgICAgICBTdHJpbmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IG1faGFuZGxlLT5maXJzdFJlcXVl
c3QoKS5odHRwQ29udGVudFR5cGUoKTsKLSAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50
VHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRl
ckZpZWxkVmFsdWUobXV0YWJsZVJlcXVlc3QuZ2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwg
b3JpZ2luYWxDb250ZW50VHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLQotICAgICAgICAg
ICAgcmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0LmdldCgpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChyZXF1ZXN0LmlzTnVsbCgpKQotICAgICAgICByZXF1ZXN0ID0gY2ZSZXF1ZXN0OwotCi0g
ICAgLy8gU2hvdWxkIG5vdCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1
cmUgcmVzb3VyY2UgdG8gbm9uLXNlY3VyZSBvbmUuCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCAi
aHR0cHMiKSAmJiBtX2hhbmRsZS0+Y29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQ
U1RvSFRUUFJlZGlyZWN0KCkpCi0gICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsK
LQorICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KGNm
UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgbV9oYW5kbGUtPndpbGxTZW5kUmVxdWVz
dChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKIAogICAgIGlmIChyZXF1ZXN0Lmlz
TnVsbCgpKQpAQCAtMzAxLDYgKzI3MiwyOCBAQCB2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycgogfQog
I2VuZGlmIC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAordm9pZCBTeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZikKK3sKK30KKwordm9pZCBTeW5jaHJvbm91c1Jl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJl
c3BvbnNlKCkKK3sKK30KKwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkK
K3sKK30KKwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikK
K3sKK30KKworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIFN5
bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpCit7Cit9CisjZW5kaWYg
Ly8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZS4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaAppbmRleCA3NDNmNDVlMDQwMDFlZmU5
ODQwMWVlMjE1MzgxYzRmZDE1Yzg3ZWZmLi45MjQyYWM1ZDk3ZGFjMGJkODY5NjQxNWQzYzYzOWE1
NzBhN2Y5MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgog
I2VuZGlmIC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAogcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJM
Q29ubmVjdGlvblJlZikgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIENGVVJMUmVxdWVzdFJlZiB3
aWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYp
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiB3aWxsQ2FjaGVS
ZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKQEAgLTUzLDYgKzU2LDE0
IEBAIHByaXZhdGU6CiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAg
ICB2aXJ0dWFsIEJvb2xlYW4gY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKENGVVJMUHJvdGVj
dGlvblNwYWNlUmVmKSBPVkVSUklERTsKICNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9B
VVRIX0NBTExCQUNLKQorCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KENGVVJMUmVxdWVzdFJlZikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlU2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgT1ZFUlJJ
REU7CisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2aXJ0dWFs
IHZvaWQgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wp
IE9WRVJSSURFOworI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sp
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219006</attachid>
            <date>2013-12-11 14:36:14 -0800</date>
            <delta_ts>2013-12-11 15:28:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131211143613.patch</filename>
            <type>text/plain</type>
            <size>54374</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZhMzllOTNlMmYxZGM1
ODI5Mzk5MzlhMTJmYTBhMzMwMTAzODZkNy4uZDZiMjAwYzU1NDIyZTc3OTIzMmZkYzA3NTQ1MDhh
YmQ4ZDg2ZDI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTEyLTExICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgQWRk
IGEgc2Vjb25kIHN1YmNsYXNzIG9mIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGU6IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVl
dWUuCisgICAgICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRob3NlIG9iamVjdHMgaGFuZGxlIHRoZSBu
ZXR3b3JrIGNhbGxiYWNrIG9uIGEgZGlmZmVyZW50IHF1ZXVlLgorCisgICAgICAgIFNvbWUgY29t
bW9uIGNvZGUgaGFzIGJlZW4gcmVmYWN0b3JlZCBpbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlIHRvIHJlZHVjZSBkdXBsaWNhdGVkIGNvZGUuCisKKyAgICAgICAgVGhlIGlu
aXRpYWxpemF0aW9uIG9mIHRoZSByZXF1ZXN0IGFuZCBjb25uZWN0aW9uIGlzIG1vdmVkIHRvIHRo
ZSBzdWJjbGFzcyB0byBjbGVhbiB1cCBpbml0aWFsaXphdGlvbi4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6
d2lsbENhY2hlUmVzcG9uc2VBc3luYyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp+UmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OnNldHVw
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVX
aXRoT3BlcmF0aW9uUXVldWU6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpk
aWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdp
dGhPcGVyYXRpb25RdWV1ZTo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpk
aWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OndpbGxDYWNoZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0
aW9uUXVldWU6OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkU2Vu
ZEJvZHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGVXaXRoT3BlcmF0aW9uUXVldWU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9w
ZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZlRGF0YUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVTaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZTo6cmVsZWFzZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzeW50aGVzaXplUmVkaXJlY3RSZXNw
b25zZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGU6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzZXR1cFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNl
bmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlU2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZVdpbGxDYWNoZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oOgorCiAyMDEzLTEyLTExICBCZWFy
IFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBb
Q1NTIFNoYXBlc10gSGlnaGxpZ2h0IG1hcmdpbi1zaGFwZSBmb3Igc2hhcGUtb3V0c2lkZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgppbmRleCAzMTNkYTdhODcwOTc4ODY4Zjc4NDdhZDExNzRjOWYxNTlhYmRh
NzZjLi42ZjAzNzIxZTIxZGQ4YWFmYzk5ZDBhYzJiNzdhMzQ0ODgxNTZhNTk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgpAQCAtMjI3Niw2ICsyMjc2LDcgQEAgX19aTjdXZWJDb3JlMTh0ZXh0QnJlYWtG
b2xsb3dpbmdFUE5TXzE3VGV4dEJyZWFrSXRlcmF0b3JFaQogX19aTjdXZWJDb3JlMTlSZXNvdXJj
ZVJlcXVlc3RCYXNlMTRzZXRDYWNoZVBvbGljeUVOU18yNlJlc291cmNlUmVxdWVzdENhY2hlUG9s
aWN5RQogX19aTjdXZWJDb3JlMTlhcHBsaWNhdGlvbklzV2ViQXBwRXYKIF9fWk43V2ViQ29yZTIw
TmV0d29ya1N0YXRlTm90aWZpZXIxMXNldElzT25MaW5lRWIKK19fWk43V2ViQ29yZTIwUmVzb3Vy
Y2VIYW5kbGVDbGllbnQyMndpbGxDYWNoZVJlc3BvbnNlQXN5bmNFUE5TXzE0UmVzb3VyY2VIYW5k
bGVFUEsyMF9DRkNhY2hlZFVSTFJlc3BvbnNlCiBfX1pON1dlYkNvcmUyMGFwcGxpY2F0aW9uSXNP
a0N1cGlkRXYKIF9fWk43V2ViQ29yZTIwZW5kT2ZFZGl0YWJsZUNvbnRlbnRFUktOU18xNVZpc2li
bGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTIwbGFzdE9mZnNldEZvckVkaXRpbmdFUEtOU180Tm9k
ZUUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA3ZGNjOTBjYjhjNDJkODNkMDViZjdhNTRhZTJjYTExNGZmMGZlNTc3Li4xYzRlYzdi
OWUyMmRmYTk5NGUxMmQxMWFmYjc3ODI3ODFiOWY3YmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MTAsNiArOTEwLDggQEAK
IAkJMjY1NTQxM0ExNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9TLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY1NTQxMzgxNDg5ODExQzAwMERG
QzVEIC8qIEtleUV2ZW50SU9TLm1tICovOyB9OwogCQkyNjU1NDE1MjE0ODlCMjMzMDAwREZDNUQg
LyogQ3Vyc29ySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2NTU0MTRCMTQ4OUFBMkIwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwICovOyB9Owog
CQkyNjkyMzk5NjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OTIzOTkyMTUw
NUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovOyB9OworCQkyNkMx
NUNGNjE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNkMxNUNGNDE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHAgKi87IH07CisJ
CTI2QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNkMxNUNGNTE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oICovOyB9Owog
CQkyNkMxN0EzRTE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTdBM0MxNDkxRDJENDAwRDEy
QkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLzsgfTsKIAkJMjZDMTdBM0YxNDkxRDJENDAwRDEyQkEy
IC8qIEZpbGVTeXN0ZW1JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAq
LzsgfTsKIAkJMjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk4
QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi87IH07CkBA
IC03NTY0LDYgKzc1NjYsOCBAQAogCQkyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQgLyogQ3Vyc29y
SU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1cnNvcklPUy5j
cHA7IHBhdGggPSBpb3MvQ3Vyc29ySU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjY5MjM5OTExNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjY5MjM5OTIxNTA1RTFB
QTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTI2QzE1Q0Y0MTg1N0UxNUQwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyNkMxNUNGNTE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJh
dGlvblF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNDMTQ5MUQy
RDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZpbGVTeXN0ZW1JT1MuaDsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxl
U3lzdGVtSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRmls
ZVN5c3RlbUlPUy5tbTsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVND
SUlGYXN0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNB
U0NJSUZhc3RQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTU1Niw2ICsx
OTU2MCw4IEBACiAJCQkJN0VFNjg0NTkxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlSGFuZGxl
Q0ZOZXQuY3BwICovLAogCQkJCTI2RkFFNEM4MTg1MkUzQTUwMDRDOEM0NiAvKiBSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLywKIAkJCQkyNkZBRTRDOTE4NTJFM0E1
MDA0QzhDNDYgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oICovLAor
CQkJCTI2QzE1Q0Y0MTg1N0UxNUQwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmNwcCAqLywKKwkJCQkyNkMxNUNGNTE4NTdF
MTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhP
cGVyYXRpb25RdWV1ZS5oICovLAogCQkJCTdFRTY4NDVBMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNv
dXJjZVJlcXVlc3QuaCAqLywKIAkJCQk3RUU2ODQ1QjEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3Vy
Y2VSZXF1ZXN0Q0ZOZXQuY3BwICovLAogCQkJCTdFRTY4NDVDMTJEMjZFMzgwMEU3OTQxNSAvKiBS
ZXNvdXJjZVJlcXVlc3RDRk5ldC5oICovLApAQCAtMjIxNzksNiArMjIxODUsNyBAQAogCQkJCTQ5
QjM3NjBEMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRDU2ODZDQTEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRpb0RlY29kZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0u
aCBpbiBIZWFkZXJzICovLAorCQkJCTI2QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAvKiBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QzUzNDNGRDE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M2MUYwMTEyMDk1Qzg3MDA3QTNDNjcg
LyogQXRvbWljU3RyaW5nS2V5ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFGRjhG
NjAxODA3NDQyMTAwMTMyNjc0IC8qIFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTc1NCw2ICsyNTc2MSw3IEBACiAJCQkJNDlCMzc2MEMxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1Njg2QzkxM0FDMTgwMjAwQjY5QzY4IC8q
IEFzeW5jQXVkaW9EZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQ0RFOTIwMTUwMThF
RDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZD
MTVDRjYxODU3RTE1RDAwRjE1QzAzIC8qIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDNEE4MEUw
OUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2MjlFQTQx
NTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZEMzE1RkY2MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggMjhjZjA5NzM5M2VkZWJhOGRkNjIxMDhj
NGFjZTY4ZjI1MGM5NzU1OS4uY2E1MzFiMjY2N2EyOWFjNWU1NDAwYmIzZjU0M2Y2MmNhYjMxOTVm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGll
bnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKICAgICBkLT5tX2NsaWVudCA9IGNsaWVu
dDsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVVTRShD
Rk5FVFdPUkspCiAvLyBSZXNvdXJjZUhhbmRsZSBuZXZlciB1c2VzIGFzeW5jIGNsaWVudCBjYWxs
cyBvbiB0aGVzZSBwbGF0Zm9ybXMgeWV0Lgogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVX
aWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCAzMDk4ODc2MzQw
OGNlZWE3NWVmYzlmYzgyYTE4OTMyNGYzZDY1YTdiLi4yMTllNDdlNDljZmU5YWU1NGZhOWExYTA0
ZjY4ZWI2YTc0MWZiZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5oCkBAIC02OSw2ICs2OSw3IEBAIHR5cGVkZWYgc3RydWN0IG9iamNf
b2JqZWN0ICppZDsKICNlbmRpZgogCiAjaWYgVVNFKENGTkVUV09SSykKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IF9DRkNhY2hlZFVSTFJlc3BvbnNlKiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmOwogdHlw
ZWRlZiBzdHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwogdHlwZWRl
ZiBpbnQgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeTsKIHR5cGVkZWYgc3RydWN0IE9w
YXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CkBAIC0yMTMs
OCArMjE0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIENhbGxlZCBpbiByZXNwb25zZSB0byBSZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENh
Y2hlUmVzcG9uc2VBc3luYygpLgorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdm9pZCBjb250aW51
ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOworI2VsaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZvaWQgY29udGludWVXaWxsQ2FjaGVSZXNwb25zZShOU0NhY2hlZFVSTFJl
c3BvbnNlICopOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKaW5kZXggNjM5N2Q3MDI3ZWI0YjQ0
MTlkMWRjOGIyZTNjMDYwZDViM2E5YmY2ZS4uOGViNGVlYjZhZjU0OWY5YWEwY2RlODUyNjRkN2E4
ZmFhODJhYzFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKQEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGVDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VB
c3luYyhSZXNvdXJjZUhhCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0Uo
Q0ZORVRXT1JLKQordm9pZCBSZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2VB
c3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3Bv
bnNlKQoreworICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7
Cit9CisjZWxpZiBQTEFURk9STShNQUMpCiB2b2lkIFJlc291cmNlSGFuZGxlQ2xpZW50Ojp3aWxs
Q2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVz
cG9uc2UgKnJlc3BvbnNlKQogewogICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25z
ZShyZXNwb25zZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKaW5kZXggYTJkODcxZDIzYjc3M2EwOWI5ZDlmNzlmMzIw
NDcwNmZiZmNhYjdkMy4uYjNhNTkyMzA0Mjg1MGJhYzRiN2FkZjIzNzM3YzhhYTUxMjY2MWE3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVDbGllbnQuaApAQCAtODksOCArODksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQgcmVxdWVzdCB1c2luZyBSZXNvdXJj
ZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKCkg
d2hlbiByZWFkeS4KICAgICAgICAgdmlydHVhbCB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhVVNFKENGTkVUV09SSykKICAgICAg
ICAgLy8gQ2xpZW50IHdpbGwgcGFzcyBhbiB1cGRhdGVkIHJlcXVlc3QgdXNpbmcgUmVzb3VyY2VI
YW5kbGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoKSB3aGVuIHJlYWR5LgorI2lmIFVTRShD
Rk5FVFdPUkspCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJl
c291cmNlSGFuZGxlKiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZik7CisjZWxpZiBQTEFURk9STShN
QUMpCiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNl
SGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSAqKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0
LmNwcAppbmRleCAyZDM0ODgwZmQ4NDNhN2UzODA4OWRkNjllNjgwNTA0MjQ4YTE1ZWZkLi43ODIw
ZjkyYmI2YTg1OWFlMmU5NDRhZjExY2FmYzBlZTE2ZjNhZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5j
cHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJGb3JtRGF0YVN0cmVhbUNGTmV0LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxv
YWRlclJ1bkxvb3BDRi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3Jr
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKQEAgLTUyLDExICs1MSw4
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIK
LSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0KICNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5o
IgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQ0ZORVRXT1JL
KQogI2luY2x1ZGUgIldlYkNvcmVVUkxSZXNwb25zZS5oIgpAQCAtMTA1LDYgKzEwMSw5IEBAIHN0
YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgQ3JlZGVuCiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJj
ZUhhbmRsZUludGVybmFsKCkKIHsKKyAgICBpZiAobV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAg
ICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5yZWxlYXNlSGFuZGxlKCk7CisKICAgICBpZiAobV9j
b25uZWN0aW9uKSB7CiAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBDYW5jZWxsaW5nIGNv
bm5lY3Rpb24gJXAgKCVzKSIsIG1fY29ubmVjdGlvbi5nZXQoKSwgbV9maXJzdFJlcXVlc3QudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIENGVVJMQ29ubmVjdGlvbkNhbmNl
bChtX2Nvbm5lY3Rpb24uZ2V0KCkpOwpAQCAtMjA0LDExICsyMDMsMTggQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UsIGJvb2wKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShwcm9wZXJ0aWVzRGljdGlvbmFy
eS5nZXQoKSwga0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMsIHN0cmVhbVBy
b3BlcnRpZXMpOwogICAgIENGUmVsZWFzZShzdHJlYW1Qcm9wZXJ0aWVzKTsKIAotI2lmIFBMQVRG
T1JNKElPUykKLSAgICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5bmNocm9ub3VzbHkocmVx
dWVzdC5nZXQoKSwgMSk7Ci0jZW5kaWYKIAorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChj
bGllbnQoKSAmJiBjbGllbnQoKS0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgIGQtPm1f
Y29ubmVjdGlvbkRlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUodGhpcykpOworICAgIGVsc2UKKyAgICAg
ICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKHRoaXMpKTsKKyNlbHNlCiAgICAgZC0+
bV9jb25uZWN0aW9uRGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgU3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKHRoaXMpKTsKKyNlbmRpZgorICAgIGQtPm1fY29u
bmVjdGlvbkRlbGVnYXRlLT5zZXR1cFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisKICAgICBDRlVS
TENvbm5lY3Rpb25DbGllbnRfVjYgY2xpZW50ID0gZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPm1h
a2VDb25uZWN0aW9uQ2xpZW50KCk7CiAKICAgICBkLT5tX2Nvbm5lY3Rpb24gPSBhZG9wdENGKENG
VVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzKDAsIHJlcXVlc3QuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0ZVUkxDb25uZWN0aW9uQ2xpZW50Kj4oJmNsaWVudCksIHByb3BlcnRpZXNE
aWN0aW9uYXJ5LmdldCgpKSk7CkBAIC0yMzAsMTQgKzIzNiw3IEBAIGJvb2wgUmVzb3VyY2VIYW5k
bGU6OnN0YXJ0KCkKIAogICAgIGNyZWF0ZUNGVVJMQ29ubmVjdGlvbihzaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSwgZC0+bV9zaG91bGRDb250ZW50U25pZmYsIGNsaWVudCgpLT5jb25uZWN0aW9u
UHJvcGVydGllcyh0aGlzKS5nZXQoKSk7CiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZVUkxD
b25uZWN0aW9uU2NoZWR1bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShkLT5tX2Nvbm5lY3Rpb24u
Z2V0KCkpOwotI2VsaWYgUExBVEZPUk0oSU9TKQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxl
V2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBXZWJUaHJlYWRSdW5Mb29wKCksIGtD
RlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0jZWxzZQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxl
V2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCks
IGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0jZW5kaWYKLSAgICBDRlVSTENvbm5lY3Rpb25TY2hl
ZHVsZURvd25sb2FkV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBsb2FkZXJSdW5M
b29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdh
dGUtPnNldHVwQ29ubmVjdGlvblNjaGVkdWxpbmcoZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKICAg
ICBDRlVSTENvbm5lY3Rpb25TdGFydChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwogCiAgICAgTE9H
KE5ldHdvcmssICJDRk5ldCAtIFN0YXJ0aW5nIFVSTCAlcyAoaGFuZGxlPSVwLCBjb25uPSVwKSIs
IGZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRoaXMsIGQtPm1f
Y29ubmVjdGlvbi5nZXQoKSk7CkBAIC0yOTMsOSArMjkyLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlUmVzCiBib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgp
CiB7CiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KCkiKTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UodGhpcyk7Ci0KKyAgICBpZiAoUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCA9IHRoaXMtPmNsaWVudCgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnVzZXNB
c3luY0NhbGxiYWNrcygpKQorICAgICAgICAgICAgY2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZUFzeW5jKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gY2xp
ZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKKyAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC0zNjUsOSArMzY3LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
CiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIGJvb2wgUmVzb3VyY2VI
YW5kbGU6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50KCktPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Uo
dGhpcywgcHJvdGVjdGlvblNwYWNlKTsKLQorICAgIGlmIChSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpIHsKKyAgICAgICAgaWYgKGNsaWVudC0+dXNlc0FzeW5j
Q2FsbGJhY2tzKCkpCisgICAgICAgICAgICBjbGllbnQtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2VBc3luYyh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4gY2xpZW50LT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7CisgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KICNlbmRpZgpAQCAtNTUyLDYgKzU1NywzNiBAQCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IFJlc291cmNlSGFuZGxlOjpjdXJyZW50UmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQt
Pm1fY3VycmVudFJlcXVlc3Q7CiB9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3Q7CisgICAgaWYgKCFyZXF1ZXN0UmVz
dWx0LmlzTnVsbCgpKQorICAgICAgICByZXF1ZXN0UmVzdWx0LnNldFN0b3JhZ2VTZXNzaW9uKGQt
Pm1fc3RvcmFnZVNlc3Npb24uZ2V0KCkpOworICAgIGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5j
b250aW51ZVdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0UmVzdWx0LmNmVVJMUmVxdWVzdChVcGRhdGVI
VFRQQm9keSkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpCit7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlU2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCB1c2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBk
LT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSh1c2VDcmVkZW50aWFsU3RvcmFnZSk7Cit9CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9B
VVRIX0NBTExCQUNLKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgY2FuQXV0aGVudGljYXRlKQoreworICAgIGQt
Pm1fY29ubmVjdGlvbkRlbGVnYXRlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoY2FuQXV0aGVudGljYXRlKTsKK30KKyNlbmRpZgorCit2b2lkIFJlc291cmNl
SGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYg
cmVzcG9uc2UpCit7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlV2lsbENh
Y2hlUmVzcG9uc2UocmVzcG9uc2UpOworfQogI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCiAKICNp
ZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAppbmRleCBjNDMzOGViM2JlMTgzMzA4
ZjUzMDliODA1NTllMDAxMzllMmY2NmM1Li4zYmYwMzQ5ZTk1YmUwMjczNzI3OTUwZTcwMGRmNzhl
YTI0NWEwYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKQEAgLTI4LDYgKzI4LDE4IEBACiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCisj
aW5jbHVkZSAiRm9ybURhdGFTdHJlYW1DRk5ldC5oIgorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKworI2lmIFBMQVRGT1JNKE1BQykK
KyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCkBAIC0zOSw2ICs1MSwxMSBAQCBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp+UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZSgpCiB7CiB9CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6cmVsZWFzZUhhbmRsZSgpCit7CisgICAgbV9oYW5kbGUgPSBudWxscHRyOwor
fQorCiBDRlVSTFJlcXVlc3RSZWYgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZTo6d2lsbFNlbmRSZXF1ZXN0Q2FsbGJhY2soQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVl
c3RSZWYgY2ZSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25z
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKS0+d2lsbFNlbmRSZXF1ZXN0KGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJl
c3BvbnNlKTsKQEAgLTk5LDYgKzExNiw2MSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhQXJyYXlDYWxsYmFjayhDRlVSTENvbgogfQog
I2VuZGlmIC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAorUmV0YWluUHRy
PENGVVJMUmVzcG9uc2VSZWY+IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OnN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoQ0ZVUkxSZXF1ZXN0UmVmIG5l
d1JlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlm
IChjZlJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAgIHJldHVybiBjZlJlZGlyZWN0UmVzcG9uc2U7
CisKKyAgICBDRlVSTFJlZiBuZXdVUkwgPSBDRlVSTFJlcXVlc3RHZXRVUkwobmV3UmVxdWVzdCk7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuZXdTY2hlbWUgPSBhZG9wdENGKENGVVJMQ29w
eVNjaGVtZShuZXdVUkwpKTsKKworICAgIC8vIElmIHRoZSBwcm90b2NvbHMgb2YgdGhlIG5ldyBy
ZXF1ZXN0IGFuZCB0aGUgY3VycmVudCByZXF1ZXN0IG1hdGNoLCB0aGlzIGlzIG5vdCBhbiBIU1RT
IHJlZGlyZWN0IGFuZCB3ZSBzaG91bGRuJ3Qgc3ludGhlc2l6ZSBhIHJlZGlyZWN0IHJlc3BvbnNl
LgorICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QgPSBtX2hhbmRsZS0+
Y3VycmVudFJlcXVlc3QoKTsKKyAgICBpZiAoY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2wo
KSA9PSBTdHJpbmcobmV3U2NoZW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGN1cnJlbnRVUkwgPSBjdXJyZW50UmVxdWVzdC51cmwo
KS5jcmVhdGVDRlVSTCgpOworICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiByZXNwb25z
ZU1lc3NhZ2UgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXNwb25zZSgwLCAzMDIsIDAs
IGtDRkhUVFBWZXJzaW9uMV8xKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBuZXdBYnNvbHV0
ZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxDb3B5QWJzb2x1dGVVUkwobmV3VVJMKSk7CisgICAgQ0ZIVFRQ
TWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigi
TG9jYXRpb24iKSwgQ0ZVUkxHZXRTdHJpbmcobmV3QWJzb2x1dGVVUkwuZ2V0KCkpKTsKKyAgICBD
RkhUVFBNZXNzYWdlU2V0SGVhZGVyRmllbGRWYWx1ZShyZXNwb25zZU1lc3NhZ2UuZ2V0KCksIENG
U1RSKCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJuby1zdG9yZSIpKTsKKworICAgIFJldGFpblB0
cjxDRlVSTFJlc3BvbnNlUmVmPiBuZXdSZXNwb25zZSA9IGFkb3B0Q0YoQ0ZVUkxSZXNwb25zZUNy
ZWF0ZVdpdGhIVFRQUmVzcG9uc2UoMCwgY3VycmVudFVSTC5nZXQoKSwgcmVzcG9uc2VNZXNzYWdl
LmdldCgpLCBrQ0ZVUkxDYWNoZVN0b3JhZ2VOb3RBbGxvd2VkKSk7CisgICAgcmV0dXJuIG5ld1Jl
c3BvbnNlOworfQorCitSZXNvdXJjZVJlcXVlc3QgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6Y3JlYXRlUmVzb3VyY2VSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiBjZlJlcXVl
c3QsIENGVVJMUmVzcG9uc2VSZWYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdDsKKyAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBNZXNzYWdlID0gQ0ZVUkxS
ZXNwb25zZUdldEhUVFBSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBpZiAoaHR0cE1l
c3NhZ2UgJiYgQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwTWVzc2FnZSkg
PT0gMzA3KSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFzdEhUVFBNZXRob2Qg
PSBtX2hhbmRsZS0+bGFzdEhUVFBNZXRob2QoKS5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q29w
eUhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21w
YXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0KCksIG5ld01ldGhvZC5nZXQoKSwgQ0ZS
YW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFzdEhUVFBNZXRob2QuZ2V0KCkpKSwga0NG
Q29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk11dGFi
bGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q3Jl
YXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7CisgICAgICAgICAgICB3a1NldFJlcXVlc3RT
dG9yYWdlU2Vzc2lvbihtX2hhbmRsZS0+c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJsZVJlcXVlc3Qu
Z2V0KCkpOworICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0
YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9kLmdldCgpKTsKKworICAgICAgICAgICAg
Rm9ybURhdGEqIGJvZHkgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAg
ICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgp
Lmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkgJiYgIWJvZHktPmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgYm9k
eSk7CisKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5hbENvbnRlbnRUeXBlID0gbV9oYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOworICAgICAgICAgICAgaWYgKCFvcmln
aW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBDRlVSTFJlcXVlc3RT
ZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIkNvbnRl
bnQtVHlwZSIpLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwor
CisgICAgICAgICAgICByZXF1ZXN0ID0gbXV0YWJsZVJlcXVlc3QuZ2V0KCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAocmVxdWVzdC5pc051bGwoKSkKKyAgICAgICAgcmVxdWVzdCA9IGNm
UmVxdWVzdDsKKworICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYm
IHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgbV9oYW5kbGUt
PmNvbnRleHQoKS0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpKQor
ICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVyKCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7
Cit9CisKIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlOjptYWtlQ29ubmVjdGlvbkNsaWVudCgpIGNvbnN0CiB7CiAgICAgQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50X1Y2IGNsaWVudCA9IHsgNiwgdGhpcywgMCwgMCwgMCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKaW5kZXggMDVlMjc3ZmJi
ODZlNGY3NTJhMjc1MTRlY2UwNzYwNDMwZTcwMTg5Ni4uYzAyNjNjZDRjNDNlNzUyZmQzNTViN2E1
NjkwOWVjNzVhMjQ0MDU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmgKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2lmIFVTRShDRk5FVFdPUkspCiAK
KyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxD
b25uZWN0aW9uUHJpdi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEs
NiArNDMsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUoKTsKIAogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBtYWtlQ29u
bmVjdGlvbkNsaWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cFJlcXVlc3QoQ0ZN
dXRhYmxlVVJMUmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rp
b25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZikgPSAwOworICAgIHZvaWQgcmVsZWFzZUhh
bmRsZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJM
UmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNw
b25zZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZShib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbENhY2hlUmVz
cG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgPSAwOworI2lmIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKSA9IDA7CisjZW5kaWYgLy8gVVNFKFBST1RF
Q1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworcHJvdGVjdGVkOgorICAgIFJldGFpblB0cjxD
RlVSTFJlc3BvbnNlUmVmPiBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KENG
VVJMUmVxdWVzdFJlZiwgQ0ZVUkxSZXNwb25zZVJlZik7CisgICAgUmVzb3VyY2VSZXF1ZXN0IGNy
ZWF0ZVJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWY+KTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdENh
bGxiYWNrKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVl
dWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdkODA5YTQ1MmQwZTVjNDU4MjczMzBmYjM1MDY0YTQwNjdhZmRi
NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUu
Y3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWUuaCIKKworI2lmIFVTRShDRk5FVFdPUkspCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNGLmgiCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAiV2ViQ29yZVVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKKyAgICA6IFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGUoaGFuZGxlKQorICAgICwgbV9xdWV1ZShkaXNwYXRjaF9xdWV1ZV9j
cmVhdGUoImNvbS5hcHBsZS5XZWJDb3JlL0NGTmV0d29yayIsIERJU1BBVENIX1FVRVVFX1NFUklB
TCkpCisgICAgLCBtX3NlbWFwaG9yZShkaXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApKQorewor
ICAgIGRpc3BhdGNoX3F1ZXVlX3QgYmFja2dyb3VuZFF1ZXVlID0gZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ISUdILCAwKTsKKyAgICBkaXNwYXRjaF9z
ZXRfdGFyZ2V0X3F1ZXVlKG1fcXVldWUsIGJhY2tncm91bmRRdWV1ZSk7Cit9CisKK1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6On5SZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlKCkKK3sKKyAg
ICBkaXNwYXRjaF9yZWxlYXNlKG1fc2VtYXBob3JlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1f
cXVldWUpOworfQorCitib29sIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVX
aXRoT3BlcmF0aW9uUXVldWU6Omhhc0hhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9o
YW5kbGU7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdp
dGhPcGVyYXRpb25RdWV1ZTo6c2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpCit7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVy
YXRpb25RdWV1ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5lY3Rpb25SZWYg
Y29ubmVjdGlvbikKK3sKKyAgICBDRlVSTENvbm5lY3Rpb25TZXREZWxlZ2F0ZURpc3BhdGNoUXVl
dWUoY29ubmVjdGlvbiwgbV9xdWV1ZSk7Cit9CisKK0NGVVJMUmVxdWVzdFJlZiBSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp3aWxsU2VuZFJl
cXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5h
bFJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3Rvcih0aGlzKTsKKworICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlm
IChwcm90ZWN0b3ItPmhhc0hhbmRsZSgpKSB7CisgICAgICAgICAgICBjb250aW51ZVdpbGxTZW5k
UmVxdWVzdChudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp3aWxsU2VuZFJlcXVlc3QoaGFuZGxlPSVwKSAoJXMp
IiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJl
Y3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoY2ZSZXF1
ZXN0LCBvcmlnaW5hbFJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBpZiAoIXJlZGlyZWN0UmVz
cG9uc2UpIHsKKyAgICAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChj
ZlJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoY2ZSZXF1ZXN0LCBy
ZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAgbV9oYW5kbGUtPndpbGxTZW5kUmVxdWVz
dChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKKyAgICB9KTsKKworICAgIGRpc3Bh
dGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOwor
CisgICAgcmV0dXJuIG1fcmVxdWVzdFJlc3VsdC5sZWFrUmVmKCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4g
cHJvdGVjdG9yKHRoaXMpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKKyAgICAgICAgaWYgKHByb3RlY3Rvci0+aGFzSGFuZGxlKCkpIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0
KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgLy8gQXZvaWQgTUlN
RSB0eXBlIHNuaWZmaW5nIGlmIHRoZSByZXNwb25zZSBjb21lcyBiYWNrIGFzIDMwNCBOb3QgTW9k
aWZpZWQuCisgICAgICAgIENGSFRUUE1lc3NhZ2VSZWYgbXNnID0gd2tHZXRDRlVSTFJlc3BvbnNl
SFRUUFJlc3BvbnNlKGNmUmVzcG9uc2UpOworICAgICAgICBpbnQgc3RhdHVzQ29kZSA9IG1zZyA/
IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUobXNnKSA6IDA7CisKKyAgICAgICAg
aWYgKHN0YXR1c0NvZGUgIT0gMzA0KQorICAgICAgICAgICAgYWRqdXN0TUlNRVR5cGVJZk5lY2Vz
c2FyeShjZlJlc3BvbnNlKTsKKworI2lmICFQTEFURk9STShJT1MpCisgICAgICAgIGlmIChfQ0ZV
UkxSZXF1ZXN0Q29weVByb3RvY29sUHJvcGVydHlGb3JLZXkobV9oYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLmNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSwgQ0ZTVFIoIkZvcmNlSFRNTE1J
TUVUeXBlIikpKQorICAgICAgICAgICAgd2tTZXRDRlVSTFJlc3BvbnNlTUlNRVR5cGUoY2ZSZXNw
b25zZSwgQ0ZTVFIoInRleHQvaHRtbCIpKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisg
ICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMobV9oYW5k
bGUsIGNmUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1f
c2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFJlY2VpdmVE
YXRhKENGRGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoKQoreworICAgIFJlZlB0
cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
PiBwcm90ZWN0b3IodGhpcyk7CisgICAgQ0ZSZXRhaW4oZGF0YSk7CisKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoIXByb3RlY3Rv
ci0+aGFzSGFuZGxlKCkpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRS
ZWNlaXZlRGF0YShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAgICBtX2hh
bmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6
d3JhcENGRGF0YShkYXRhKSwgb3JpZ2luYWxMZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAg
Q0ZSZWxlYXNlKGRhdGEpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZpbmlzaExvYWRpbmcoKQor
eworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9w
ZXJhdGlvblF1ZXVlPiBwcm90ZWN0b3IodGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKHByb3RlY3Rvci0+aGFzSGFuZGxl
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAt
IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6
OmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBt
X2hhbmRsZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUsIDApOworICAgIH0p
OworfQorCit2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3Bl
cmF0aW9uUXVldWU6OmRpZEZhaWwoQ0ZFcnJvclJlZiBlcnJvcikKK3sKKyAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJv
dGVjdG9yKHRoaXMpOworICAgIENGUmV0YWluKGVycm9yKTsKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoIXByb3RlY3Rvci0+aGFz
SGFuZGxlKCkpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRGYWlsKGhh
bmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIG1faGFuZGxlLT5jbGllbnQo
KS0+ZGlkRmFpbChtX2hhbmRsZSwgUmVzb3VyY2VFcnJvcihlcnJvcikpOworICAgICAgICB9CisK
KyAgICAgICAgQ0ZSZWxlYXNlKGVycm9yKTsKKyAgICB9KTsKK30KKworQ0ZDYWNoZWRVUkxSZXNw
b25zZVJlZiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlv
blF1ZXVlOjp3aWxsQ2FjaGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNhY2hlZFJl
c3BvbnNlKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90ZWN0b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAocHJvdGVjdG9y
LT5oYXNIYW5kbGUoKSkgeworICAgICAgICAgICAgY29udGludWVXaWxsQ2FjaGVSZXNwb25zZShu
dWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExPRyhO
ZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0
aE9wZXJhdGlvblF1ZXVlOjp3aWxsQ2FjaGVSZXNwb25zZShoYW5kbGU9JXApICglcykiLCBtX2hh
bmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+d2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhtX2hhbmRsZSwgY2FjaGVkUmVzcG9uc2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFw
aG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworICAgIHJldHVy
biBtX2NhY2hlZFJlc3BvbnNlUmVzdWx0LmxlYWtSZWYoKTsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZl
Q2hhbGxlbmdlKENGVVJMQXV0aENoYWxsZW5nZVJlZiBjaGFsbGVuZ2UpCit7CisgICAgUmVmUHRy
PFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+
IHByb3RlY3Rvcih0aGlzKTsKKyAgICBDRlJldGFpbihjaGFsbGVuZ2UpOworICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghcHJvdGVj
dG9yLT5oYXNIYW5kbGUoKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRp
ZFJlY2VpdmVDaGFsbGVuZ2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAg
ICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UsIG1faGFuZGxlKSk7CisgICAgICAgIH0KKworICAgICAg
ICBDRlJlbGVhc2UoY2hhbGxlbmdlKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRTZW5kQm9keURh
dGEoQ0ZJbmRleCB0b3RhbEJ5dGVzV3JpdHRlbiwgQ0ZJbmRleCB0b3RhbEJ5dGVzRXhwZWN0ZWRU
b1dyaXRlKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90ZWN0b3IodGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKHByb3RlY3Rvci0+
aGFzSGFuZGxlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTE9HKE5ldHdvcmss
ICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0
aW9uUXVldWU6OmRpZFNlbmRCb2R5RGF0YShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9o
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkU2VuZERhdGEobV9oYW5kbGUsIHRvdGFsQnl0
ZXNXcml0dGVuLCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlKTsKKyAgICB9KTsKK30KKworQm9v
bGVhbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1
ZXVlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCit7CisgICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3Rv
cih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF57CisgICAgICAgIGlmIChwcm90ZWN0b3ItPmhhc0hhbmRsZSgpKSB7CisgICAgICAgICAgICBj
b250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGZhbHNlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAg
IG1faGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpOworICAgIH0pOworICAgIGRp
c3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIp
OworICAgIHJldHVybiBtX2Jvb2xSZXN1bHQ7Cit9CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFD
RV9BVVRIX0NBTExCQUNLKQorQm9vbGVhbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoQ0ZV
UkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIFJlZlB0cjxSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90
ZWN0b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeeworICAgICAgICBpZiAocHJvdGVjdG9yLT5oYXNIYW5kbGUoKSkgeworICAgICAgICAg
ICAgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExPRyhOZXR3b3JrLCAi
Q0ZOZXQgLSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlv
blF1ZXVlOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9o
YW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKworICAgICAgICBQcm90ZWN0aW9uU3BhY2UgY29yZVByb3RlY3Rpb25TcGFjZSA9IGNv
cmUocHJvdGVjdGlvblNwYWNlKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGlmIChjb3Jl
UHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNl
QXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duKSB7CisgICAgICAgICAgICBtX2Jvb2xSZXN1bHQg
PSBmYWxzZTsKKyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1hcGhv
cmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorICAgICAgICBtX2hhbmRsZS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShjb3JlUHJvdGVjdGlvblNwYWNlKTsKKyAgICB9KTsKKyAgICBkaXNwYXRjaF9zZW1hcGhv
cmVfd2FpdChtX3NlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKKyAgICByZXR1cm4g
bV9ib29sUmVzdWx0OworfQorI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FM
TEJBQ0spCisKKyNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCit2b2lkIFJl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRp
ZFJlY2VpdmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpCit7CisgICAgUmVmUHRyPFJl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHBy
b3RlY3Rvcih0aGlzKTsKKyAgICBDRlJldGFpbihkYXRhQXJyYXkpOworICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghcHJvdGVjdG9y
LT5oYXNIYW5kbGUoKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFNl
bmRCb2R5RGF0YShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAgICBtX2hh
bmRsZS0+aGFuZGxlRGF0YUFycmF5KGRhdGFBcnJheSk7CisgICAgICAgIH0KKyAgICAgICAgQ0ZS
ZWxlYXNlKGRhdGFBcnJheSk7CisgICAgfSk7Cit9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfQ0ZE
QVRBX0FSUkFZX0NBTExCQUNLKQorCit2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJM
UmVxdWVzdFJlZiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3Q7Cisg
ICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3NlbWFwaG9yZSk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6Y29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWdu
YWwobV9zZW1hcGhvcmUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBtX2Jvb2xSZXN1
bHQgPSBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVf
c2lnbmFsKG1fc2VtYXBob3JlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNl
KENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCit7CisgICAgbV9jYWNoZWRSZXNwb25z
ZVJlc3VsdCA9IHJlc3BvbnNlOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1h
cGhvcmUpOworfQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1
ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgY2Fu
QXV0aGVudGljYXRlKQoreworICAgIG1fYm9vbFJlc3VsdCA9IGNhbkF1dGhlbnRpY2F0ZTsKKyAg
ICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1fc2VtYXBob3JlKTsKK30KKyNlbmRpZiAvLyBV
U0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZVdpdGhPcGVyYXRpb25RdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjk3NzllY2ZlMTk5MzE0N2UzNTgxNDc0MzY5YmRkOGQ4YjAyMGJhZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWVfaAorI2RlZmluZSBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlX2gKKworI2lmIFVTRShD
Rk5FVFdPUkspCisKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUgPGRpc3Bh
dGNoL3F1ZXVlLmg+CisjaW5jbHVkZSA8ZGlzcGF0Y2gvc2VtYXBob3JlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZVdpdGhPcGVyYXRpb25RdWV1ZSBGSU5BTCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNGVVJMQ29u
bmVjdGlvbkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlKFJlc291cmNlSGFuZGxlKik7CisgICAgdmly
dHVhbCB+UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25R
dWV1ZSgpOworCitwcml2YXRlOgorICAgIGJvb2wgaGFzSGFuZGxlKCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVj
dGlvblJlZikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIENGVVJMUmVxdWVzdFJlZiB3aWxsU2Vu
ZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMUmVzcG9uc2VSZWYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShDRkRhdGFSZWYsIENGSW5kZXgg
b3JpZ2luYWxMZW5ndGgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoQ0ZFcnJvclJlZikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3Bv
bnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQ2hhbGxlbmdlKENGVVJMQXV0aENoYWxsZW5nZVJlZikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFNlbmRCb2R5RGF0YShDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBD
RkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Qm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpIE9WRVJSSURFOworI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCBCb29sZWFuIGNhblJl
c3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTFByb3RlY3Rpb25TcGFjZVJlZikgT1ZFUlJJREU7
CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyNpZiBVU0Uo
TkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpIE9WRVJSSURFOworI2VuZGlmIC8vIFVT
RShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKworICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZVNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGJvb2wpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJM
UmVzcG9uc2VSZWYpIE9WRVJSSURFOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FM
TEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShib29sKSBPVkVSUklERTsKKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQorCisgICAgZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV90IG1fc2VtYXBob3JlOworCisgICAgUmV0YWluUHRyPENGVVJM
UmVxdWVzdFJlZj4gbV9yZXF1ZXN0UmVzdWx0OworICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJl
c3BvbnNlUmVmPiBtX2NhY2hlZFJlc3BvbnNlUmVzdWx0OworICAgIGJvb2wgbV9ib29sUmVzdWx0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShDRk5FVFdP
UkspCisKKyNlbmRpZiAvLyBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0
aE9wZXJhdGlvblF1ZXVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAppbmRleCAxNTQ5ZWI3NTU1ZDI4
MjM0ZWMzM2Q4MTk5NDU1MzFhOGM5MjMyNzQxLi5mYWYwMmQ3YTFhMzUwNmE0YzdhYjI0ZmRjZGY2
MTEzMTcyODM3NmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCkBAIC0zMCwxMiArMzAsMTAgQEAK
IAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ0YuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCIKKyNpbmNsdWRl
ICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0
d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDkgKzQ1LDEyIEBACiAjaW5jbHVkZSAi
V2ViQ29yZVVSTFJlc3BvbnNlLmgiCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCisjaWYgUExB
VEZPUk0oSU9TKQorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2Uu
aD4KICNlbmRpZiAvLyBQTEFURk9STShXSU4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5
LDMxICs2MCwyOCBAQCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTAogewogfQogCi1zdGF0aWMgUmV0
YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNl
c3NhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCwgQ0ZVUkxSZXF1ZXN0
UmVmIG5ld1JlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNlKQordm9p
ZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OnNldHVw
UmVxdWVzdChDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJlcXVlc3QpCiB7Ci0gICAgaWYgKGNmUmVk
aXJlY3RSZXNwb25zZSkKLSAgICAgICAgcmV0dXJuIGNmUmVkaXJlY3RSZXNwb25zZTsKLQotICAg
IENGVVJMUmVmIG5ld1VSTCA9IENGVVJMUmVxdWVzdEdldFVSTChuZXdSZXF1ZXN0KTsKLSAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld1NjaGVtZSA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1l
KG5ld1VSTCkpOwotCi0gICAgLy8gSWYgdGhlIHByb3RvY29scyBvZiB0aGUgbmV3IHJlcXVlc3Qg
YW5kIHRoZSBjdXJyZW50IHJlcXVlc3QgbWF0Y2gsIHRoaXMgaXMgbm90IGFuIEhTVFMgcmVkaXJl
Y3QgYW5kIHdlIHNob3VsZG4ndCBzeW50aGVzaXplIGEgcmVkaXJlY3QgcmVzcG9uc2UuCi0gICAg
aWYgKGN1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29sKCkgPT0gU3RyaW5nKG5ld1NjaGVtZS5n
ZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjdXJy
ZW50VVJMID0gY3VycmVudFJlcXVlc3QudXJsKCkuY3JlYXRlQ0ZVUkwoKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcmVzcG9uc2VNZXNzYWdlID0gYWRvcHRDRihDRkhUVFBNZXNz
YWdlQ3JlYXRlUmVzcG9uc2UoMCwgMzAyLCAwLCBrQ0ZIVFRQVmVyc2lvbjFfMSkpOwotICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gbmV3QWJzb2x1dGVVUkwgPSBhZG9wdENGKENGVVJMQ29weUFic29s
dXRlVVJMKG5ld1VSTCkpOwotICAgIENGSFRUUE1lc3NhZ2VTZXRIZWFkZXJGaWVsZFZhbHVlKHJl
c3BvbnNlTWVzc2FnZS5nZXQoKSwgQ0ZTVFIoIkxvY2F0aW9uIiksIENGVVJMR2V0U3RyaW5nKG5l
d0Fic29sdXRlVVJMLmdldCgpKSk7Ci0gICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFs
dWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigiQ2FjaGUtQ29udHJvbCIpLCBDRlNUUigi
bm8tc3RvcmUiKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIENGVVJMUmVxdWVzdFNldFNob3Vs
ZFN0YXJ0U3luY2hyb25vdXNseShyZXF1ZXN0LCAxKTsKKyNlbmRpZgorfQogCi0gICAgUmV0YWlu
UHRyPENGVVJMUmVzcG9uc2VSZWY+IG5ld1Jlc3BvbnNlID0gYWRvcHRDRihDRlVSTFJlc3BvbnNl
Q3JlYXRlV2l0aEhUVFBSZXNwb25zZSgwLCBjdXJyZW50VVJMLmdldCgpLCByZXNwb25zZU1lc3Nh
Z2UuZ2V0KCksIGtDRlVSTENhY2hlU3RvcmFnZU5vdEFsbG93ZWQpKTsKLSAgICByZXR1cm4gbmV3
UmVzcG9uc2U7Cit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZTo6c2V0dXBDb25uZWN0aW9uU2NoZWR1bGluZyhDRlVSTENvbm5lY3Rpb25SZWYgY29u
bmVjdGlvbikKK3sKKyNpZiBQTEFURk9STShXSU4pCisgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1
bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShjb25uZWN0aW9uKTsKKyNlbGlmIFBMQVRGT1JNKElP
UykKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhSdW5Mb29wKGNvbm5lY3Rpb24sIFdl
YlRocmVhZFJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgQ0ZV
UkxDb25uZWN0aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChjb25uZWN0aW9uLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisjZW5kaWYKKyAgICBDRlVSTENvbm5l
Y3Rpb25TY2hlZHVsZURvd25sb2FkV2l0aFJ1bkxvb3AoY29ubmVjdGlvbiwgbG9hZGVyUnVuTG9v
cCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogfQogCiBDRlVSTFJlcXVlc3RSZWYgU3luY2hy
b25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2VuZFJlcXVl
c3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBvcmlnaW5hbFJl
ZGlyZWN0UmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHJlZGly
ZWN0UmVzcG9uc2UgPSBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KG1faGFu
ZGxlLT5jdXJyZW50UmVxdWVzdCgpLCBjZlJlcXVlc3QsIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25z
ZSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVzcG9uc2VSZWY+IHJlZGlyZWN0UmVzcG9uc2UgPSBz
eW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KGNmUmVxdWVzdCwgb3JpZ2luYWxS
ZWRpcmVjdFJlc3BvbnNlKTsKIAogICAgIGlmICghcmVkaXJlY3RSZXNwb25zZSkgewogICAgICAg
ICBDRlJldGFpbihjZlJlcXVlc3QpOwpAQCAtOTIsMzQgKzkwLDcgQEAgQ0ZVUkxSZXF1ZXN0UmVm
IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNl
bmRSZXF1ZXMKIAogICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBTeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdChoYW5kbGU9JXAp
ICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Ci0gICAgQ0ZI
VFRQTWVzc2FnZVJlZiBodHRwTWVzc2FnZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2Uo
cmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7Ci0gICAgaWYgKGh0dHBNZXNzYWdlICYmIENGSFRUUE1l
c3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cE1lc3NhZ2UpID09IDMwNykgewotICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhc3RIVFRQTWV0aG9kID0gbV9oYW5kbGUtPmxhc3RI
VFRQTWV0aG9kKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBuZXdNZXRob2QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVzdE1ldGhv
ZChjZlJlcXVlc3QpKTsKLSAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZVdpdGhPcHRpb25zKGxh
c3RIVFRQTWV0aG9kLmdldCgpLCBuZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3Ry
aW5nR2V0TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdldCgpKSksIGtDRkNvbXBhcmVDYXNlSW5zZW5z
aXRpdmUpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4g
bXV0YWJsZVJlcXVlc3QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5KDAs
IGNmUmVxdWVzdCkpOwotICAgICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24obV9o
YW5kbGUtPnN0b3JhZ2VTZXNzaW9uKCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKLSAgICAgICAg
ICAgIENGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKG11dGFibGVSZXF1ZXN0LmdldCgp
LCBsYXN0SFRUUE1ldGhvZC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0g
bV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7Ci0gICAgICAgICAgICBpZiAoIWVx
dWFsSWdub3JpbmdDYXNlKG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCksICJH
RVQiKSAmJiBib2R5ICYmICFib2R5LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgV2ViQ29y
ZTo6c2V0SFRUUEJvZHkobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGJvZHkpOwotCi0gICAgICAgICAg
ICBTdHJpbmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5o
dHRwQ29udGVudFR5cGUoKTsKLSAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUEhlYWRlckZpZWxk
VmFsdWUobXV0YWJsZVJlcXVlc3QuZ2V0KCksIENGU1RSKCJDb250ZW50LVR5cGUiKSwgb3JpZ2lu
YWxDb250ZW50VHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLQotICAgICAgICAgICAgcmVx
dWVzdCA9IG11dGFibGVSZXF1ZXN0LmdldCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChy
ZXF1ZXN0LmlzTnVsbCgpKQotICAgICAgICByZXF1ZXN0ID0gY2ZSZXF1ZXN0OwotCi0gICAgLy8g
U2hvdWxkIG5vdCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVz
b3VyY2UgdG8gbm9uLXNlY3VyZSBvbmUuCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29s
SXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCAiaHR0cHMi
KSAmJiBtX2hhbmRsZS0+Y29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KCkpCi0gICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKLQorICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KGNmUmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZS5nZXQoKSk7CiAgICAgbV9oYW5kbGUtPndpbGxTZW5kUmVxdWVz
dChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKIAogICAgIGlmIChyZXF1ZXN0Lmlz
TnVsbCgpKQpAQCAtMzAxLDYgKzI3MiwzMyBAQCB2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycgogfQog
I2VuZGlmIC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAordm9pZCBTeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBTeW5jaHJvbm91c1Jlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2Uo
Q0ZDYWNoZWRVUkxSZXNwb25zZVJlZikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIFN5bmNocm9u
b3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFD
SykKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaApp
bmRleCA3NDNmNDVlMDQwMDFlZmU5ODQwMWVlMjE1MzgxYzRmZDE1Yzg3ZWZmLi45MjQyYWM1ZDk3
ZGFjMGJkODY5NjQxNWQzYzYzOWE1NzBhN2Y5MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKQEAgLTQ0
LDYgKzQ0LDkgQEAgcHVibGljOgogI2VuZGlmIC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9D
QUxMQkFDSykKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBSZXF1ZXN0KENGTXV0
YWJsZVVSTFJlcXVlc3RSZWYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5l
Y3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZikgT1ZFUlJJREU7CisKICAgICB2aXJ0
dWFsIENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVS
TFJlc3BvbnNlUmVmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKENGVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZiB3aWxsQ2FjaGVSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVS
UklERTsKQEAgLTUzLDYgKzU2LDE0IEBAIHByaXZhdGU6CiAjaWYgVVNFKFBST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSykKICAgICB2aXJ0dWFsIEJvb2xlYW4gY2FuUmVzcG9uZFRvUHJvdGVj
dGlvblNwYWNlKENGVVJMUHJvdGVjdGlvblNwYWNlUmVmKSBPVkVSUklERTsKICNlbmRpZiAvLyBV
U0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorCisgICAgdmlydHVhbCB2b2lkIGNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRV
UkxSZXNwb25zZVJlZikgT1ZFUlJJREU7CisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9D
QUxMQkFDSykKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKGJvb2wpIE9WRVJSSURFOworI2VuZGlmIC8vIFVTRShQUk9URUNUSU9O
X1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219010</attachid>
            <date>2013-12-11 15:28:58 -0800</date>
            <delta_ts>2013-12-25 13:00:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124440-20131211152857.patch</filename>
            <type>text/plain</type>
            <size>54373</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZhMzllOTNlMmYxZGM1
ODI5Mzk5MzlhMTJmYTBhMzMwMTAzODZkNy4uZDZiMjAwYzU1NDIyZTc3OTIzMmZkYzA3NTQ1MDhh
YmQ4ZDg2ZDI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTEyLTExICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0aGUgQ0ZO
ZXR3b3JrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhc3luY2hyb25vdXMgUmVzb3VyY2VIYW5kbGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgQWRk
IGEgc2Vjb25kIHN1YmNsYXNzIG9mIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGU6IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVl
dWUuCisgICAgICAgIFRoZSBkaWZmZXJlbmNlIGlzIHRob3NlIG9iamVjdHMgaGFuZGxlIHRoZSBu
ZXR3b3JrIGNhbGxiYWNrIG9uIGEgZGlmZmVyZW50IHF1ZXVlLgorCisgICAgICAgIFNvbWUgY29t
bW9uIGNvZGUgaGFzIGJlZW4gcmVmYWN0b3JlZCBpbiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlIHRvIHJlZHVjZSBkdXBsaWNhdGVkIGNvZGUuCisKKyAgICAgICAgVGhlIGlu
aXRpYWxpemF0aW9uIG9mIHRoZSByZXF1ZXN0IGFuZCBjb25uZWN0aW9uIGlzIG1vdmVkIHRvIHRo
ZSBzdWJjbGFzcyB0byBjbGVhbiB1cCBpbml0aWFsaXphdGlvbi4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6
d2lsbENhY2hlUmVzcG9uc2VBc3luYyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjp+UmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjb25uZWN0aW9uV2FzQ2FuY2VsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OnNldHVw
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVX
aXRoT3BlcmF0aW9uUXVldWU6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpk
aWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdp
dGhPcGVyYXRpb25RdWV1ZTo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpk
aWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OndpbGxDYWNoZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0
aW9uUXVldWU6OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkU2Vu
ZEJvZHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGVXaXRoT3BlcmF0aW9uUXVldWU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9w
ZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZlRGF0YUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y29udGludWVTaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZTo6cmVsZWFzZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzeW50aGVzaXplUmVkaXJlY3RSZXNw
b25zZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGU6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpzZXR1cFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlOjpzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNl
bmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVn
YXRlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpTeW5j
aHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OmNvbnRpbnVlU2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25vdXNS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZVdpbGxDYWNoZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oOgorCiAyMDEzLTEyLTExICBCZWFy
IFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBb
Q1NTIFNoYXBlc10gSGlnaGxpZ2h0IG1hcmdpbi1zaGFwZSBmb3Igc2hhcGUtb3V0c2lkZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgppbmRleCAzMTNkYTdhODcwOTc4ODY4Zjc4NDdhZDExNzRjOWYxNTlhYmRh
NzZjLi42ZjAzNzIxZTIxZGQ4YWFmYzk5ZDBhYzJiNzdhMzQ0ODgxNTZhNTk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgpAQCAtMjI3Niw2ICsyMjc2LDcgQEAgX19aTjdXZWJDb3JlMTh0ZXh0QnJlYWtG
b2xsb3dpbmdFUE5TXzE3VGV4dEJyZWFrSXRlcmF0b3JFaQogX19aTjdXZWJDb3JlMTlSZXNvdXJj
ZVJlcXVlc3RCYXNlMTRzZXRDYWNoZVBvbGljeUVOU18yNlJlc291cmNlUmVxdWVzdENhY2hlUG9s
aWN5RQogX19aTjdXZWJDb3JlMTlhcHBsaWNhdGlvbklzV2ViQXBwRXYKIF9fWk43V2ViQ29yZTIw
TmV0d29ya1N0YXRlTm90aWZpZXIxMXNldElzT25MaW5lRWIKK19fWk43V2ViQ29yZTIwUmVzb3Vy
Y2VIYW5kbGVDbGllbnQyMndpbGxDYWNoZVJlc3BvbnNlQXN5bmNFUE5TXzE0UmVzb3VyY2VIYW5k
bGVFUEsyMF9DRkNhY2hlZFVSTFJlc3BvbnNlCiBfX1pON1dlYkNvcmUyMGFwcGxpY2F0aW9uSXNP
a0N1cGlkRXYKIF9fWk43V2ViQ29yZTIwZW5kT2ZFZGl0YWJsZUNvbnRlbnRFUktOU18xNVZpc2li
bGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTIwbGFzdE9mZnNldEZvckVkaXRpbmdFUEtOU180Tm9k
ZUUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA3ZGNjOTBjYjhjNDJkODNkMDViZjdhNTRhZTJjYTExNGZmMGZlNTc3Li4xYzRlYzdi
OWUyMmRmYTk5NGUxMmQxMWFmYjc3ODI3ODFiOWY3YmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MTAsNiArOTEwLDggQEAK
IAkJMjY1NTQxM0ExNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9TLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY1NTQxMzgxNDg5ODExQzAwMERG
QzVEIC8qIEtleUV2ZW50SU9TLm1tICovOyB9OwogCQkyNjU1NDE1MjE0ODlCMjMzMDAwREZDNUQg
LyogQ3Vyc29ySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2NTU0MTRCMTQ4OUFBMkIwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwICovOyB9Owog
CQkyNjkyMzk5NjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OTIzOTkyMTUw
NUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovOyB9OworCQkyNkMx
NUNGNjE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNkMxNUNGNDE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHAgKi87IH07CisJ
CTI2QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlv
bkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNkMxNUNGNTE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oICovOyB9Owog
CQkyNkMxN0EzRTE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTdBM0MxNDkxRDJENDAwRDEy
QkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLzsgfTsKIAkJMjZDMTdBM0YxNDkxRDJENDAwRDEyQkEy
IC8qIEZpbGVTeXN0ZW1JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAq
LzsgfTsKIAkJMjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk4
QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi87IH07CkBA
IC03NTY0LDYgKzc1NjYsOCBAQAogCQkyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQgLyogQ3Vyc29y
SU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1cnNvcklPUy5j
cHA7IHBhdGggPSBpb3MvQ3Vyc29ySU9TLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjY5MjM5OTExNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjY5MjM5OTIxNTA1RTFB
QTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTI2QzE1Q0Y0MTg1N0UxNUQwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyNkMxNUNGNTE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJh
dGlvblF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNDMTQ5MUQy
RDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZpbGVTeXN0ZW1JT1MuaDsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxl
U3lzdGVtSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRmls
ZVN5c3RlbUlPUy5tbTsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVND
SUlGYXN0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNB
U0NJSUZhc3RQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTU1Niw2ICsx
OTU2MCw4IEBACiAJCQkJN0VFNjg0NTkxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlSGFuZGxl
Q0ZOZXQuY3BwICovLAogCQkJCTI2RkFFNEM4MTg1MkUzQTUwMDRDOEM0NiAvKiBSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLywKIAkJCQkyNkZBRTRDOTE4NTJFM0E1
MDA0QzhDNDYgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oICovLAor
CQkJCTI2QzE1Q0Y0MTg1N0UxNUQwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmNwcCAqLywKKwkJCQkyNkMxNUNGNTE4NTdF
MTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhP
cGVyYXRpb25RdWV1ZS5oICovLAogCQkJCTdFRTY4NDVBMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNv
dXJjZVJlcXVlc3QuaCAqLywKIAkJCQk3RUU2ODQ1QjEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3Vy
Y2VSZXF1ZXN0Q0ZOZXQuY3BwICovLAogCQkJCTdFRTY4NDVDMTJEMjZFMzgwMEU3OTQxNSAvKiBS
ZXNvdXJjZVJlcXVlc3RDRk5ldC5oICovLApAQCAtMjIxNzksNiArMjIxODUsNyBAQAogCQkJCTQ5
QjM3NjBEMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRDU2ODZDQTEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRpb0RlY29kZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0u
aCBpbiBIZWFkZXJzICovLAorCQkJCTI2QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAvKiBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QzUzNDNGRDE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M2MUYwMTEyMDk1Qzg3MDA3QTNDNjcg
LyogQXRvbWljU3RyaW5nS2V5ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFGRjhG
NjAxODA3NDQyMTAwMTMyNjc0IC8qIFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTc1NCw2ICsyNTc2MSw3IEBACiAJCQkJNDlCMzc2MEMxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1Njg2QzkxM0FDMTgwMjAwQjY5QzY4IC8q
IEFzeW5jQXVkaW9EZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQ0RFOTIwMTUwMThF
RDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjZD
MTVDRjYxODU3RTE1RDAwRjE1QzAzIC8qIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDNEE4MEUw
OUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2MjlFQTQx
NTRCNDcxNjAwMDZEMDI2IC8qIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZEMzE1RkY2MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKaW5kZXggMjhjZjA5NzM5M2VkZWJhOGRkNjIxMDhj
NGFjZTY4ZjI1MGM5NzU1OS4uY2E1MzFiMjY2N2EyOWFjNWU1NDAwYmIzZjU0M2Y2MmNhYjMxOTVm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGll
bnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKICAgICBkLT5tX2NsaWVudCA9IGNsaWVu
dDsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVVTRShD
Rk5FVFdPUkspCiAvLyBSZXNvdXJjZUhhbmRsZSBuZXZlciB1c2VzIGFzeW5jIGNsaWVudCBjYWxs
cyBvbiB0aGVzZSBwbGF0Zm9ybXMgeWV0Lgogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVX
aWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCAzMDk4ODc2MzQw
OGNlZWE3NWVmYzlmYzgyYTE4OTMyNGYzZDY1YTdiLi4yMTllNDdlNDljZmU5YWU1NGZhOWExYTA0
ZjY4ZWI2YTc0MWZiZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5oCkBAIC02OSw2ICs2OSw3IEBAIHR5cGVkZWYgc3RydWN0IG9iamNf
b2JqZWN0ICppZDsKICNlbmRpZgogCiAjaWYgVVNFKENGTkVUV09SSykKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IF9DRkNhY2hlZFVSTFJlc3BvbnNlKiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmOwogdHlw
ZWRlZiBzdHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwogdHlwZWRl
ZiBpbnQgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeTsKIHR5cGVkZWYgc3RydWN0IE9w
YXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CkBAIC0yMTMs
OCArMjE0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIENhbGxlZCBpbiByZXNwb25zZSB0byBSZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENh
Y2hlUmVzcG9uc2VBc3luYygpLgorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdm9pZCBjb250aW51
ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOworI2VsaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZvaWQgY29udGludWVXaWxsQ2FjaGVSZXNwb25zZShOU0NhY2hlZFVSTFJl
c3BvbnNlICopOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKaW5kZXggNjM5N2Q3MDI3ZWI0YjQ0
MTlkMWRjOGIyZTNjMDYwZDViM2E5YmY2ZS4uOGViNGVlYjZhZjU0OWY5YWEwY2RlODUyNjRkN2E4
ZmFhODJhYzFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKQEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGVDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VB
c3luYyhSZXNvdXJjZUhhCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0Uo
Q0ZORVRXT1JLKQordm9pZCBSZXNvdXJjZUhhbmRsZUNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2VB
c3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3Bv
bnNlKQoreworICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7
Cit9CisjZWxpZiBQTEFURk9STShNQUMpCiB2b2lkIFJlc291cmNlSGFuZGxlQ2xpZW50Ojp3aWxs
Q2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVz
cG9uc2UgKnJlc3BvbnNlKQogewogICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25z
ZShyZXNwb25zZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKaW5kZXggYTJkODcxZDIzYjc3M2EwOWI5ZDlmNzlmMzIw
NDcwNmZiZmNhYjdkMy4uYjNhNTkyMzA0Mjg1MGJhYzRiN2FkZjIzNzM3YzhhYTUxMjY2MWE3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVDbGllbnQuaApAQCAtODksOCArODksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBDbGllbnQgd2lsbCBwYXNzIGFuIHVwZGF0ZWQgcmVxdWVzdCB1c2luZyBSZXNvdXJj
ZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKCkg
d2hlbiByZWFkeS4KICAgICAgICAgdmlydHVhbCB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhVVNFKENGTkVUV09SSykKICAgICAg
ICAgLy8gQ2xpZW50IHdpbGwgcGFzcyBhbiB1cGRhdGVkIHJlcXVlc3QgdXNpbmcgUmVzb3VyY2VI
YW5kbGU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoKSB3aGVuIHJlYWR5LgorI2lmIFVTRShD
Rk5FVFdPUkspCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJl
c291cmNlSGFuZGxlKiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZik7CisjZWxpZiBQTEFURk9STShN
QUMpCiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNl
SGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSAqKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0
LmNwcAppbmRleCAyZDM0ODgwZmQ4NDNhN2UzODA4OWRkNjllNjgwNTA0MjQ4YTE1ZWZkLi43ODIw
ZjkyYmI2YTg1OWFlMmU5NDRhZjExY2FmYzBlZTE2ZjNhZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5j
cHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJGb3JtRGF0YVN0cmVhbUNGTmV0LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxv
YWRlclJ1bkxvb3BDRi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3Jr
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKQEAgLTUyLDExICs1MSw4
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIK
LSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0KICNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5o
IgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQ0ZORVRXT1JL
KQogI2luY2x1ZGUgIldlYkNvcmVVUkxSZXNwb25zZS5oIgpAQCAtMTA1LDYgKzEwMSw5IEBAIHN0
YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGVyKFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgQ3JlZGVuCiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJj
ZUhhbmRsZUludGVybmFsKCkKIHsKKyAgICBpZiAobV9jb25uZWN0aW9uRGVsZWdhdGUpCisgICAg
ICAgIG1fY29ubmVjdGlvbkRlbGVnYXRlLT5yZWxlYXNlSGFuZGxlKCk7CisKICAgICBpZiAobV9j
b25uZWN0aW9uKSB7CiAgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBDYW5jZWxsaW5nIGNv
bm5lY3Rpb24gJXAgKCVzKSIsIG1fY29ubmVjdGlvbi5nZXQoKSwgbV9maXJzdFJlcXVlc3QudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIENGVVJMQ29ubmVjdGlvbkNhbmNl
bChtX2Nvbm5lY3Rpb24uZ2V0KCkpOwpAQCAtMjA0LDExICsyMDMsMTggQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UsIGJvb2wKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShwcm9wZXJ0aWVzRGljdGlvbmFy
eS5nZXQoKSwga0NGVVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMsIHN0cmVhbVBy
b3BlcnRpZXMpOwogICAgIENGUmVsZWFzZShzdHJlYW1Qcm9wZXJ0aWVzKTsKIAotI2lmIFBMQVRG
T1JNKElPUykKLSAgICBDRlVSTFJlcXVlc3RTZXRTaG91bGRTdGFydFN5bmNocm9ub3VzbHkocmVx
dWVzdC5nZXQoKSwgMSk7Ci0jZW5kaWYKIAorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChj
bGllbnQoKSAmJiBjbGllbnQoKS0+dXNlc0FzeW5jQ2FsbGJhY2tzKCkpCisgICAgICAgIGQtPm1f
Y29ubmVjdGlvbkRlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUodGhpcykpOworICAgIGVsc2UKKyAgICAg
ICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgU3luY2hyb25vdXNSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKHRoaXMpKTsKKyNlbHNlCiAgICAgZC0+
bV9jb25uZWN0aW9uRGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgU3luY2hyb25vdXNSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKHRoaXMpKTsKKyNlbmRpZgorICAgIGQtPm1fY29u
bmVjdGlvbkRlbGVnYXRlLT5zZXR1cFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisKICAgICBDRlVS
TENvbm5lY3Rpb25DbGllbnRfVjYgY2xpZW50ID0gZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPm1h
a2VDb25uZWN0aW9uQ2xpZW50KCk7CiAKICAgICBkLT5tX2Nvbm5lY3Rpb24gPSBhZG9wdENGKENG
VVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzKDAsIHJlcXVlc3QuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0ZVUkxDb25uZWN0aW9uQ2xpZW50Kj4oJmNsaWVudCksIHByb3BlcnRpZXNE
aWN0aW9uYXJ5LmdldCgpKSk7CkBAIC0yMzAsMTQgKzIzNiw3IEBAIGJvb2wgUmVzb3VyY2VIYW5k
bGU6OnN0YXJ0KCkKIAogICAgIGNyZWF0ZUNGVVJMQ29ubmVjdGlvbihzaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSwgZC0+bV9zaG91bGRDb250ZW50U25pZmYsIGNsaWVudCgpLT5jb25uZWN0aW9u
UHJvcGVydGllcyh0aGlzKS5nZXQoKSk7CiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZVUkxD
b25uZWN0aW9uU2NoZWR1bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShkLT5tX2Nvbm5lY3Rpb24u
Z2V0KCkpOwotI2VsaWYgUExBVEZPUk0oSU9TKQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxl
V2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBXZWJUaHJlYWRSdW5Mb29wKCksIGtD
RlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0jZWxzZQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxl
V2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCks
IGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0jZW5kaWYKLSAgICBDRlVSTENvbm5lY3Rpb25TY2hl
ZHVsZURvd25sb2FkV2l0aFJ1bkxvb3AoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBsb2FkZXJSdW5M
b29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdh
dGUtPnNldHVwQ29ubmVjdGlvblNjaGVkdWxpbmcoZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKICAg
ICBDRlVSTENvbm5lY3Rpb25TdGFydChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwogCiAgICAgTE9H
KE5ldHdvcmssICJDRk5ldCAtIFN0YXJ0aW5nIFVSTCAlcyAoaGFuZGxlPSVwLCBjb25uPSVwKSIs
IGZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRoaXMsIGQtPm1f
Y29ubmVjdGlvbi5nZXQoKSk7CkBAIC0yOTMsOSArMjkyLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlUmVzCiBib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgp
CiB7CiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KCkiKTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UodGhpcyk7Ci0KKyAgICBpZiAoUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCA9IHRoaXMtPmNsaWVudCgpKSB7CisgICAgICAgIGlmIChjbGllbnQtPnVzZXNB
c3luY0NhbGxiYWNrcygpKQorICAgICAgICAgICAgY2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZUFzeW5jKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gY2xp
ZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKKyAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC0zNjUsOSArMzY3LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
CiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIGJvb2wgUmVzb3VyY2VI
YW5kbGU6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50KCktPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Uo
dGhpcywgcHJvdGVjdGlvblNwYWNlKTsKLQorICAgIGlmIChSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpIHsKKyAgICAgICAgaWYgKGNsaWVudC0+dXNlc0FzeW5j
Q2FsbGJhY2tzKCkpCisgICAgICAgICAgICBjbGllbnQtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2VBc3luYyh0aGlzLCBwcm90ZWN0aW9uU3BhY2UpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4gY2xpZW50LT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7CisgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KICNlbmRpZgpAQCAtNTUyLDYgKzU1NywzNiBAQCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IFJlc291cmNlSGFuZGxlOjpjdXJyZW50UmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQt
Pm1fY3VycmVudFJlcXVlc3Q7CiB9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3Q7CisgICAgaWYgKCFyZXF1ZXN0UmVz
dWx0LmlzTnVsbCgpKQorICAgICAgICByZXF1ZXN0UmVzdWx0LnNldFN0b3JhZ2VTZXNzaW9uKGQt
Pm1fc3RvcmFnZVNlc3Npb24uZ2V0KCkpOworICAgIGQtPm1fY29ubmVjdGlvbkRlbGVnYXRlLT5j
b250aW51ZVdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0UmVzdWx0LmNmVVJMUmVxdWVzdChVcGRhdGVI
VFRQQm9keSkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpCit7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlU2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCB1c2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICBk
LT5tX2Nvbm5lY3Rpb25EZWxlZ2F0ZS0+Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSh1c2VDcmVkZW50aWFsU3RvcmFnZSk7Cit9CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9B
VVRIX0NBTExCQUNLKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVDYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgY2FuQXV0aGVudGljYXRlKQoreworICAgIGQt
Pm1fY29ubmVjdGlvbkRlbGVnYXRlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoY2FuQXV0aGVudGljYXRlKTsKK30KKyNlbmRpZgorCit2b2lkIFJlc291cmNl
SGFuZGxlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYg
cmVzcG9uc2UpCit7CisgICAgZC0+bV9jb25uZWN0aW9uRGVsZWdhdGUtPmNvbnRpbnVlV2lsbENh
Y2hlUmVzcG9uc2UocmVzcG9uc2UpOworfQogI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCiAKICNp
ZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAppbmRleCBjNDMzOGViM2JlMTgzMzA4
ZjUzMDliODA1NTllMDAxMzllMmY2NmM1Li4zYmYwMzQ5ZTk1YmUwMjczNzI3OTUwZTcwMGRmNzhl
YTI0NWEwYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKQEAgLTI4LDYgKzI4LDE4IEBACiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCisj
aW5jbHVkZSAiRm9ybURhdGFTdHJlYW1DRk5ldC5oIgorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKworI2lmIFBMQVRGT1JNKE1BQykK
KyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCkBAIC0zOSw2ICs1MSwxMSBAQCBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp+UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZSgpCiB7CiB9CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6cmVsZWFzZUhhbmRsZSgpCit7CisgICAgbV9oYW5kbGUgPSBudWxscHRyOwor
fQorCiBDRlVSTFJlcXVlc3RSZWYgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZTo6d2lsbFNlbmRSZXF1ZXN0Q2FsbGJhY2soQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVl
c3RSZWYgY2ZSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25z
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKS0+d2lsbFNlbmRSZXF1ZXN0KGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJl
c3BvbnNlKTsKQEAgLTk5LDYgKzExNiw2MSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhQXJyYXlDYWxsYmFjayhDRlVSTENvbgogfQog
I2VuZGlmIC8vIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKIAorUmV0YWluUHRy
PENGVVJMUmVzcG9uc2VSZWY+IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6
OnN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoQ0ZVUkxSZXF1ZXN0UmVmIG5l
d1JlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlm
IChjZlJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAgIHJldHVybiBjZlJlZGlyZWN0UmVzcG9uc2U7
CisKKyAgICBDRlVSTFJlZiBuZXdVUkwgPSBDRlVSTFJlcXVlc3RHZXRVUkwobmV3UmVxdWVzdCk7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuZXdTY2hlbWUgPSBhZG9wdENGKENGVVJMQ29w
eVNjaGVtZShuZXdVUkwpKTsKKworICAgIC8vIElmIHRoZSBwcm90b2NvbHMgb2YgdGhlIG5ldyBy
ZXF1ZXN0IGFuZCB0aGUgY3VycmVudCByZXF1ZXN0IG1hdGNoLCB0aGlzIGlzIG5vdCBhbiBIU1RT
IHJlZGlyZWN0IGFuZCB3ZSBzaG91bGRuJ3Qgc3ludGhlc2l6ZSBhIHJlZGlyZWN0IHJlc3BvbnNl
LgorICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QgPSBtX2hhbmRsZS0+
Y3VycmVudFJlcXVlc3QoKTsKKyAgICBpZiAoY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2wo
KSA9PSBTdHJpbmcobmV3U2NoZW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGN1cnJlbnRVUkwgPSBjdXJyZW50UmVxdWVzdC51cmwo
KS5jcmVhdGVDRlVSTCgpOworICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiByZXNwb25z
ZU1lc3NhZ2UgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXNwb25zZSgwLCAzMDIsIDAs
IGtDRkhUVFBWZXJzaW9uMV8xKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBuZXdBYnNvbHV0
ZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxDb3B5QWJzb2x1dGVVUkwobmV3VVJMKSk7CisgICAgQ0ZIVFRQ
TWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVzcG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigi
TG9jYXRpb24iKSwgQ0ZVUkxHZXRTdHJpbmcobmV3QWJzb2x1dGVVUkwuZ2V0KCkpKTsKKyAgICBD
RkhUVFBNZXNzYWdlU2V0SGVhZGVyRmllbGRWYWx1ZShyZXNwb25zZU1lc3NhZ2UuZ2V0KCksIENG
U1RSKCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJuby1zdG9yZSIpKTsKKworICAgIFJldGFpblB0
cjxDRlVSTFJlc3BvbnNlUmVmPiBuZXdSZXNwb25zZSA9IGFkb3B0Q0YoQ0ZVUkxSZXNwb25zZUNy
ZWF0ZVdpdGhIVFRQUmVzcG9uc2UoMCwgY3VycmVudFVSTC5nZXQoKSwgcmVzcG9uc2VNZXNzYWdl
LmdldCgpLCBrQ0ZVUkxDYWNoZVN0b3JhZ2VOb3RBbGxvd2VkKSk7CisgICAgcmV0dXJuIG5ld1Jl
c3BvbnNlOworfQorCitSZXNvdXJjZVJlcXVlc3QgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6Y3JlYXRlUmVzb3VyY2VSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiBjZlJlcXVl
c3QsIENGVVJMUmVzcG9uc2VSZWYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdDsKKyAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBNZXNzYWdlID0gQ0ZVUkxS
ZXNwb25zZUdldEhUVFBSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBpZiAoaHR0cE1l
c3NhZ2UgJiYgQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwTWVzc2FnZSkg
PT0gMzA3KSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFzdEhUVFBNZXRob2Qg
PSBtX2hhbmRsZS0+bGFzdEhUVFBNZXRob2QoKS5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q29w
eUhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOworICAgICAgICBpZiAoQ0ZTdHJpbmdDb21w
YXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0KCksIG5ld01ldGhvZC5nZXQoKSwgQ0ZS
YW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFzdEhUVFBNZXRob2QuZ2V0KCkpKSwga0NG
Q29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk11dGFi
bGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q3Jl
YXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7CisgICAgICAgICAgICB3a1NldFJlcXVlc3RT
dG9yYWdlU2Vzc2lvbihtX2hhbmRsZS0+c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJsZVJlcXVlc3Qu
Z2V0KCkpOworICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0
YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9kLmdldCgpKTsKKworICAgICAgICAgICAg
Rm9ybURhdGEqIGJvZHkgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAg
ICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgp
Lmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkgJiYgIWJvZHktPmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgYm9k
eSk7CisKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5hbENvbnRlbnRUeXBlID0gbV9oYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOworICAgICAgICAgICAgaWYgKCFvcmln
aW5hbENvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBDRlVSTFJlcXVlc3RT
ZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIkNvbnRl
bnQtVHlwZSIpLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwor
CisgICAgICAgICAgICByZXF1ZXN0ID0gbXV0YWJsZVJlcXVlc3QuZ2V0KCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAocmVxdWVzdC5pc051bGwoKSkKKyAgICAgICAgcmVxdWVzdCA9IGNm
UmVxdWVzdDsKKworICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYm
IHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgbV9oYW5kbGUt
PmNvbnRleHQoKS0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpKQor
ICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVyKCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7
Cit9CisKIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlOjptYWtlQ29ubmVjdGlvbkNsaWVudCgpIGNvbnN0CiB7CiAgICAgQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50X1Y2IGNsaWVudCA9IHsgNiwgdGhpcywgMCwgMCwgMCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKaW5kZXggMDVlMjc3ZmJi
ODZlNGY3NTJhMjc1MTRlY2UwNzYwNDMwZTcwMTg5Ni4uMDMwNjdlYTNhMjM3OWU4ODg5MTk2NmY2
OGZkMzNkZjZjM2I5YzM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmgKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2lmIFVTRShDRk5FVFdPUkspCiAK
KyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxD
b25uZWN0aW9uUHJpdi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEs
NiArNDMsMjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUoKTsKIAogICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBtYWtlQ29u
bmVjdGlvbkNsaWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXR1cFJlcXVlc3QoQ0ZN
dXRhYmxlVVJMUmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENvbm5lY3Rp
b25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZikgPSAwOworICAgIHZvaWQgcmVsZWFzZUhh
bmRsZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJM
UmVxdWVzdFJlZikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNw
b25zZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZShib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbENhY2hlUmVz
cG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgPSAwOworI2lmIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKSA9IDA7CisjZW5kaWYgLy8gVVNFKFBST1RF
Q1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKworcHJvdGVjdGVkOgorICAgIFJldGFpblB0cjxD
RlVSTFJlc3BvbnNlUmVmPiBzeW50aGVzaXplUmVkaXJlY3RSZXNwb25zZUlmTmVjZXNzYXJ5KENG
VVJMUmVxdWVzdFJlZiwgQ0ZVUkxSZXNwb25zZVJlZik7CisgICAgUmVzb3VyY2VSZXF1ZXN0IGNy
ZWF0ZVJlc291cmNlUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWYpOwog
CiBwcml2YXRlOgogICAgIHN0YXRpYyBDRlVSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0Q2Fs
bGJhY2soQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
V2l0aE9wZXJhdGlvblF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2Q4MDlhNDUyZDBlNWM0NTgyNzMzMGZiMzUwNjRhNDA2N2FmZGI1
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5j
cHAKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25R
dWV1ZS5oIgorCisjaWYgVVNFKENGTkVUV09SSykKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9u
Q0YuaCIKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNp
bmNsdWRlICJXZWJDb3JlVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25R
dWV1ZTo6UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25R
dWV1ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQorICAgIDogUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZShoYW5kbGUpCisgICAgLCBtX3F1ZXVlKGRpc3BhdGNoX3F1ZXVlX2Ny
ZWF0ZSgiY29tLmFwcGxlLldlYkNvcmUvQ0ZOZXR3b3JrIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFM
KSkKKyAgICAsIG1fc2VtYXBob3JlKGRpc3BhdGNoX3NlbWFwaG9yZV9jcmVhdGUoMCkpCit7Cisg
ICAgZGlzcGF0Y2hfcXVldWVfdCBiYWNrZ3JvdW5kUXVldWUgPSBkaXNwYXRjaF9nZXRfZ2xvYmFs
X3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0hJR0gsIDApOworICAgIGRpc3BhdGNoX3Nl
dF90YXJnZXRfcXVldWUobV9xdWV1ZSwgYmFja2dyb3VuZFF1ZXVlKTsKK30KKworUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6flJlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUoKQoreworICAg
IGRpc3BhdGNoX3JlbGVhc2UobV9zZW1hcGhvcmUpOworICAgIGRpc3BhdGNoX3JlbGVhc2UobV9x
dWV1ZSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdp
dGhPcGVyYXRpb25RdWV1ZTo6aGFzSGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX2hh
bmRsZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0
aE9wZXJhdGlvblF1ZXVlOjpzZXR1cFJlcXVlc3QoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZikKK3sK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJh
dGlvblF1ZXVlOjpzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZiBj
b25uZWN0aW9uKQoreworICAgIENGVVJMQ29ubmVjdGlvblNldERlbGVnYXRlRGlzcGF0Y2hRdWV1
ZShjb25uZWN0aW9uLCBtX3F1ZXVlKTsKK30KKworQ0ZVUkxSZXF1ZXN0UmVmIFJlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OndpbGxTZW5kUmVx
dWVzdChDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFs
UmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdG9yKHRoaXMpOworCisgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYg
KHByb3RlY3Rvci0+aGFzSGFuZGxlKCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OndpbGxTZW5kUmVxdWVzdChoYW5kbGU9JXApICglcyki
LCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgICAgIFJldGFpblB0cjxDRlVSTFJlc3BvbnNlUmVmPiByZWRpcmVj
dFJlc3BvbnNlID0gc3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vzc2FyeShjZlJlcXVl
c3QsIG9yaWdpbmFsUmVkaXJlY3RSZXNwb25zZSk7CisgICAgICAgIGlmICghcmVkaXJlY3RSZXNw
b25zZSkgeworICAgICAgICAgICAgbV9oYW5kbGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNm
UmVxdWVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCA9IGNyZWF0ZVJlc291cmNlUmVxdWVzdChjZlJlcXVlc3QsIHJl
ZGlyZWN0UmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBtX2hhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0
KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UuZ2V0KCkpOworICAgIH0pOworCisgICAgZGlzcGF0
Y2hfc2VtYXBob3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CisK
KyAgICByZXR1cm4gbV9yZXF1ZXN0UmVzdWx0LmxlYWtSZWYoKTsKK30KKwordm9pZCBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNl
aXZlUmVzcG9uc2UoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQoreworICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBw
cm90ZWN0b3IodGhpcyk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeeworICAgICAgICBpZiAocHJvdGVjdG9yLT5oYXNIYW5kbGUoKSkgeworICAgICAg
ICAgICAgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpkaWRSZWNlaXZlUmVz
cG9uc2UoaGFuZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAvLyBBdm9pZCBNSU1F
IHR5cGUgc25pZmZpbmcgaWYgdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgYXMgMzA0IE5vdCBNb2Rp
ZmllZC4KKyAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBtc2cgPSB3a0dldENGVVJMUmVzcG9uc2VI
VFRQUmVzcG9uc2UoY2ZSZXNwb25zZSk7CisgICAgICAgIGludCBzdGF0dXNDb2RlID0gbXNnID8g
Q0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShtc2cpIDogMDsKKworICAgICAgICBp
ZiAoc3RhdHVzQ29kZSAhPSAzMDQpCisgICAgICAgICAgICBhZGp1c3RNSU1FVHlwZUlmTmVjZXNz
YXJ5KGNmUmVzcG9uc2UpOworCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKF9DRlVS
TFJlcXVlc3RDb3B5UHJvdG9jb2xQcm9wZXJ0eUZvcktleShtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0
KCkuY2ZVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpLCBDRlNUUigiRm9yY2VIVE1MTUlN
RVR5cGUiKSkpCisgICAgICAgICAgICB3a1NldENGVVJMUmVzcG9uc2VNSU1FVHlwZShjZlJlc3Bv
bnNlLCBDRlNUUigidGV4dC9odG1sIikpOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyAg
ICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhtX2hhbmRs
ZSwgY2ZSZXNwb25zZSk7CisgICAgfSk7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQobV9z
ZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkUmVjZWl2ZURh
dGEoQ0ZEYXRhUmVmIGRhdGEsIENGSW5kZXggb3JpZ2luYWxMZW5ndGgpCit7CisgICAgUmVmUHRy
PFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+
IHByb3RlY3Rvcih0aGlzKTsKKyAgICBDRlJldGFpbihkYXRhKTsKKworICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghcHJvdGVjdG9y
LT5oYXNIYW5kbGUoKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFJl
Y2VpdmVEYXRhKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIG1faGFu
ZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVyOjp3
cmFwQ0ZEYXRhKGRhdGEpLCBvcmlnaW5hbExlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBD
RlJlbGVhc2UoZGF0YSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENv
bm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkRmluaXNoTG9hZGluZygpCit7
CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3Bl
cmF0aW9uUXVldWU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAocHJvdGVjdG9yLT5oYXNIYW5kbGUo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0g
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6
ZGlkRmluaXNoTG9hZGluZyhoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSwgMCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVy
YXRpb25RdWV1ZTo6ZGlkRmFpbChDRkVycm9yUmVmIGVycm9yKQoreworICAgIFJlZlB0cjxSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlPiBwcm90
ZWN0b3IodGhpcyk7CisgICAgQ0ZSZXRhaW4oZXJyb3IpOworICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghcHJvdGVjdG9yLT5oYXNI
YW5kbGUoKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZEZhaWwoaGFu
ZGxlPSVwKSAoJXMpIiwgbV9oYW5kbGUsIG1faGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgp
LT5kaWRGYWlsKG1faGFuZGxlLCBSZXNvdXJjZUVycm9yKGVycm9yKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBDRlJlbGVhc2UoZXJyb3IpOworICAgIH0pOworfQorCitDRkNhY2hlZFVSTFJlc3Bv
bnNlUmVmIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWU6OndpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVz
cG9uc2UpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChwcm90ZWN0b3It
Pmhhc0hhbmRsZSgpKSB7CisgICAgICAgICAgICBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKG51
bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgTE9HKE5l
dHdvcmssICJDRk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRo
T3BlcmF0aW9uUXVldWU6OndpbGxDYWNoZVJlc3BvbnNlKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFu
ZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisKKyAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT53aWxsQ2FjaGVSZXNwb25zZUFzeW5j
KG1faGFuZGxlLCBjYWNoZWRSZXNwb25zZSk7CisgICAgfSk7CisgICAgZGlzcGF0Y2hfc2VtYXBo
b3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CisgICAgcmV0dXJu
IG1fY2FjaGVkUmVzcG9uc2VSZXN1bHQubGVha1JlZigpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFJlY2VpdmVD
aGFsbGVuZ2UoQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSkKK3sKKyAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4g
cHJvdGVjdG9yKHRoaXMpOworICAgIENGUmV0YWluKGNoYWxsZW5nZSk7CisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFwcm90ZWN0
b3ItPmhhc0hhbmRsZSgpKSB7CisgICAgICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlk
UmVjZWl2ZUNoYWxsZW5nZShoYW5kbGU9JXApICglcykiLCBtX2hhbmRsZSwgbV9oYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAg
ICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSwgbV9oYW5kbGUpKTsKKyAgICAgICAgfQorCisgICAgICAg
IENGUmVsZWFzZShjaGFsbGVuZ2UpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmRpZFNlbmRCb2R5RGF0
YShDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRv
V3JpdGUpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAocHJvdGVjdG9yLT5o
YXNIYW5kbGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBMT0coTmV0d29yaywg
IkNGTmV0IC0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRp
b25RdWV1ZTo6ZGlkU2VuZEJvZHlEYXRhKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRTZW5kRGF0YShtX2hhbmRsZSwgdG90YWxCeXRl
c1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpOworICAgIH0pOworfQorCitCb29s
ZWFuIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVl
dWU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJvdGVjdG9y
KHRoaXMpOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XnsKKyAgICAgICAgaWYgKHByb3RlY3Rvci0+aGFzSGFuZGxlKCkpIHsKKyAgICAgICAgICAgIGNv
bnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoZmFsc2UpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFJlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OnNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+
Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAg
bV9oYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CisgICAgfSk7CisgICAgZGlz
cGF0Y2hfc2VtYXBob3JlX3dhaXQobV9zZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7
CisgICAgcmV0dXJuIG1fYm9vbFJlc3VsdDsKK30KKworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNF
X0FVVEhfQ0FMTEJBQ0spCitCb29sZWFuIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVs
ZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVS
TFByb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgUmVmUHRyPFJlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU+IHByb3Rl
Y3Rvcih0aGlzKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIGlmIChwcm90ZWN0b3ItPmhhc0hhbmRsZSgpKSB7CisgICAgICAgICAg
ICBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9u
UXVldWU6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShoYW5kbGU9JXApICglcykiLCBtX2hh
bmRsZSwgbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgICAgIFByb3RlY3Rpb25TcGFjZSBjb3JlUHJvdGVjdGlvblNwYWNlID0gY29y
ZShwcm90ZWN0aW9uU3BhY2UpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgaWYgKGNvcmVQ
cm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pIHsKKyAgICAgICAgICAgIG1fYm9vbFJlc3VsdCA9
IGZhbHNlOworICAgICAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3NlbWFwaG9y
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCisgICAgICAgIG1faGFuZGxlLT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKGNvcmVQcm90ZWN0aW9uU3BhY2UpOworICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9y
ZV93YWl0KG1fc2VtYXBob3JlLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpOworICAgIHJldHVybiBt
X2Jvb2xSZXN1bHQ7Cit9CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxM
QkFDSykKKworI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKK3ZvaWQgUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlk
UmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKK3sKKyAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZT4gcHJv
dGVjdG9yKHRoaXMpOworICAgIENGUmV0YWluKGRhdGFBcnJheSk7CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFwcm90ZWN0b3It
Pmhhc0hhbmRsZSgpKSB7CisgICAgICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6ZGlkU2Vu
ZEJvZHlEYXRhKGhhbmRsZT0lcCkgKCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIG1faGFu
ZGxlLT5oYW5kbGVEYXRhQXJyYXkoZGF0YUFycmF5KTsKKyAgICAgICAgfQorICAgICAgICBDRlJl
bGVhc2UoZGF0YUFycmF5KTsKKyAgICB9KTsKK30KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19DRkRB
VEFfQVJSQVlfQ0FMTEJBQ0spCisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoQ0ZVUkxS
ZXF1ZXN0UmVmIHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdDsKKyAg
ICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG1fc2VtYXBob3JlKTsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlOjpjb250
aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCit7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25h
bChtX3NlbWFwaG9yZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQoreworICAgIG1fYm9vbFJlc3Vs
dCA9IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9z
aWduYWwobV9zZW1hcGhvcmUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWU6OmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2Uo
Q0ZDYWNoZWRVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKK3sKKyAgICBtX2NhY2hlZFJlc3BvbnNl
UmVzdWx0ID0gcmVzcG9uc2U7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3NlbWFw
aG9yZSk7Cit9CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQordm9p
ZCBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
Ojpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCBjYW5B
dXRoZW50aWNhdGUpCit7CisgICAgbV9ib29sUmVzdWx0ID0gY2FuQXV0aGVudGljYXRlOworICAg
IGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9zZW1hcGhvcmUpOworfQorI2VuZGlmIC8vIFVT
RShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
V2l0aE9wZXJhdGlvblF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mOTc3OWVjZmUxOTkzMTQ3ZTM1ODE0NzQzNjliZGQ4ZDhiMDIwYmFkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNv
dXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmgKQEAg
LTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5l
Y3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZV9oCisjZGVmaW5lIFJlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWVfaAorCisjaWYgVVNFKENG
TkVUV09SSykKKworI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdh
dGUuaCIKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZOZXR3b3JrLmg+CisjaW5jbHVkZSA8ZGlzcGF0
Y2gvcXVldWUuaD4KKyNpbmNsdWRlIDxkaXNwYXRjaC9zZW1hcGhvcmUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRl
V2l0aE9wZXJhdGlvblF1ZXVlIEZJTkFMIDogcHVibGljIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25u
ZWN0aW9uRGVsZWdhdGUgeworcHVibGljOgorICAgIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0
aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICB2aXJ0
dWFsIH5SZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1
ZXVlKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBoYXNIYW5kbGUoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgdm9pZCBzZXR1cFJlcXVlc3QoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldHVwQ29ubmVjdGlvblNjaGVkdWxpbmcoQ0ZVUkxDb25uZWN0
aW9uUmVmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5k
UmVxdWVzdChDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoQ0ZVUkxSZXNwb25zZVJlZikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZiwgQ0ZJbmRleCBv
cmlnaW5hbExlbmd0aCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChDRkVycm9yUmVmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgd2lsbENhY2hlUmVzcG9u
c2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVDaGFsbGVuZ2UoQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkU2VuZEJvZHlEYXRhKENGSW5kZXggdG90YWxCeXRlc1dyaXR0ZW4sIENG
SW5kZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBC
b29sZWFuIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkgT1ZFUlJJREU7CisjaWYgVVNFKFBS
T1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2aXJ0dWFsIEJvb2xlYW4gY2FuUmVz
cG9uZFRvUHJvdGVjdGlvblNwYWNlKENGVVJMUHJvdGVjdGlvblNwYWNlUmVmKSBPVkVSUklERTsK
KyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorI2lmIFVTRShO
RVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkgT1ZFUlJJREU7CisjZW5kaWYgLy8gVVNF
KE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQorCisgICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlV2lsbFNlbmRSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGNvbnRpbnVlU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZikgT1ZFUlJJREU7CisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxM
QkFDSykKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKGJvb2wpIE9WRVJSSURFOworI2VuZGlmIC8vIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCisKKyAgICBkaXNwYXRjaF9xdWV1ZV90IG1fcXVldWU7CisgICAg
ZGlzcGF0Y2hfc2VtYXBob3JlX3QgbV9zZW1hcGhvcmU7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxS
ZXF1ZXN0UmVmPiBtX3JlcXVlc3RSZXN1bHQ7CisgICAgUmV0YWluUHRyPENGQ2FjaGVkVVJMUmVz
cG9uc2VSZWY+IG1fY2FjaGVkUmVzcG9uc2VSZXN1bHQ7CisgICAgYm9vbCBtX2Jvb2xSZXN1bHQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKENGTkVUV09S
SykKKworI2VuZGlmIC8vIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRo
T3BlcmF0aW9uUXVldWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9TeW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c1Jlc291
cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwCmluZGV4IDE1NDllYjc1NTVkMjgy
MzRlYzMzZDgxOTk0NTUzMWE4YzkyMzI3NDEuLmZhZjAyZDdhMWEzNTA2YTRjN2FiMjRmZGNkZjYx
MTMxNzI4Mzc2YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNocm9ub3VzUmVzb3Vy
Y2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKQEAgLTMwLDEyICszMCwxMCBAQAog
CiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DRi5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiRm9ybURhdGFTdHJlYW1DRk5ldC5oIgorI2luY2x1ZGUg
IkxvYWRlclJ1bkxvb3BDRi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3
b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsOSArNDUsMTIgQEAKICNpbmNsdWRlICJX
ZWJDb3JlVVJMUmVzcG9uc2UuaCIKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFU
Rk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKKwogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
Ci0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5o
PgogI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTks
MzEgKzYwLDI4IEBAIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZTo6U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMCiB7CiB9CiAKLXN0YXRpYyBSZXRh
aW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gc3ludGhlc2l6ZVJlZGlyZWN0UmVzcG9uc2VJZk5lY2Vz
c2FyeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGN1cnJlbnRSZXF1ZXN0LCBDRlVSTFJlcXVlc3RS
ZWYgbmV3UmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlZGlyZWN0UmVzcG9uc2UpCit2b2lk
IFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6c2V0dXBS
ZXF1ZXN0KENGTXV0YWJsZVVSTFJlcXVlc3RSZWYgcmVxdWVzdCkKIHsKLSAgICBpZiAoY2ZSZWRp
cmVjdFJlc3BvbnNlKQotICAgICAgICByZXR1cm4gY2ZSZWRpcmVjdFJlc3BvbnNlOwotCi0gICAg
Q0ZVUkxSZWYgbmV3VVJMID0gQ0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1JlcXVlc3QpOwotICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbmV3U2NoZW1lID0gYWRvcHRDRihDRlVSTENvcHlTY2hlbWUo
bmV3VVJMKSk7Ci0KLSAgICAvLyBJZiB0aGUgcHJvdG9jb2xzIG9mIHRoZSBuZXcgcmVxdWVzdCBh
bmQgdGhlIGN1cnJlbnQgcmVxdWVzdCBtYXRjaCwgdGhpcyBpcyBub3QgYW4gSFNUUyByZWRpcmVj
dCBhbmQgd2Ugc2hvdWxkbid0IHN5bnRoZXNpemUgYSByZWRpcmVjdCByZXNwb25zZS4KLSAgICBp
ZiAoY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2woKSA9PSBTdHJpbmcobmV3U2NoZW1lLmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGN1cnJl
bnRVUkwgPSBjdXJyZW50UmVxdWVzdC51cmwoKS5jcmVhdGVDRlVSTCgpOwotICAgIFJldGFpblB0
cjxDRkhUVFBNZXNzYWdlUmVmPiByZXNwb25zZU1lc3NhZ2UgPSBhZG9wdENGKENGSFRUUE1lc3Nh
Z2VDcmVhdGVSZXNwb25zZSgwLCAzMDIsIDAsIGtDRkhUVFBWZXJzaW9uMV8xKSk7Ci0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBuZXdBYnNvbHV0ZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxDb3B5QWJzb2x1
dGVVUkwobmV3VVJMKSk7Ci0gICAgQ0ZIVFRQTWVzc2FnZVNldEhlYWRlckZpZWxkVmFsdWUocmVz
cG9uc2VNZXNzYWdlLmdldCgpLCBDRlNUUigiTG9jYXRpb24iKSwgQ0ZVUkxHZXRTdHJpbmcobmV3
QWJzb2x1dGVVUkwuZ2V0KCkpKTsKLSAgICBDRkhUVFBNZXNzYWdlU2V0SGVhZGVyRmllbGRWYWx1
ZShyZXNwb25zZU1lc3NhZ2UuZ2V0KCksIENGU1RSKCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJu
by1zdG9yZSIpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgQ0ZVUkxSZXF1ZXN0U2V0U2hvdWxk
U3RhcnRTeW5jaHJvbm91c2x5KHJlcXVlc3QsIDEpOworI2VuZGlmCit9CiAKLSAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZXNwb25zZVJlZj4gbmV3UmVzcG9uc2UgPSBhZG9wdENGKENGVVJMUmVzcG9uc2VD
cmVhdGVXaXRoSFRUUFJlc3BvbnNlKDAsIGN1cnJlbnRVUkwuZ2V0KCksIHJlc3BvbnNlTWVzc2Fn
ZS5nZXQoKSwga0NGVVJMQ2FjaGVTdG9yYWdlTm90QWxsb3dlZCkpOwotICAgIHJldHVybiBuZXdS
ZXNwb25zZTsKK3ZvaWQgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlOjpzZXR1cENvbm5lY3Rpb25TY2hlZHVsaW5nKENGVVJMQ29ubmVjdGlvblJlZiBjb25u
ZWN0aW9uKQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVs
ZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVlKGNvbm5lY3Rpb24pOworI2VsaWYgUExBVEZPUk0oSU9T
KQorICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoY29ubmVjdGlvbiwgV2Vi
VGhyZWFkUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlVS
TENvbm5lY3Rpb25TY2hlZHVsZVdpdGhSdW5Mb29wKGNvbm5lY3Rpb24sIENGUnVuTG9vcEdldEN1
cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbmRpZgorICAgIENGVVJMQ29ubmVj
dGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChjb25uZWN0aW9uLCBsb2FkZXJSdW5Mb29w
KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiB9CiAKIENGVVJMUmVxdWVzdFJlZiBTeW5jaHJv
bm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVz
dChDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIG9yaWdpbmFsUmVk
aXJlY3RSZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJl
Y3RSZXNwb25zZSA9IHN5bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkobV9oYW5k
bGUtPmN1cnJlbnRSZXF1ZXN0KCksIGNmUmVxdWVzdCwgb3JpZ2luYWxSZWRpcmVjdFJlc3BvbnNl
KTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZXNwb25zZVJlZj4gcmVkaXJlY3RSZXNwb25zZSA9IHN5
bnRoZXNpemVSZWRpcmVjdFJlc3BvbnNlSWZOZWNlc3NhcnkoY2ZSZXF1ZXN0LCBvcmlnaW5hbFJl
ZGlyZWN0UmVzcG9uc2UpOwogCiAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlKSB7CiAgICAgICAg
IENGUmV0YWluKGNmUmVxdWVzdCk7CkBAIC05MiwzNCArOTAsNyBAQCBDRlVSTFJlcXVlc3RSZWYg
U3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjp3aWxsU2Vu
ZFJlcXVlcwogCiAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KGhhbmRsZT0lcCkg
KCVzKSIsIG1faGFuZGxlLCBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKLSAgICBDRkhU
VFBNZXNzYWdlUmVmIGh0dHBNZXNzYWdlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShy
ZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKLSAgICBpZiAoaHR0cE1lc3NhZ2UgJiYgQ0ZIVFRQTWVz
c2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwTWVzc2FnZSkgPT0gMzA3KSB7Ci0gICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFzdEhUVFBNZXRob2QgPSBtX2hhbmRsZS0+bGFzdEhU
VFBNZXRob2QoKS5jcmVhdGVDRlN0cmluZygpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0TWV0aG9k
KGNmUmVxdWVzdCkpOwotICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlV2l0aE9wdGlvbnMobGFz
dEhUVFBNZXRob2QuZ2V0KCksIG5ld01ldGhvZC5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJp
bmdHZXRMZW5ndGgobGFzdEhUVFBNZXRob2QuZ2V0KCkpKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNp
dGl2ZSkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiBt
dXRhYmxlUmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwg
Y2ZSZXF1ZXN0KSk7Ci0gICAgICAgICAgICB3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihtX2hh
bmRsZS0+c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJsZVJlcXVlc3QuZ2V0KCkpOwotICAgICAgICAg
ICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCks
IGxhc3RIVFRQTWV0aG9kLmdldCgpKTsKLQotICAgICAgICAgICAgRm9ybURhdGEqIGJvZHkgPSBt
X2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKLSAgICAgICAgICAgIGlmICghZXF1
YWxJZ25vcmluZ0Nhc2UobV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdF
VCIpICYmIGJvZHkgJiYgIWJvZHktPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpzZXRIVFRQQm9keShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgYm9keSk7Ci0KLSAgICAgICAgICAg
IFN0cmluZyBvcmlnaW5hbENvbnRlbnRUeXBlID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0
dHBDb250ZW50VHlwZSgpOwotICAgICAgICAgICAgaWYgKCFvcmlnaW5hbENvbnRlbnRUeXBlLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRW
YWx1ZShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIkNvbnRlbnQtVHlwZSIpLCBvcmlnaW5h
bENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwotCi0gICAgICAgICAgICByZXF1
ZXN0ID0gbXV0YWJsZVJlcXVlc3QuZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJl
cXVlc3QuaXNOdWxsKCkpCi0gICAgICAgIHJlcXVlc3QgPSBjZlJlcXVlc3Q7Ci0KLSAgICAvLyBT
aG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNv
dXJjZSB0byBub24tc2VjdXJlIG9uZS4KLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
cygiaHR0cHMiKSAmJiBwcm90b2NvbElzKHJlcXVlc3QuaHR0cFJlZmVycmVyKCksICJodHRwcyIp
ICYmIG1faGFuZGxlLT5jb250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QoKSkKLSAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOwotCisgICAg
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoY2ZSZXF1ZXN0
LCByZWRpcmVjdFJlc3BvbnNlLmdldCgpKTsKICAgICBtX2hhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0
KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UuZ2V0KCkpOwogCiAgICAgaWYgKHJlcXVlc3QuaXNO
dWxsKCkpCkBAIC0zMDEsNiArMjcyLDMzIEBAIHZvaWQgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyCiB9CiAj
ZW5kaWYgLy8gVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogCit2b2lkIFN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxs
U2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxl
Z2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rp
b25EZWxlZ2F0ZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFN5bmNocm9ub3VzUmVzb3VyY2VI
YW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShD
RkNhY2hlZFVSTFJlc3BvbnNlUmVmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgU3luY2hyb25v
dXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlOjpjb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKyNlbmRpZiAvLyBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNL
KQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1N5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5oCmlu
ZGV4IDc0M2Y0NWUwNDAwMWVmZTk4NDAxZWUyMTUzODFjNGZkMTVjODdlZmYuLjkyNDJhYzVkOTdk
YWMwYmQ4Njk2NDE1ZDNjNjM5YTU3MGE3ZjkxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9T
eW5jaHJvbm91c1Jlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuaApAQCAtNDQs
NiArNDQsOSBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NB
TExCQUNLKQogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBzZXR1cFJlcXVlc3QoQ0ZNdXRh
YmxlVVJMUmVxdWVzdFJlZikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldHVwQ29ubmVj
dGlvblNjaGVkdWxpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmKSBPVkVSUklERTsKKwogICAgIHZpcnR1
YWwgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTFJlcXVlc3RSZWYsIENGVVJM
UmVzcG9uc2VSZWYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoQ0ZVUkxSZXNwb25zZVJlZikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBDRkNhY2hlZFVSTFJl
c3BvbnNlUmVmIHdpbGxDYWNoZVJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIE9WRVJS
SURFOwpAQCAtNTMsNiArNTYsMTQgQEAgcHJpdmF0ZToKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFD
RV9BVVRIX0NBTExCQUNLKQogICAgIHZpcnR1YWwgQm9vbGVhbiBjYW5SZXNwb25kVG9Qcm90ZWN0
aW9uU3BhY2UoQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYpIE9WRVJSSURFOwogI2VuZGlmIC8vIFVT
RShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisKKyAgICB2aXJ0dWFsIHZvaWQgY29u
dGludWVXaWxsU2VuZFJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShib29sKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVXaWxsQ2FjaGVSZXNwb25zZShDRkNhY2hlZFVS
TFJlc3BvbnNlUmVmKSBPVkVSUklERTsKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NB
TExCQUNLKQorICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoYm9vbCkgT1ZFUlJJREU7CisjZW5kaWYgLy8gVVNFKFBST1RFQ1RJT05f
U1BBQ0VfQVVUSF9DQUxMQkFDSykKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>