<?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>143872</bug_id>
          
          <creation_ts>2015-04-17 04:15:49 -0700</creation_ts>
          <short_desc>[SOUP] Add initial implementation of NetworkProcess disk cache</short_desc>
          <delta_ts>2015-04-26 23:18:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>142821</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>ossy</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1086292</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-17 04:15:49 -0700</bug_when>
    <thetext>Add initial implementation of NetworkProcess disk cache for Soup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086294</commentid>
    <comment_count>1</comment_count>
      <attachid>251014</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-17 04:21:29 -0700</bug_when>
    <thetext>Created attachment 251014
Patch

It&apos;s enabled by default only for EWS, but I don&apos;t plan to enable it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086295</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-17 04:23:30 -0700</bug_when>
    <thetext>Attachment 251014 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:123:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:137:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:170:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:194:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 16 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>1086296</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-17 04:24:53 -0700</bug_when>
    <thetext>Found 14 tests; running 14, skipping 0.
Running 1 WebKitTestRunner.     

All 14 tests ran as expected.

All tests pass, but I haven&apos;t tested it much more than the layout tests and some navigation with the MiniBrowser to dump the cache to a json file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086384</commentid>
    <comment_count>4</comment_count>
      <attachid>251014</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-04-17 11:53:08 -0700</bug_when>
    <thetext>Comment on attachment 251014
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheData.h:114
&gt; +    Data(SoupBuffer*, Backing = Backing::Buffer);

Could this be a GRefPtr&lt;SourceBuffer&gt;&amp;&amp; to make memory management clearer?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:56
&gt; +    return { buffer.get() };

then this would be a return { WTF::move(buffer) };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086747</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-20 00:58:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 251014 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251014&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheData.h:114
&gt; &gt; +    Data(SoupBuffer*, Backing = Backing::Buffer);
&gt; 
&gt; Could this be a GRefPtr&lt;SourceBuffer&gt;&amp;&amp; to make memory management clearer?

Yes.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:56
&gt; &gt; +    return { buffer.get() };
&gt; 
&gt; then this would be a return { WTF::move(buffer) };

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086748</commentid>
    <comment_count>6</comment_count>
      <attachid>251151</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-20 00:59:02 -0700</bug_when>
    <thetext>Created attachment 251151
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086749</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-20 01:02:02 -0700</bug_when>
    <thetext>Attachment 251151 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:123:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:137:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:170:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:194:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 16 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>1086755</commentid>
    <comment_count>8</comment_count>
      <attachid>251014</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-20 01:26:35 -0700</bug_when>
    <thetext>Comment on attachment 251014
Patch

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

Awesome stuff Carlos!

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheBlobStorage.cpp:34
&gt; +#include &lt;fcntl.h&gt;

Why this?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:29
&gt; +#if ENABLE(NETWORK_CACHE)

Don&apos;t we need some USE(SOUP) or PLATFORM(LINUX) and the like?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:129
&gt; +    ASSERT(map &amp;&amp; map != MAP_FAILED);

Perhaps better to split this in 2 ASSERTs in order to better spot the actual cause of failure.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:58
&gt; +    ASSERT(m_outputStream || m_inputStream || m_ioStream);

Same here about splitting the ASSERT

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:82
&gt; +    }

Can&apos;t we use Data directly instead of having to copy it from a SoupBuffer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086760</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-20 01:42:39 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 251014 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251014&amp;action=review
&gt; 
&gt; Awesome stuff Carlos!

Thanks.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheBlobStorage.cpp:34
&gt; &gt; +#include &lt;fcntl.h&gt;
&gt; 
&gt; Why this?

It&apos;s needed for open and its flags (O_CREAT, O_RDWR, etc.) in Linux, I guess it&apos;s not needed in mac, but doesn&apos;t hurt anyway.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:29
&gt; &gt; +#if ENABLE(NETWORK_CACHE)
&gt; 
&gt; Don&apos;t we need some USE(SOUP) or PLATFORM(LINUX) and the like?

I assumed NETWORK_CACHE is already enabled depending on the port.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:129
&gt; &gt; +    ASSERT(map &amp;&amp; map != MAP_FAILED);
&gt; 
&gt; Perhaps better to split this in 2 ASSERTs in order to better spot the actual
&gt; cause of failure.

Ok, I think I copied this one from mac impl :-)

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:58
&gt; &gt; +    ASSERT(m_outputStream || m_inputStream || m_ioStream);
&gt; 
&gt; Same here about splitting the ASSERT

Sure.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:82
&gt; &gt; +    }
&gt; 
&gt; Can&apos;t we use Data directly instead of having to copy it from a SoupBuffer?

I&apos;m not sure I understand the question. We create a Data with a SoupBuffer to avoid copying the data. The read soup buffer will be reused on next read, so we need to copy that data appending it to the Data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086761</commentid>
    <comment_count>10</comment_count>
      <attachid>251154</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-20 01:47:58 -0700</bug_when>
    <thetext>Created attachment 251154
Another update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086763</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-20 01:50:50 -0700</bug_when>
    <thetext>Attachment 251154 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:124:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:138:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:171:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:195:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 16 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>1087881</commentid>
    <comment_count>12</comment_count>
      <attachid>251154</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-04-23 10:47:42 -0700</bug_when>
    <thetext>Comment on attachment 251154
Another update

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

Looks good to me, but we should chat briefly about benefits and drawbacks of using WebKit&apos;s builtin memory manager.

&gt; Source/WebCore/platform/network/soup/GRefPtrSoup.cpp:24
&gt; +template &lt;&gt; SoupBuffer* refGPtr(SoupBuffer* ptr)

Nit: Do you mind using &apos;buffer&apos; here instead of &apos;ptr&apos;?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:41
&gt; +    : m_buffer(adoptGRef(soup_buffer_new(SOUP_MEMORY_COPY, data, size)))

We should probably discuss whether we want to use the WebKit memory allocator.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:94
&gt; +    uint8_t* data = static_cast&lt;uint8_t*&gt;(g_malloc(size));

Ditto.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:101
&gt; +    if (bytesRead == -1) {
&gt; +        asyncData-&gt;completionHandler(asyncData-&gt;data, -1);
&gt; +        delete asyncData;
&gt; +        return;
&gt; +    }

It is annoying that GFileError cannot be used here for the error code, because the enum starts at zero. Perhaps a comment here about that could be informative.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:144
&gt; +    gssize bytesRead;

This can move into the do-while loop, I think.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:149
&gt; +        bytesRead = g_input_stream_read(m_inputStream.get(), const_cast&lt;char*&gt;(readBuffer-&gt;data), bytesToRead, nullptr, nullptr);

Same issue here with GFileError. :(

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:181
&gt; +    if (bytesWritten == -1) {
&gt; +        asyncData-&gt;completionHandler(-1);
&gt; +        delete asyncData;
&gt; +        return;
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087887</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-23 10:57:21 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 251154 [details]
&gt; Another update
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251154&amp;action=review
&gt; 
&gt; Looks good to me, but we should chat briefly about benefits and drawbacks of
&gt; using WebKit&apos;s builtin memory manager.

Please note that this is a first implementation of a feature that is disabled, it&apos;s a first step to continue working on it.

&gt; &gt; Source/WebCore/platform/network/soup/GRefPtrSoup.cpp:24
&gt; &gt; +template &lt;&gt; SoupBuffer* refGPtr(SoupBuffer* ptr)
&gt; 
&gt; Nit: Do you mind using &apos;buffer&apos; here instead of &apos;ptr&apos;?

Sure, we use ptr in all GRefPtrFoo implementations, though.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:41
&gt; &gt; +    : m_buffer(adoptGRef(soup_buffer_new(SOUP_MEMORY_COPY, data, size)))
&gt; 
&gt; We should probably discuss whether we want to use the WebKit memory
&gt; allocator.

I&apos;m not sure I get what you mean.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:94
&gt; &gt; +    uint8_t* data = static_cast&lt;uint8_t*&gt;(g_malloc(size));
&gt; 
&gt; Ditto.

Soup uses g_free unconditionally, so when it takes the memory it needs to be allocated with g_malloc(). 

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:101
&gt; &gt; +    if (bytesRead == -1) {
&gt; &gt; +        asyncData-&gt;completionHandler(asyncData-&gt;data, -1);
&gt; &gt; +        delete asyncData;
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; It is annoying that GFileError cannot be used here for the error code,
&gt; because the enum starts at zero. Perhaps a comment here about that could be
&gt; informative.

It can be used, but I didn&apos;t care about that yet, I don&apos;t even know if those errors are actually handled, or just used to check whether it failed or not.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:144
&gt; &gt; +    gssize bytesRead;
&gt; 
&gt; This can move into the do-while loop, I think.

Yes, I think the first impl used that in the while comparison.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:149
&gt; &gt; +        bytesRead = g_input_stream_read(m_inputStream.get(), const_cast&lt;char*&gt;(readBuffer-&gt;data), bytesToRead, nullptr, nullptr);
&gt; 
&gt; Same issue here with GFileError. :(
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:181
&gt; &gt; +    if (bytesWritten == -1) {
&gt; &gt; +        asyncData-&gt;completionHandler(-1);
&gt; &gt; +        delete asyncData;
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087894</commentid>
    <comment_count>14</comment_count>
      <attachid>251154</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-04-23 11:23:08 -0700</bug_when>
    <thetext>Comment on attachment 251154
Another update

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

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:41
&gt;&gt;&gt; +    : m_buffer(adoptGRef(soup_buffer_new(SOUP_MEMORY_COPY, data, size)))
&gt;&gt; 
&gt;&gt; We should probably discuss whether we want to use the WebKit memory allocator.
&gt; 
&gt; I&apos;m not sure I get what you mean.

I&apos;m simply suggesting that it might be worth it to use bmalloc here and then to free the memory properly by using soup_buffer_new_with_owner instead.

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:94
&gt;&gt;&gt; +    uint8_t* data = static_cast&lt;uint8_t*&gt;(g_malloc(size));
&gt;&gt; 
&gt;&gt; Ditto.
&gt; 
&gt; Soup uses g_free unconditionally, so when it takes the memory it needs to be allocated with g_malloc().

We would need to use soup_buffer_new_with_owner.

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:101
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; It is annoying that GFileError cannot be used here for the error code, because the enum starts at zero. Perhaps a comment here about that could be informative.
&gt; 
&gt; It can be used, but I didn&apos;t care about that yet, I don&apos;t even know if those errors are actually handled, or just used to check whether it failed or not.

Hrm. Isn&apos;t the first enum member of GFileError (G_FILE_ERROR_EXIST) defined to be 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088200</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-24 01:21:57 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 251154 [details]
&gt; Another update
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251154&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:41
&gt; &gt;&gt;&gt; +    : m_buffer(adoptGRef(soup_buffer_new(SOUP_MEMORY_COPY, data, size)))
&gt; &gt;&gt; 
&gt; &gt;&gt; We should probably discuss whether we want to use the WebKit memory allocator.
&gt; &gt; 
&gt; &gt; I&apos;m not sure I get what you mean.
&gt; 
&gt; I&apos;m simply suggesting that it might be worth it to use bmalloc here and then
&gt; to free the memory properly by using soup_buffer_new_with_owner instead.

Ah, ok, I thought you were suggesting to replace soup buffer somehow.

&gt; &gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:94
&gt; &gt;&gt;&gt; +    uint8_t* data = static_cast&lt;uint8_t*&gt;(g_malloc(size));
&gt; &gt;&gt; 
&gt; &gt;&gt; Ditto.
&gt; &gt; 
&gt; &gt; Soup uses g_free unconditionally, so when it takes the memory it needs to be allocated with g_malloc().
&gt; 
&gt; We would need to use soup_buffer_new_with_owner.

Got it.

&gt; &gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:101
&gt; &gt;&gt;&gt; +    }
&gt; &gt;&gt; 
&gt; &gt;&gt; It is annoying that GFileError cannot be used here for the error code, because the enum starts at zero. Perhaps a comment here about that could be informative.
&gt; &gt; 
&gt; &gt; It can be used, but I didn&apos;t care about that yet, I don&apos;t even know if those errors are actually handled, or just used to check whether it failed or not.
&gt; 
&gt; Hrm. Isn&apos;t the first enum member of GFileError (G_FILE_ERROR_EXIST) defined
&gt; to be 0?

My point is that I haven&apos;t cared about the actual error codes at this point because the caller use the error as a boolean (just to check whether it failed) or for the debug logs, so it doesn&apos;t really matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088202</commentid>
    <comment_count>16</comment_count>
      <attachid>251543</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-24 01:29:44 -0700</bug_when>
    <thetext>Created attachment 251543
Updated to use fast malloc/free</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088203</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-24 01:31:44 -0700</bug_when>
    <thetext>Attachment 251543 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:124:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:138:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:170:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:194:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:71:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 16 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>1088222</commentid>
    <comment_count>18</comment_count>
      <attachid>251543</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-04-24 07:34:29 -0700</bug_when>
    <thetext>Comment on attachment 251543
Updated to use fast malloc/free

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:129
&gt; +    GRefPtr&lt;SoupBuffer&gt; buffer = adoptGRef(soup_buffer_new(SOUP_MEMORY_TAKE, static_cast&lt;char*&gt;(g_malloc(bufferSize)), bufferSize));

Here it might be better to use fastMalloc as well.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:142
&gt; +    GRefPtr&lt;SoupBuffer&gt; readBuffer = adoptGRef(soup_buffer_new(SOUP_MEMORY_TAKE, static_cast&lt;char*&gt;(g_malloc(bufferSize)), bufferSize));

Ditto.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:162
&gt; +    size_t bytesToRead = bufferSize;
&gt; +    do {
&gt; +        // FIXME: implement offset.
&gt; +        gssize bytesRead = g_input_stream_read(m_inputStream.get(), const_cast&lt;char*&gt;(readBuffer-&gt;data), bytesToRead, nullptr, nullptr);
&gt; +        if (bytesRead == -1) {
&gt; +            completionHandler(data, -1);
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        if (!bytesRead)
&gt; +            break;
&gt; +
&gt; +        ASSERT(bytesRead &gt; 0);
&gt; +        fillDataFromReadBuffer(readBuffer.get(), static_cast&lt;size_t&gt;(bytesRead), data);
&gt; +
&gt; +        pendingBytesToRead = size - data.size();
&gt; +        bytesToRead = std::min(pendingBytesToRead, readBuffer-&gt;length);
&gt; +    } while (pendingBytesToRead);

Sorry I missed this in the first review. I have a quick question about the synchronous read case. Why is it better to read chunks of data and constantly fill up small buffers? Why not create a buffer the full size of the data and only create a single Data object? Couldn&apos;t you avoid all of the concatenation that way?

Otherwise, I suggest a small rename here for the sake of clarity: pendingBytesToRead -&gt; bytesToRead, bytesToRead -&gt; bytesToReadForCurrentChunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088230</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-24 09:08:34 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 251543 [details]
&gt; Updated to use fast malloc/free
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251543&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:129
&gt; &gt; +    GRefPtr&lt;SoupBuffer&gt; buffer = adoptGRef(soup_buffer_new(SOUP_MEMORY_TAKE, static_cast&lt;char*&gt;(g_malloc(bufferSize)), bufferSize));
&gt; 
&gt; Here it might be better to use fastMalloc as well.

Right, I forgot we were also allocating memory here.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:142
&gt; &gt; +    GRefPtr&lt;SoupBuffer&gt; readBuffer = adoptGRef(soup_buffer_new(SOUP_MEMORY_TAKE, static_cast&lt;char*&gt;(g_malloc(bufferSize)), bufferSize));
&gt; 
&gt; Ditto.

Right.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:162
&gt; &gt; +    size_t bytesToRead = bufferSize;
&gt; &gt; +    do {
&gt; &gt; +        // FIXME: implement offset.
&gt; &gt; +        gssize bytesRead = g_input_stream_read(m_inputStream.get(), const_cast&lt;char*&gt;(readBuffer-&gt;data), bytesToRead, nullptr, nullptr);
&gt; &gt; +        if (bytesRead == -1) {
&gt; &gt; +            completionHandler(data, -1);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        if (!bytesRead)
&gt; &gt; +            break;
&gt; &gt; +
&gt; &gt; +        ASSERT(bytesRead &gt; 0);
&gt; &gt; +        fillDataFromReadBuffer(readBuffer.get(), static_cast&lt;size_t&gt;(bytesRead), data);
&gt; &gt; +
&gt; &gt; +        pendingBytesToRead = size - data.size();
&gt; &gt; +        bytesToRead = std::min(pendingBytesToRead, readBuffer-&gt;length);
&gt; &gt; +    } while (pendingBytesToRead);
&gt; 
&gt; Sorry I missed this in the first review. I have a quick question about the
&gt; synchronous read case. Why is it better to read chunks of data and
&gt; constantly fill up small buffers? Why not create a buffer the full size of
&gt; the data and only create a single Data object? Couldn&apos;t you avoid all of the
&gt; concatenation that way?

Because we don&apos;t know the size, NetworkCacheStorage passes std::numeric_limits&lt;size_t&gt;::max() to ensure we read until end of stream. Note that this readSync method is only used for debugging, when a dump.json file is requested to be created by the user, it&apos;s not used when retrieving cache resources for loading.

&gt; Otherwise, I suggest a small rename here for the sake of clarity:
&gt; pendingBytesToRead -&gt; bytesToRead, bytesToRead -&gt; bytesToReadForCurrentChunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088231</commentid>
    <comment_count>20</comment_count>
      <attachid>251553</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-24 09:13:27 -0700</bug_when>
    <thetext>Created attachment 251553
Use fast malloc/free in IOChannel too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088232</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-24 09:16:04 -0700</bug_when>
    <thetext>Attachment 251553 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:124:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:139:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:172:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:196:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:71:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 16 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>1088246</commentid>
    <comment_count>22</comment_count>
      <attachid>251553</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-24 10:27:55 -0700</bug_when>
    <thetext>Comment on attachment 251553
Use fast malloc/free in IOChannel too

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:201
&gt; +    WriteAsyncData* asyncData = new WriteAsyncData { this, data.soupBuffer(), completionHandler };

It would be nicer and safer to use std::unique_ptr instead of explicit new/delete for memory management.

auto asyncData = std::make_unique&lt;WriteAsyncData&gt;(...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088723</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-26 01:15:29 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Comment on attachment 251553 [details]
&gt; Use fast malloc/free in IOChannel too
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251553&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:201
&gt; &gt; +    WriteAsyncData* asyncData = new WriteAsyncData { this, data.soupBuffer(), completionHandler };
&gt; 
&gt; It would be nicer and safer to use std::unique_ptr instead of explicit
&gt; new/delete for memory management.
&gt; 
&gt; auto asyncData = std::make_unique&lt;WriteAsyncData&gt;(...)

I didn&apos;t do this because the pointer is passed as user data of a C callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088724</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-26 02:13:25 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Comment on attachment 251553 [details]
&gt; &gt; Use fast malloc/free in IOChannel too
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=251553&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:201
&gt; &gt; &gt; +    WriteAsyncData* asyncData = new WriteAsyncData { this, data.soupBuffer(), completionHandler };
&gt; &gt; 
&gt; &gt; It would be nicer and safer to use std::unique_ptr instead of explicit
&gt; &gt; new/delete for memory management.
&gt; &gt; 
&gt; &gt; auto asyncData = std::make_unique&lt;WriteAsyncData&gt;(...)
&gt; 
&gt; I didn&apos;t do this because the pointer is passed as user data of a C callback.

Well, I can adopt the pointer at the beginning of the clabback and release it before calling the read/write method method again. It&apos;s still tricky, because we can&apos;t use the wrapped pointer in the read/write call, so we need to save the buffer to a local variable and then release the unique_ptr. I&apos;ll update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088725</commentid>
    <comment_count>25</comment_count>
      <attachid>251679</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-26 02:15:04 -0700</bug_when>
    <thetext>Created attachment 251679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088726</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-26 02:17:54 -0700</bug_when>
    <thetext>Attachment 251679 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:124:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:139:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:172:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:197:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheDataSoup.cpp:71:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 16 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>1088875</commentid>
    <comment_count>27</comment_count>
      <attachid>251679</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-04-26 17:24:22 -0700</bug_when>
    <thetext>Comment on attachment 251679
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:119
&gt; +    userData = asyncData.release();

You should be able to avoid this assignment by passing ayncData.release() directly.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:192
&gt; +    userData = asyncData.release();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088944</commentid>
    <comment_count>28</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-26 23:01:37 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Comment on attachment 251679 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251679&amp;action=review

Thanks for the review!

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:119
&gt; &gt; +    userData = asyncData.release();
&gt; 
&gt; You should be able to avoid this assignment by passing ayncData.release()
&gt; directly.

Right, I moved it to make it explicit that using asyncData in the method call would end up in a crash, to avoid a future refactoring thinking, why are we using a variable for the buffer? I&apos;ll rather add a comment there, and move the release to the method call.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:192
&gt; &gt; +    userData = asyncData.release();
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088946</commentid>
    <comment_count>29</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-26 23:18:27 -0700</bug_when>
    <thetext>Committed r183387: &lt;http://trac.webkit.org/changeset/183387&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251014</attachid>
            <date>2015-04-17 04:21:29 -0700</date>
            <delta_ts>2015-04-20 00:59:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-disk-cache-soup.diff</filename>
            <type>text/plain</type>
            <size>35172</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNGE3ZWUwLi44YjNmODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMg
QEAKIDIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtTT1VQXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBOZXR3b3Jr
UHJvY2VzcyBkaXNrIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDM4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbGxvdyB0byBjcmVhdGUgYSBHUmVmUHRyIGZvciBTb3VwQnVmZmVyLiBFdmVu
IHRob3VnaCBTb3VwQnVmZmVyCisgICAgICAgIGlzIG5vdCBhIEdPYmplY3QgYW5kIGhhcyBjb3B5
L2ZyZWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgcmVmL3VucmVmLAorICAgICAgICBpdCdzIGludGVy
bmFsbHkgcmVmY291bnRlZCwgc28gd2UgY291bGQgdXNlIGNvcHkvZnJlZSBhcworICAgICAgICBy
ZWYvdW5yZWYuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmg6IEFkZGVkLgorCisyMDE1LTA0LTE3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBbU09VUF0gUmVk
aXJlY3QgdG8gbm9uIEhUVFAgZGVzdGluYXRpb24gaXMgYnJva2VuCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM4NjYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCAyMTA1NzI4Li4wMWM2YzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTYxLDYgKzE2MSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291cC5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvc291cC9ETlNTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291cC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOWFlYzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwCkBA
IC0wLDAgKzEsMzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR1JlZlB0clNvdXAuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IFNv
dXBCdWZmZXIqIHJlZkdQdHIoU291cEJ1ZmZlciogcHRyKQoreworICAgIHJldHVybiBwdHIgPyBz
b3VwX2J1ZmZlcl9jb3B5KHB0cikgOiBudWxscHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihTb3VwQnVmZmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgc291cF9i
dWZmZXJfZnJlZShwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmZGIyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5oCkBAIC0wLDAgKzEs
MzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgR1JlZlB0clNvdXBfaAorI2RlZmluZSBHUmVmUHRyU291cF9oCisKKyNpZiBVU0Uo
U09VUCkKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IFNvdXBCdWZmZXIq
IHJlZkdQdHIoU291cEJ1ZmZlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoU291cEJ1
ZmZlciopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShTT1VQKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNl
L1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMGI2ZDY4Ny4uM2NkZTVlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQKQEAgLTE2NCwxMCArMTY0LDE0IEBAIHNldChOZXR3b3JrUHJvY2Vzc19TT1VS
Q0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcAog
CiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorICAgIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAogICAgIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURlY29kZXIuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RW5jb2Rlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCisgICAgTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKKyAgICBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAogKQogCiBzZXQoV2ViS2l0Ml9T
T1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTkxNTUzMi4uODlkYjY2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDU1IEBACiAyMDE1LTA0LTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAorICAgICAgICBbU09VUF0gQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2Yg
TmV0d29ya1Byb2Nlc3MgZGlzayBjYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJ0cyBv
ZiB0aGUgZGlzayBjYWNoZQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBmb3IgU291cC4gSXQncyBt
YWlubHkgTmV0d29ya0NhY2hlOjpEYXRhIGFuZAorICAgICAgICBOZXR3b3JrQ2FjaGU6OklPQ2hh
bm5lbC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZHVtcEZpbGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDYWNo
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlQmxvYlN0b3JhZ2UuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpzb3Vw
QnVmZmVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OkRh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmVtcHR5KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhOjppc051bGwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRhdGE6OmFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpz
dWJyYW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29uY2F0ZW5hdGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Ok1hcFdyYXBwZXI6On5NYXBXcmFwcGVyKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWxldGVNYXBXcmFwcGVyKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjptYXBGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmJ5dGVzRXF1
YWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bFNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5u
ZWw6OklPQ2hhbm5lbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVs
OjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpmaWxsRGF0YUZyb21SZWFk
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjppbnB1dFN0cmVhbVJlYWRS
ZWFkeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6
OnJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6cmVhZFN5
bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om91dHB1dFN0cmVhbVdyaXRlUmVh
ZHlDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjp3
cml0ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZVNvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2d0ay9OZXR3b3Jr
UHJvY2Vzc01haW5HdGsuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRm
b3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisK
KzIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCB0aGUgYnVpbGQgd2l0aCBFTkFCTEUoTkVUV09SS19D
QUNIRSkgYW5kICFFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKS4KIAogICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCmluZGV4IDUyYWY2
NDUuLmZkMGExYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtNTUsNiArNTUsMTMgQEAgQ2FjaGUmIHNpbmdsZXRv
bigpCiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCisjaWYgUExBVEZPUk0oR1RLKQorc3RhdGlj
IHZvaWQgZHVtcEZpbGVDaGFuZ2VkKENhY2hlKiBjYWNoZSkKK3sKKyAgICBjYWNoZS0+ZHVtcENv
bnRlbnRzVG9GaWxlKCk7Cit9CisjZW5kaWYKKwogYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25z
dCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCiB7CiAgICAg
bV9zdG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwpAQCAtNzEsNiArNzgsMTUgQEAg
Ym9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFi
bGVFZmZpY2FjeUxvZ2dpbmcpCiAgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgorI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAvLyBUcmlnZ2VycyB3aXRoICJ0b3VjaCAkY2FjaGVQYXRoL2R1bXAiLgor
ICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgQ1N0cmluZyBkdW1wRmlsZVBhdGggPSBXZWJD
b3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fc3RvcmFnZS0+YmFzZVBhdGgoKSwgImR1bXAiKSk7CisgICAgICAgIEdSZWZQdHI8
R0ZpbGU+IGR1bXBGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZHVtcEZpbGVQ
YXRoLmRhdGEoKSkpOworICAgICAgICBHRmlsZU1vbml0b3IqIG1vbml0b3IgPSBnX2ZpbGVfbW9u
aXRvcl9maWxlKGR1bXBGaWxlLmdldCgpLCBHX0ZJTEVfTU9OSVRPUl9OT05FLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1vbml0b3IsICJjaGFu
Z2VkIiwgR19DQUxMQkFDSyhkdW1wRmlsZUNoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisjZW5kaWYK
IAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9wZW5lZCBjYWNoZSBz
dG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVybiAhIW1fc3RvcmFn
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUJsb2JTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAppbmRleCA0ZWNkZTdjLi43YjAzYmUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVCbG9iU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5j
bHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0
Zi9TSEExLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggMTBmNWQwNy4uZjAwZGI4NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
aApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFVTRShTT1VQKQorI2lu
Y2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNvdXAuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCkBAIC0xMDYsNiArMTEwLDkgQEAgcHVibGlj
OgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIERhdGEoRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfZGF0
YV90PiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkK
KyAgICBEYXRhKFNvdXBCdWZmZXIqLCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKKyNlbmRp
ZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fc2l6ZTsgfQogCkBAIC0xMjAsMTAgKzEyNywxNyBAQCBwdWJsaWM6CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgZGlzcGF0Y2hfZGF0YV90IGRpc3BhdGNoRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcGF0Y2hEYXRhLmdldCgpOyB9CiAjZW5kaWYKKworI2lmIFVTRShTT1VQKQor
ICAgIFNvdXBCdWZmZXIqIHNvdXBCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5nZXQo
KTsgfQorI2VuZGlmCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIG11dGFibGUg
RGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfZGF0YV90PiBtX2Rpc3BhdGNoRGF0YTsKICNlbmRpZgorI2lm
IFVTRShTT1VQKQorICAgIG11dGFibGUgR1JlZlB0cjxTb3VwQnVmZmVyPiBtX2J1ZmZlcjsKKyNl
bmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAg
IHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgYm9vbCBtX2lzTWFwIHsgZmFsc2UgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDAx
MDI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK0Rh
dGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgOiBtX2J1ZmZl
cihhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZX0NPUFksIGRhdGEsIHNpemUp
KSkKKyAgICAsIG1fc2l6ZShzaXplKQoreworfQorCitEYXRhOjpEYXRhKFNvdXBCdWZmZXIqIGJ1
ZmZlciwgQmFja2luZyBiYWNraW5nKQorICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9z
aXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKKyAgICAsIG1faXNNYXAobV9zaXplICYm
IGJhY2tpbmcgPT0gQmFja2luZzo6TWFwKQoreworfQorCitEYXRhIERhdGE6OmVtcHR5KCkKK3sK
KyAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9u
ZXcoU09VUF9NRU1PUllfVEFLRSwgbnVsbHB0ciwgMCkpOworICAgIHJldHVybiB7IGJ1ZmZlci5n
ZXQoKSB9OworfQorCitjb25zdCB1aW50OF90KiBEYXRhOjpkYXRhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9idWZmZXIgPyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZl
ci0+ZGF0YSkgOiBudWxscHRyOworfQorCitib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFtX2J1ZmZlcjsKK30KKworYm9vbCBEYXRhOjphcHBseShjb25zdCBzdGQ6OmZ1
bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYmIGFwcGxpZXIpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3NpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBh
cHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLT5kYXRhKSwg
bV9idWZmZXItPmxlbmd0aCk7Cit9CisKK0RhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNl
dCwgc2l6ZV90IHNpemUpIGNvbnN0Cit7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gc3ViQnVmZmVyID0gYWRvcHRHUmVm
KHNvdXBfYnVmZmVyX25ld19zdWJidWZmZXIobV9idWZmZXIuZ2V0KCksIG9mZnNldCwgc2l6ZSkp
OworICAgIHJldHVybiB7IHN1YkJ1ZmZlci5nZXQoKSB9OworfQorCitEYXRhIGNvbmNhdGVuYXRl
KGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCit7CisgICAgaWYgKGEuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBiOworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsK
KworICAgIHNpemVfdCBzaXplID0gYS5zaXplKCkgKyBiLnNpemUoKTsKKyAgICB1aW50OF90KiBk
YXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGdfbWFsbG9jKHNpemUpKTsKKyAgICBtZW1jcHko
ZGF0YSwgYS5zb3VwQnVmZmVyKCktPmRhdGEsIGEuc291cEJ1ZmZlcigpLT5sZW5ndGgpOworICAg
IG1lbWNweShkYXRhICsgYS5zb3VwQnVmZmVyKCktPmxlbmd0aCwgYi5zb3VwQnVmZmVyKCktPmRh
dGEsIGIuc291cEJ1ZmZlcigpLT5sZW5ndGgpOworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVm
ZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld190YWtlKGRhdGEsIHNpemUpKTsKKyAgICBy
ZXR1cm4geyBidWZmZXIuZ2V0KCkgfTsKK30KKworc3RydWN0IE1hcFdyYXBwZXIgeworICAgIH5N
YXBXcmFwcGVyKCkKKyAgICB7CisgICAgICAgIG11bm1hcChtYXAsIHNpemUpOworICAgIH0KKwor
ICAgIHZvaWQqIG1hcDsKKyAgICBzaXplX3Qgc2l6ZTsKK307CisKK3N0YXRpYyB2b2lkIGRlbGV0
ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKK3sKKyAgICBkZWxldGUgd3JhcHBlcjsK
K30KKworRGF0YSBtYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7
CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKKworICAgIHZv
aWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQs
IG9mZnNldCk7CisgICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUpOworfQorCitEYXRhIERhdGE6
OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKG1hcCAmJiBt
YXAgIT0gTUFQX0ZBSUxFRCk7CisgICAgTWFwV3JhcHBlciogd3JhcHBlciA9IG5ldyBNYXBXcmFw
cGVyIHsgbWFwLCBzaXplIH07CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9w
dEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIobWFwLCBzaXplLCB3cmFwcGVyLCByZWlu
dGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZWxldGVNYXBXcmFwcGVyKSkpOworICAgIHJl
dHVybiB7IGJ1ZmZlci5nZXQoKSwgRGF0YTo6QmFja2luZzo6TWFwIH07Cit9CisKK0RhdGEgbWFw
RmlsZShjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9O
TFksIDApOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiB7IH07CisgICAgc3RydWN0
IHN0YXQgc3RhdDsKKyAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKKyAgICAgICAgY2xv
c2UoZmQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IHN0
YXQuc3Rfc2l6ZTsKKyAgICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAwLCBzaXplKTsKKyAgICBj
bG9zZShmZCk7CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1dGVT
SEExKGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBwbHko
WyZzaGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzaGEx
LmFkZEJ5dGVzKGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAg
ICBTSEExOjpEaWdlc3QgZGlnZXN0OworICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKKyAg
ICByZXR1cm4gZGlnZXN0OworfQorCitib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29u
c3QgRGF0YSYgYikKK3sKKyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNp
emUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAppbmRleCBjOGM2YjE3Li43YzA0
MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVJT0NoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRl
IDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNp
ZiBVU0UoU09VUCkKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIApAQCAtNjMsNiAr
NjcsMTEgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBEaXNwYXRjaFB0cjxk
aXNwYXRjaF9pb190PiBtX2Rpc3BhdGNoSU87CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBH
UmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdPdXRwdXRT
dHJlYW0+IG1fb3V0cHV0U3RyZWFtOworICAgIEdSZWZQdHI8R0ZpbGVJT1N0cmVhbT4gbV9pb1N0
cmVhbTsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTFkMGJjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9D
aGFubmVsU291cC5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisK
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBn
RGVmYXVsdFJlYWRCdWZmZXJTaXplID0gNDA5NjsKKworSU9DaGFubmVsOjpJT0NoYW5uZWwoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCwgVHlwZSB0eXBlKQorICAgIDogbV9wYXRoKGZpbGVQYXRoKQor
ICAgICwgbV90eXBlKHR5cGUpCit7CisgICAgYXV0byBwYXRoID0gV2ViQ29yZTo6ZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5kYXRhKCkpKTsKKyAgICBzd2l0Y2ggKG1f
dHlwZSkgeworICAgIGNhc2UgVHlwZTo6Q3JlYXRlOgorICAgICAgICBnX2ZpbGVfZGVsZXRlKGZp
bGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBtX291dHB1dFN0cmVhbSA9IGFk
b3B0R1JlZihHX09VVFBVVF9TVFJFQU0oZ19maWxlX2NyZWF0ZShmaWxlLmdldCgpLCBzdGF0aWNf
Y2FzdDxHRmlsZUNyZWF0ZUZsYWdzPihHX0ZJTEVfQ1JFQVRFX1BSSVZBVEUpLCBudWxscHRyLCBu
dWxscHRyKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OldyaXRlOiB7CisgICAg
ICAgIG1faW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0
KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
VHlwZTo6UmVhZDoKKyAgICAgICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihHX0lOUFVUX1NU
UkVBTShnX2ZpbGVfcmVhZChmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW0gfHwgbV9pbnB1dFN0
cmVhbSB8fCBtX2lvU3RyZWFtKTsKK30KKworUmVmPElPQ2hhbm5lbD4gSU9DaGFubmVsOjpvcGVu
KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIElPQ2hhbm5lbDo6VHlwZSB0eXBlKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IElPQ2hhbm5lbChmaWxlUGF0aCwgdHlwZSkpOworfQorCitzdGF0
aWMgdm9pZCBmaWxsRGF0YUZyb21SZWFkQnVmZmVyKFNvdXBCdWZmZXIqIHJlYWRCdWZmZXIsIHNp
emVfdCBzaXplLCBEYXRhJiBkYXRhKQoreworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVy
OworICAgIGlmIChzaXplICE9IHJlYWRCdWZmZXItPmxlbmd0aCkgeworICAgICAgICAvLyBUaGUg
c3ViYnVmZmVyIGRvZXMgbm90IGNvcHkgdGhlIGRhdGEuCisgICAgICAgIGJ1ZmZlciA9IGFkb3B0
R1JlZihzb3VwX2J1ZmZlcl9uZXdfc3ViYnVmZmVyKHJlYWRCdWZmZXIsIDAsIHNpemUpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgYnVmZmVyID0gcmVhZEJ1ZmZlcjsKKworICAgIGlmIChkYXRhLmlz
TnVsbCgpKSB7CisgICAgICAgIC8vIEZpcnN0IGNodW5rLCB3ZSBuZWVkIHRvIGZvcmNlIHRoZSBk
YXRhIHRvIGJlIGNvcGllZC4KKyAgICAgICAgZGF0YSA9IHsgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKSwgc2l6ZSB9OworICAgIH0gZWxzZSB7CisgICAgICAg
IERhdGEgZGF0YVJlYWQoYnVmZmVyLmdldCgpKTsKKyAgICAgICAgLy8gQ29uY2F0ZW5hdGUgd2ls
bCBjb3B5IHRoZSBkYXRhLgorICAgICAgICBkYXRhID0gY29uY2F0ZW5hdGUoZGF0YSwgZGF0YVJl
YWQpOworICAgIH0KK30KKworc3RydWN0IFJlYWRBc3luY0RhdGEgeworICAgIFJlZlB0cjxJT0No
YW5uZWw+IGNoYW5uZWw7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXI7CisgICAgc2l6
ZV90IGJ5dGVzVG9SZWFkOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGludCBlcnJv
cik+IGNvbXBsZXRpb25IYW5kbGVyOworICAgIERhdGEgZGF0YTsKK307CisKK3N0YXRpYyB2b2lk
IGlucHV0U3RyZWFtUmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBSZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEpCit7CisgICAgZ3NzaXpl
IGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0cmVhbSwgcmVzdWx0LCBu
dWxscHRyKTsKKyAgICBpZiAoYnl0ZXNSZWFkID09IC0xKSB7CisgICAgICAgIGFzeW5jRGF0YS0+
Y29tcGxldGlvbkhhbmRsZXIoYXN5bmNEYXRhLT5kYXRhLCAtMSk7CisgICAgICAgIGRlbGV0ZSBh
c3luY0RhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWJ5dGVzUmVhZCkg
eworICAgICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKGFzeW5jRGF0YS0+ZGF0YSwg
MCk7CisgICAgICAgIGRlbGV0ZSBhc3luY0RhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlQoYnl0ZXNSZWFkID4gMCk7CisgICAgZmlsbERhdGFGcm9tUmVhZEJ1ZmZlcihh
c3luY0RhdGEtPmJ1ZmZlci5nZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQpLCBh
c3luY0RhdGEtPmRhdGEpOworCisgICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvUmVhZCA9IGFzeW5j
RGF0YS0+Ynl0ZXNUb1JlYWQgLSBhc3luY0RhdGEtPmRhdGEuc2l6ZSgpOworICAgIGlmICghcGVu
ZGluZ0J5dGVzVG9SZWFkKSB7CisgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRsZXIo
YXN5bmNEYXRhLT5kYXRhLCAwKTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IHN0ZDo6bWluKHBlbmRp
bmdCeXRlc1RvUmVhZCwgYXN5bmNEYXRhLT5idWZmZXItPmxlbmd0aCk7CisgICAgZ19pbnB1dF9z
dHJlYW1fcmVhZF9hc3luYyhzdHJlYW0sIGNvbnN0X2Nhc3Q8Y2hhcio+KGFzeW5jRGF0YS0+YnVm
ZmVyLT5kYXRhKSwgYnl0ZXNUb1JlYWQsIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihpbnB1dFN0cmVhbVJl
YWRSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKwordm9pZCBJT0NoYW5uZWw6OnJlYWQo
c2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSosIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCht
X2lucHV0U3RyZWFtKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RkOjptaW4oc2l6ZSwg
Z0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIg
PSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZX1RBS0UsIHN0YXRpY19jYXN0
PGNoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSksIGJ1ZmZlclNpemUpKTsKKyAgICBSZWFkQXN5
bmNEYXRhKiBhc3luY0RhdGEgPSBuZXcgUmVhZEFzeW5jRGF0YSB7IHRoaXMsIGJ1ZmZlci5nZXQo
KSwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXIsIHsgfSB9OworCisgICAgLy8gRklYTUU6IGltcGxl
bWVudCBvZmZzZXQuCisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFt
LmdldCgpLCBjb25zdF9jYXN0PGNoYXIqPihidWZmZXItPmRhdGEpLCBidWZmZXJTaXplLCBHX1BS
SU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5j
UmVhZHlDYWxsYmFjaz4oaW5wdXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayksIGFzeW5jRGF0YSk7
Cit9CisKKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZG8gd2l0aG91dCB0aGlzLgor
dm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3Jr
UXVldWUqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgc2l6ZV90IGJ1ZmZl
clNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICBHUmVm
UHRyPFNvdXBCdWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNP
VVBfTUVNT1JZX1RBS0UsIHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSks
IGJ1ZmZlclNpemUpKTsKKyAgICBEYXRhIGRhdGE7CisgICAgZ3NzaXplIGJ5dGVzUmVhZDsKKyAg
ICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gc2l6ZTsKKyAgICBzaXplX3QgYnl0ZXNUb1Jl
YWQgPSBidWZmZXJTaXplOworICAgIGRvIHsKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBv
ZmZzZXQuCisgICAgICAgIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQobV9pbnB1dFN0
cmVhbS5nZXQoKSwgY29uc3RfY2FzdDxjaGFyKj4ocmVhZEJ1ZmZlci0+ZGF0YSksIGJ5dGVzVG9S
ZWFkLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSAtMSkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgLTEpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFieXRlc1JlYWQpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBBU1NFUlQoYnl0ZXNSZWFkID4gMCk7CisgICAgICAgIGZpbGxEYXRh
RnJvbVJlYWRCdWZmZXIocmVhZEJ1ZmZlci5nZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRl
c1JlYWQpLCBkYXRhKTsKKworICAgICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBzaXplIC0gZGF0
YS5zaXplKCk7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RkOjptaW4ocGVuZGluZ0J5dGVzVG9S
ZWFkLCByZWFkQnVmZmVyLT5sZW5ndGgpOworICAgIH0gd2hpbGUgKHBlbmRpbmdCeXRlc1RvUmVh
ZCk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRhLCAwKTsKK30KKworc3RydWN0IFdyaXRl
QXN5bmNEYXRhIHsKKyAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsOworICAgIEdSZWZQdHI8
U291cEJ1ZmZlcj4gYnVmZmVyOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4g
Y29tcGxldGlvbkhhbmRsZXI7Cit9OworCitzdGF0aWMgdm9pZCBvdXRwdXRTdHJlYW1Xcml0ZVJl
YWR5Q2FsbGJhY2soR091dHB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
V3JpdGVBc3luY0RhdGEqIGFzeW5jRGF0YSkKK3sKKyAgICBnc3NpemUgYnl0ZXNXcml0dGVuID0g
Z19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwgbnVsbHB0cik7Cisg
ICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgeworICAgICAgICBhc3luY0RhdGEtPmNvbXBsZXRp
b25IYW5kbGVyKC0xKTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGdzc2l6ZSBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gYXN5bmNEYXRhLT5i
dWZmZXItPmxlbmd0aCAtIGJ5dGVzV3JpdHRlbjsKKyAgICBpZiAoIXBlbmRpbmdCeXRlc1RvV3Jp
dGUpIHsKKyAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAg
ZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzeW5jRGF0
YS0+YnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZmZXIoYXN5bmNEYXRh
LT5idWZmZXIuZ2V0KCksIGJ5dGVzV3JpdHRlbiwgcGVuZGluZ0J5dGVzVG9Xcml0ZSkpOworICAg
IGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyhzdHJlYW0sIGFzeW5jRGF0YS0+YnVmZmVyLT5k
YXRhLCBwZW5kaW5nQnl0ZXNUb1dyaXRlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFt
V3JpdGVSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKwordm9pZCBJT0NoYW5uZWw6Ondy
aXRlKHNpemVfdCBvZmZzZXQsIGNvbnN0IERhdGEmIGRhdGEsIFdvcmtRdWV1ZSosIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJU
KG1fb3V0cHV0U3RyZWFtIHx8IG1faW9TdHJlYW0pOworCisgICAgR091dHB1dFN0cmVhbSogc3Ry
ZWFtID0gbV9vdXRwdXRTdHJlYW0gPyBtX291dHB1dFN0cmVhbS5nZXQoKSA6IGdfaW9fc3RyZWFt
X2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1faW9TdHJlYW0uZ2V0KCkpKTsKKyAgICBX
cml0ZUFzeW5jRGF0YSogYXN5bmNEYXRhID0gbmV3IFdyaXRlQXN5bmNEYXRhIHsgdGhpcywgZGF0
YS5zb3VwQnVmZmVyKCksIGNvbXBsZXRpb25IYW5kbGVyIH07CisgICAgLy8gRklYTUU6IGltcGxl
bWVudCBvZmZzZXQuCisgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jKHN0cmVhbSwgYXN5
bmNEYXRhLT5idWZmZXItPmRhdGEsIGRhdGEuc2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51
bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0
cHV0U3RyZWFtV3JpdGVSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgTmV0d29ya0NhY2hlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlU291cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNj
ODM3ZDkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZVNvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKLQotI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIG5ldHdvcmtD
YWNoZVN1YmRpcmVjdG9yeSA9ICJXZWJLaXRDYWNoZSI7Ci0KLU5ldHdvcmtDYWNoZVN0b3JhZ2U6
OkRhdGE6OkRhdGEoKQotICAgIDogbV9kYXRhKG51bGxwdHIpCi0gICAgLCBtX3NpemUoMCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1OZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpE
YXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotICAgIDogbV9kYXRhKGRhdGEp
Ci0gICAgLCBtX3NpemUoc2l6ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1jb25z
dCB1aW50OF90KiBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpkYXRhKCkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIE5ldHdv
cmtDYWNoZVN0b3JhZ2U6OkRhdGE6OmlzTnVsbCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0b3JhZ2U+IE5ldHdvcmtDYWNoZVN0b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBhcHBsaWNh
dGlvbkNhY2hlUGF0aCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFN0
cmluZyBuZXR3b3JrQ2FjaGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGFwcGxpY2F0aW9uQ2FjaGVQYXRoLCBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkpOwotICAgIGlm
ICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVBhdGgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0b3JhZ2U+KG5ldyBOZXR3b3JrQ2FjaGVTdG9yYWdlKG5ldHdvcmtDYWNoZVBhdGgpKTsKLX0K
LQotTmV0d29ya0NhY2hlU3RvcmFnZTo6TmV0d29ya0NhY2hlU3RvcmFnZShjb25zdCBTdHJpbmcm
IGRpcmVjdG9yeVBhdGgpCi0gICAgOiBtX2RpcmVjdG9yeVBhdGgoZGlyZWN0b3J5UGF0aCkKLSAg
ICAsIG1fbWF4aW11bVNpemUoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKLSAg
ICAsIG1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3VudCgwKQotewotICAgIGluaXRpYWxpemVL
ZXlGaWx0ZXIoKTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjppbml0aWFsaXplS2V5
RmlsdGVyKCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6cmVtb3ZlRW50cnkoY29u
c3QgTmV0d29ya0NhY2hlS2V5JikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6ZGlz
cGF0Y2hSZXRyaWV2ZU9wZXJhdGlvbihjb25zdCBSZXRyaWV2ZU9wZXJhdGlvbiYpCi17Ci0gICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmRpc3BhdGNoUGVuZGluZ1JldHJpZXZlT3BlcmF0aW9u
cygpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IE5ldHdv
cmtDYWNoZUtleSYsIHVuc2lnbmVkIC8qIHByaW9yaXR5ICovLCBzdGQ6OmZ1bmN0aW9uPGJvb2wg
KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIobnVsbHB0cik7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6c3Rv
cmUoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgRW50cnkmLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKGJvb2wgc3VjY2Vzcyk+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6c2V0TWF4aW11bVNp
emUoc2l6ZV90IHNpemUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIG1fbWF4aW11bVNpemUgPSBzaXplOwotfQotCi12b2lkIE5l
dHdvcmtDYWNoZVN0b3JhZ2U6OmNsZWFyKCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVh
cmluZyBjYWNoZSIpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9rZXlGaWx0ZXIuY2xl
YXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVU
V09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2d0
ay9OZXR3b3JrUHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKaW5kZXggZmEwYTk3MC4uNjg1NWUzMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9j
ZXNzTWFpbkd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05l
dHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHBsYXRmb3JtRmluYWxpemUoKSBvdmVycmlkZQogICAgIHsKKyNpZiAhRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCiAgICAgICAgIGlmIChTb3VwQ2FjaGUqIHNvdXBDYWNoZSA9IFNvdXBOZXR3
b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jYWNoZSgpKSB7CiAgICAgICAgICAgICBzb3Vw
X2NhY2hlX2ZsdXNoKHNvdXBDYWNoZSk7CiAgICAgICAgICAgICBzb3VwX2NhY2hlX2R1bXAoc291
cENhY2hlKTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CmluZGV4IDUxNzkzMTEuLjYyZWZlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVh
ci5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCisjaWYgIUVOQUJM
RShORVRXT1JLX0NBQ0hFKQogc3RhdGljIHVpbnQ2NF90IGdldENhY2hlRGlza0ZyZWVTaXplKFNv
dXBDYWNoZSogY2FjaGUpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsKQEAgLTU1LDYgKzU3LDcgQEAg
c3RhdGljIHVpbnQ2NF90IGdldENhY2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSogY2FjaGUpCiAK
ICAgICByZXR1cm4gV2ViQ29yZTo6Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNhY2hlRGlyLmdl
dCgpKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdWludDY0X3QgZ2V0TWVtb3J5U2l6ZSgpCiB7CkBA
IC04Myw2ICs4NiwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZwogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgQVNTRVJUKCFwYXJhbWV0
ZXJzLmRpc2tDYWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpOworICAgIG1fZGlza0NhY2hlRGlyZWN0
b3J5ID0gcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3Rvcnk7CisjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCisgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0Nh
Y2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5
TG9nZ2luZyk7CisjZWxzZQogICAgIEdSZWZQdHI8U291cENhY2hlPiBzb3VwQ2FjaGUgPSBhZG9w
dEdSZWYoc291cF9jYWNoZV9uZXcocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkudXRmOCgp
LmRhdGEoKSwgU09VUF9DQUNIRV9TSU5HTEVfVVNFUikpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lv
bjo6ZGVmYXVsdFNlc3Npb24oKS5zZXRDYWNoZShzb3VwQ2FjaGUuZ2V0KCkpOwogICAgIC8vIFNl
dCBhbiBpbml0aWFsIGh1Z2UgbWF4X3NpemUgZm9yIHRoZSBTb3VwQ2FjaGUgc28gdGhlIGNhbGwg
dG8gc291cF9jYWNoZV9sb2FkKCkgd29uJ3QgZXZpY3QgYW55IGNhY2hlZApAQCAtOTEsNiArOTgs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXpl
KHNvdXBDYWNoZS5nZXQoKSwgR19NQVhVSU5UKTsKICAgICBzb3VwX2NhY2hlX2xvYWQoc291cENh
Y2hlLmdldCgpKTsKICAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShzb3VwQ2FjaGUuZ2V0KCks
IGluaXRpYWxNYXhTaXplKTsKKyNlbmRpZgogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgc3VwcGxlbWVudDxXZWJD
b29raWVNYW5hZ2VyPigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwKQEAgLTExNSwxNiArMTIzLDI2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwp
CiAgICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gMDsKICAgICB1bnNp
Z25lZCBsb25nIHVybENhY2hlRGlza0NhcGFjaXR5ID0gMDsKIAorI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQorICAgIHVpbnQ2NF90IGRpc2tGcmVlU2l6ZSA9IFdlYkNvcmU6OmdldFZvbHVtZUZy
ZWVTaXplRm9yUGF0aChtX2Rpc2tDYWNoZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKSAvIDEwMjQg
LyAxMDI0OworI2Vsc2UKICAgICBTb3VwQ2FjaGUqIGNhY2hlID0gU291cE5ldHdvcmtTZXNzaW9u
OjpkZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCk7CiAgICAgdWludDY0X3QgZGlza0ZyZWVTaXplID0g
Z2V0Q2FjaGVEaXNrRnJlZVNpemUoY2FjaGUpIC8gMTAyNCAvIDEwMjQ7CisjZW5kaWYKIAogICAg
IHVpbnQ2NF90IG1lbVNpemUgPSBnZXRNZW1vcnlTaXplKCk7CiAgICAgY2FsY3VsYXRlQ2FjaGVT
aXplcyhjYWNoZU1vZGVsLCBtZW1TaXplLCBkaXNrRnJlZVNpemUsCiAgICAgICAgIGNhY2hlVG90
YWxDYXBhY2l0eSwgY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsLAogICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0
eSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogCisjaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgYXV0byYgbmV0d29ya0NhY2hlID0gTmV0d29ya0Nh
Y2hlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAobmV0d29ya0NhY2hlLmlzRW5hYmxlZCgpKQorICAg
ICAgICBuZXR3b3JrQ2FjaGUuc2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworI2Vs
c2UKICAgICBpZiAodXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPiBzb3VwX2NhY2hlX2dldF9tYXhfc2l6
ZShjYWNoZSkpCiAgICAgICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXplKGNhY2hlLCB1cmxDYWNo
ZURpc2tDYXBhY2l0eSk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdu
b3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQpAQCAtMTQ4LDcgKzE2NiwxMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNo
ZXNUb0NsZWFyKQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCAvKiBtb2RpZmllZFNpbmNlICovLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IC8qIGNvbXBsZXRpb25IYW5kbGVyICovKQogewogICAgIC8vIEZJWE1F
OiBGaW5kIGEgd2F5IHRvIG9ubHkgY2xlYXIgYSBwYXJ0IG9mIHRoZSBjYWNoZSBiYXNlZCBvbiB0
aGUgZGF0ZS4KKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyAgICBOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLmNsZWFyKCk7CisjZWxzZQogICAgIHNvdXBfY2FjaGVfY2xlYXIoU291cE5ldHdv
cmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCkpOworI2VuZGlmCiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggYjAyZTk0Ny4uNDg1YTlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAg
LTE4LDcgKzE4LDggQEAgc2V0KFdlYktpdDJfVVNFX1BSRUZJWF9IRUFERVIgT04pCiBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJv
Y2Vzc01haW5HdGsuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlU291cC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxT
b3VwLmNwcAogCiAgICAgTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5j
cHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvY29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0
Mi9jb25maWcuaAppbmRleCBiYzlhYzI5Li4xNmRlYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtODIsNyArODIs
NyBAQAogI2VuZGlmCiAKICNpZm5kZWYgRU5BQkxFX05FVFdPUktfQ0FDSEUKLSNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKSAmJiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKSAmJiAoUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykpCiAjZGVmaW5lIEVO
QUJMRV9ORVRXT1JLX0NBQ0hFIDEKICNlbHNlCiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hF
IDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251151</attachid>
            <date>2015-04-20 00:59:02 -0700</date>
            <delta_ts>2015-04-20 01:47:58 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-network-cache-soup.diff</filename>
            <type>text/plain</type>
            <size>35049</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NWIxZTExLi4zZDVmNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBOZXR3b3Jr
UHJvY2VzcyBkaXNrIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDM4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbGxvdyB0byBjcmVhdGUgYSBHUmVmUHRyIGZvciBTb3VwQnVmZmVyLiBFdmVu
IHRob3VnaCBTb3VwQnVmZmVyCisgICAgICAgIGlzIG5vdCBhIEdPYmplY3QgYW5kIGhhcyBjb3B5
L2ZyZWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgcmVmL3VucmVmLAorICAgICAgICBpdCdzIGludGVy
bmFsbHkgcmVmY291bnRlZCwgc28gd2UgY291bGQgdXNlIGNvcHkvZnJlZSBhcworICAgICAgICBy
ZWYvdW5yZWYuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmg6IEFkZGVkLgorCiAyMDE1LTA0LTE5ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBJbXByb3ZlIHRoZSBm
ZWF0dXJlLmpzb24gZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMjEwNTcyOC4u
MDFjNmM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE2MSw2ICsxNjEsNyBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29v
a2llU3RvcmFnZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxT
dG9yYWdlU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKKyAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VFcnJvclNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wMDlhZWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdSZWZQdHJTb3VwLmgiCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBTb3VwQnVmZmVyKiByZWZHUHRyKFNvdXBC
dWZmZXIqIHB0cikKK3sKKyAgICByZXR1cm4gcHRyID8gc291cF9idWZmZXJfY29weShwdHIpIDog
bnVsbHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoU291cEJ1ZmZlciogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIHNvdXBfYnVmZmVyX2ZyZWUocHRyKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9HUmVmUHRyU291cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjY5ZmRiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvR1JlZlB0clNvdXAuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdSZWZQdHJTb3VwX2gK
KyNkZWZpbmUgR1JlZlB0clNvdXBfaAorCisjaWYgVVNFKFNPVVApCisKKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBTb3VwQnVmZmVyKiByZWZHUHRyKFNvdXBCdWZmZXIqKTsK
K3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNvdXBCdWZmZXIqKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoU09VUCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0
CmluZGV4IDBiNmQ2ODcuLjNjZGU1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0xNjQsMTAg
KzE2NCwxNCBAQCBzZXQoTmV0d29ya1Byb2Nlc3NfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNz
L0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAKIAogICAgIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVCbG9iU3RvcmFnZS5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVD
b2RlcnMuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcAorICAg
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCisgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAKICkKIAogc2V0KFdlYktpdDJfU09VUkNFUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEx
MGEyMzMuLjI1ODU1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxNS0wNC0xNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NP
VVBdIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIE5ldHdvcmtQcm9jZXNzIGRpc2sgY2Fj
aGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzg3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgcGFydHMgb2YgdGhlIGRpc2sgY2FjaGUKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gZm9yIFNvdXAuIEl0J3MgbWFpbmx5IE5ldHdvcmtDYWNoZTo6RGF0
YSBhbmQKKyAgICAgICAgTmV0d29ya0NhY2hlOjpJT0NoYW5uZWwuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmR1bXBGaWxlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6c291cEJ1ZmZlcik6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhOjplbXB0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGF0YTo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6aXNO
dWxsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphcHBseSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6c3VicmFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmNvbmNhdGVuYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpNYXBXcmFwcGVyOjp+TWFwV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6ZGVsZXRlTWFwV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6bWFwRmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YWRvcHRN
YXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNvbXB1dGVTSEExKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpieXRlc0VxdWFsKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaDoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpJT0NoYW5uZWwpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6b3Blbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6ZmlsbERhdGFGcm9tUmVhZEJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6aW5wdXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFkKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5jKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpvdXRwdXRTdHJlYW1Xcml0ZVJlYWR5Q2FsbGJhY2spOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6d3JpdGUpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VTb3VwLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWluR3RrLmNwcDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hl
TW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUp
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorCiAyMDE1LTA0LTE4ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxODE2
NTYpOiBBbmltYXRlZCB0aWxlZCBsYXllcnMgYXJlIG1pc3NpbmcgY29udGVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5k
ZXggZmNkZWY2MC4uY2ZiNGU0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC01NSw2ICs1NSwxMyBAQCBDYWNoZSYg
c2luZ2xldG9uKCkKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKKyNpZiBQTEFURk9STShHVEsp
CitzdGF0aWMgdm9pZCBkdW1wRmlsZUNoYW5nZWQoQ2FjaGUqIGNhY2hlKQoreworICAgIGNhY2hl
LT5kdW1wQ29udGVudHNUb0ZpbGUoKTsKK30KKyNlbmRpZgorCiBib29sIENhY2hlOjppbml0aWFs
aXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBib29sIGVuYWJsZUVmZmljYWN5TG9nZ2luZykK
IHsKICAgICBtX3N0b3JhZ2UgPSBTdG9yYWdlOjpvcGVuKGNhY2hlUGF0aCk7CkBAIC03MSw2ICs3
OCwxNSBAQCBib29sIENhY2hlOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBi
b29sIGVuYWJsZUVmZmljYWN5TG9nZ2luZykKICAgICAgICAgfSk7CiAgICAgfQogI2VuZGlmCisj
aWYgUExBVEZPUk0oR1RLKQorICAgIC8vIFRyaWdnZXJzIHdpdGggInRvdWNoICRjYWNoZVBhdGgv
ZHVtcCIuCisgICAgaWYgKG1fc3RvcmFnZSkgeworICAgICAgICBDU3RyaW5nIGR1bXBGaWxlUGF0
aCA9IFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobV9zdG9yYWdlLT5iYXNlUGF0aCgpLCAiZHVtcCIpKTsKKyAgICAgICAg
R1JlZlB0cjxHRmlsZT4gZHVtcEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChk
dW1wRmlsZVBhdGguZGF0YSgpKSk7CisgICAgICAgIEdGaWxlTW9uaXRvciogbW9uaXRvciA9IGdf
ZmlsZV9tb25pdG9yX2ZpbGUoZHVtcEZpbGUuZ2V0KCksIEdfRklMRV9NT05JVE9SX05PTkUsIG51
bGxwdHIsIG51bGxwdHIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobW9uaXRv
ciwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGR1bXBGaWxlQ2hhbmdlZCksIHRoaXMpOworICAgIH0K
KyNlbmRpZgogCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgb3BlbmVk
IGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7CiAgICAgcmV0dXJuICEh
bV9zdG9yYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCmluZGV4IDRlY2RlN2MuLjdi
MDNiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBv
c2l4LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8ZmNudGwu
aD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5j
bHVkZSA8d3RmL1NIQTEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAppbmRleCAxMGY1ZDA3Li44NGZjY2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgVVNFKFNP
VVApCisjaW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyU291cC5oPgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKQEAgLTEwNiw2ICsxMTAsOSBA
QCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgRGF0YShEaXNwYXRjaFB0cjxkaXNw
YXRjaF9kYXRhX3Q+LCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgorI2lmIFVT
RShTT1VQKQorICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBCYWNraW5nID0gQmFja2lu
Zzo6QnVmZmVyKTsKKyNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQogCkBAIC0xMjAsMTAgKzEyNywxNyBA
QCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZGlzcGF0Y2hfZGF0YV90IGRpc3Bh
dGNoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGF0Y2hEYXRhLmdldCgpOyB9CiAjZW5kaWYK
KworI2lmIFVTRShTT1VQKQorICAgIFNvdXBCdWZmZXIqIHNvdXBCdWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlci5nZXQoKTsgfQorI2VuZGlmCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIG11dGFibGUgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfZGF0YV90PiBtX2Rpc3BhdGNo
RGF0YTsKICNlbmRpZgorI2lmIFVTRShTT1VQKQorICAgIG11dGFibGUgR1JlZlB0cjxTb3VwQnVm
ZmVyPiBtX2J1ZmZlcjsKKyNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9kYXRh
IHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgYm9vbCBtX2lzTWFw
IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi41MTY0NzA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCkBAIC0wLDAgKzEs
MTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKworI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxz
eXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZSB7CisKK0RhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpCisgICAgOiBtX2J1ZmZlcihhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZ
X0NPUFksIGRhdGEsIHNpemUpKSkKKyAgICAsIG1fc2l6ZShzaXplKQoreworfQorCitEYXRhOjpE
YXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIEJhY2tpbmcgYmFja2luZykKKyAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fc2l6ZShidWZmZXIgPyBidWZmZXItPmxlbmd0aCA6
IDApCisgICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBiYWNraW5nID09IEJhY2tpbmc6Ok1hcCkKK3sK
K30KKworRGF0YSBEYXRhOjplbXB0eSgpCit7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZm
ZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZX1RBS0UsIG51bGxwdHIs
IDApKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnVmZmVyKSB9OworfQorCitjb25zdCB1aW50
OF90KiBEYXRhOjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9idWZmZXIgPyByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci0+ZGF0YSkgOiBudWxscHRyOworfQor
Citib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2J1ZmZlcjsKK30K
KworYm9vbCBEYXRhOjphcHBseShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYmIGFwcGxpZXIpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NpemUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCk7Cit9CisK
K0RhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEdSZWZQdHI8
U291cEJ1ZmZlcj4gc3ViQnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZm
ZXIobV9idWZmZXIuZ2V0KCksIG9mZnNldCwgc2l6ZSkpOworICAgIHJldHVybiB7IFdURjo6bW92
ZShzdWJCdWZmZXIpIH07Cit9CisKK0RhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29u
c3QgRGF0YSYgYikKK3sKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGI7Cisg
ICAgaWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhOworCisgICAgc2l6ZV90IHNpemUg
PSBhLnNpemUoKSArIGIuc2l6ZSgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZ19tYWxsb2Moc2l6ZSkpOworICAgIG1lbWNweShkYXRhLCBhLnNvdXBCdWZmZXIo
KS0+ZGF0YSwgYS5zb3VwQnVmZmVyKCktPmxlbmd0aCk7CisgICAgbWVtY3B5KGRhdGEgKyBhLnNv
dXBCdWZmZXIoKS0+bGVuZ3RoLCBiLnNvdXBCdWZmZXIoKS0+ZGF0YSwgYi5zb3VwQnVmZmVyKCkt
Pmxlbmd0aCk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoc291
cF9idWZmZXJfbmV3X3Rha2UoZGF0YSwgc2l6ZSkpOworICAgIHJldHVybiB7IFdURjo6bW92ZShi
dWZmZXIpIH07Cit9CisKK3N0cnVjdCBNYXBXcmFwcGVyIHsKKyAgICB+TWFwV3JhcHBlcigpCisg
ICAgeworICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAgICB9CisKKyAgICB2b2lkKiBtYXA7
CisgICAgc2l6ZV90IHNpemU7Cit9OworCitzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1h
cFdyYXBwZXIqIHdyYXBwZXIpCit7CisgICAgZGVsZXRlIHdyYXBwZXI7Cit9CisKK0RhdGEgbWFw
RmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworICAgIGlmICghc2l6
ZSkKKyAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CisKKyAgICB2b2lkKiBtYXAgPSBtbWFw
KG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOworICAg
IGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4g
RGF0YTo6YWRvcHRNYXAobWFwLCBzaXplKTsKK30KKworRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lk
KiBtYXAsIHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVChtYXAgJiYgbWFwICE9IE1BUF9GQUlM
RUQpOworICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6
ZSB9OworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVm
ZmVyX25ld193aXRoX293bmVyKG1hcCwgc2l6ZSwgd3JhcHBlciwgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlcikpKTsKKyAgICByZXR1cm4geyBXVEY6Om1v
dmUoYnVmZmVyKSwgRGF0YTo6QmFja2luZzo6TWFwIH07Cit9CisKK0RhdGEgbWFwRmlsZShjb25z
dCBjaGFyKiBwYXRoKQoreworICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOwor
ICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiB7IH07CisgICAgc3RydWN0IHN0YXQgc3Rh
dDsKKyAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6
ZTsKKyAgICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAwLCBzaXplKTsKKyAgICBjbG9zZShmZCk7
CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0
IERhdGEmIGRhdGEpCit7CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzaGExLmFkZEJ5dGVz
KGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICBTSEExOjpE
aWdlc3QgZGlnZXN0OworICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKKyAgICByZXR1cm4g
ZGlnZXN0OworfQorCitib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYg
YikKK3sKKyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlSU9DaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAppbmRleCBjOGM2YjE3Li43YzA0MjEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVJT0NoYW5uZWwuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3dGYvV29y
a1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBVU0UoU09V
UCkKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIApAQCAtNjMsNiArNjcsMTEgQEAg
cHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBEaXNwYXRjaFB0cjxkaXNwYXRjaF9p
b190PiBtX2Rpc3BhdGNoSU87CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdPdXRwdXRTdHJlYW0+IG1f
b3V0cHV0U3RyZWFtOworICAgIEdSZWZQdHI8R0ZpbGVJT1N0cmVhbT4gbV9pb1N0cmVhbTsKKyNl
bmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTFkMGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291
cC5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUlPQ2hhbm5lbC5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBnRGVmYXVsdFJl
YWRCdWZmZXJTaXplID0gNDA5NjsKKworSU9DaGFubmVsOjpJT0NoYW5uZWwoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCwgVHlwZSB0eXBlKQorICAgIDogbV9wYXRoKGZpbGVQYXRoKQorICAgICwgbV90
eXBlKHR5cGUpCit7CisgICAgYXV0byBwYXRoID0gV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKGZpbGVQYXRoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5kYXRhKCkpKTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgewor
ICAgIGNhc2UgVHlwZTo6Q3JlYXRlOgorICAgICAgICBnX2ZpbGVfZGVsZXRlKGZpbGUuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBtX291dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihH
X09VVFBVVF9TVFJFQU0oZ19maWxlX2NyZWF0ZShmaWxlLmdldCgpLCBzdGF0aWNfY2FzdDxHRmls
ZUNyZWF0ZUZsYWdzPihHX0ZJTEVfQ1JFQVRFX1BSSVZBVEUpLCBudWxscHRyLCBudWxscHRyKSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OldyaXRlOiB7CisgICAgICAgIG1faW9T
dHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVHlwZTo6UmVh
ZDoKKyAgICAgICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihHX0lOUFVUX1NUUkVBTShnX2Zp
bGVfcmVhZChmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSkpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW0gfHwgbV9pbnB1dFN0cmVhbSB8fCBt
X2lvU3RyZWFtKTsKK30KKworUmVmPElPQ2hhbm5lbD4gSU9DaGFubmVsOjpvcGVuKGNvbnN0IFN0
cmluZyYgZmlsZVBhdGgsIElPQ2hhbm5lbDo6VHlwZSB0eXBlKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElPQ2hhbm5lbChmaWxlUGF0aCwgdHlwZSkpOworfQorCitzdGF0aWMgdm9pZCBm
aWxsRGF0YUZyb21SZWFkQnVmZmVyKFNvdXBCdWZmZXIqIHJlYWRCdWZmZXIsIHNpemVfdCBzaXpl
LCBEYXRhJiBkYXRhKQoreworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyOworICAgIGlm
IChzaXplICE9IHJlYWRCdWZmZXItPmxlbmd0aCkgeworICAgICAgICAvLyBUaGUgc3ViYnVmZmVy
IGRvZXMgbm90IGNvcHkgdGhlIGRhdGEuCisgICAgICAgIGJ1ZmZlciA9IGFkb3B0R1JlZihzb3Vw
X2J1ZmZlcl9uZXdfc3ViYnVmZmVyKHJlYWRCdWZmZXIsIDAsIHNpemUpKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgYnVmZmVyID0gcmVhZEJ1ZmZlcjsKKworICAgIGlmIChkYXRhLmlzTnVsbCgpKSB7
CisgICAgICAgIC8vIEZpcnN0IGNodW5rLCB3ZSBuZWVkIHRvIGZvcmNlIHRoZSBkYXRhIHRvIGJl
IGNvcGllZC4KKyAgICAgICAgZGF0YSA9IHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oYnVmZmVyLT5kYXRhKSwgc2l6ZSB9OworICAgIH0gZWxzZSB7CisgICAgICAgIERhdGEgZGF0
YVJlYWQoYnVmZmVyLmdldCgpKTsKKyAgICAgICAgLy8gQ29uY2F0ZW5hdGUgd2lsbCBjb3B5IHRo
ZSBkYXRhLgorICAgICAgICBkYXRhID0gY29uY2F0ZW5hdGUoZGF0YSwgZGF0YVJlYWQpOworICAg
IH0KK30KKworc3RydWN0IFJlYWRBc3luY0RhdGEgeworICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNo
YW5uZWw7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXI7CisgICAgc2l6ZV90IGJ5dGVz
VG9SZWFkOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBs
ZXRpb25IYW5kbGVyOworICAgIERhdGEgZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIGlucHV0U3Ry
ZWFtUmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBSZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEpCit7CisgICAgZ3NzaXplIGJ5dGVzUmVh
ZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0cmVhbSwgcmVzdWx0LCBudWxscHRyKTsK
KyAgICBpZiAoYnl0ZXNSZWFkID09IC0xKSB7CisgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlv
bkhhbmRsZXIoYXN5bmNEYXRhLT5kYXRhLCAtMSk7CisgICAgICAgIGRlbGV0ZSBhc3luY0RhdGE7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWJ5dGVzUmVhZCkgeworICAgICAg
ICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKGFzeW5jRGF0YS0+ZGF0YSwgMCk7CisgICAg
ICAgIGRlbGV0ZSBhc3luY0RhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlQoYnl0ZXNSZWFkID4gMCk7CisgICAgZmlsbERhdGFGcm9tUmVhZEJ1ZmZlcihhc3luY0RhdGEt
PmJ1ZmZlci5nZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQpLCBhc3luY0RhdGEt
PmRhdGEpOworCisgICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvUmVhZCA9IGFzeW5jRGF0YS0+Ynl0
ZXNUb1JlYWQgLSBhc3luY0RhdGEtPmRhdGEuc2l6ZSgpOworICAgIGlmICghcGVuZGluZ0J5dGVz
VG9SZWFkKSB7CisgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoYXN5bmNEYXRh
LT5kYXRhLCAwKTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IHN0ZDo6bWluKHBlbmRpbmdCeXRlc1Rv
UmVhZCwgYXN5bmNEYXRhLT5idWZmZXItPmxlbmd0aCk7CisgICAgZ19pbnB1dF9zdHJlYW1fcmVh
ZF9hc3luYyhzdHJlYW0sIGNvbnN0X2Nhc3Q8Y2hhcio+KGFzeW5jRGF0YS0+YnVmZmVyLT5kYXRh
KSwgYnl0ZXNUb1JlYWQsIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwKKyAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihpbnB1dFN0cmVhbVJlYWRSZWFkeUNh
bGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKwordm9pZCBJT0NoYW5uZWw6OnJlYWQoc2l6ZV90IG9m
ZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSosIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYs
IGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChtX2lucHV0U3Ry
ZWFtKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RkOjptaW4oc2l6ZSwgZ0RlZmF1bHRS
ZWFkQnVmZmVyU2l6ZSk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9wdEdS
ZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZX1RBS0UsIHN0YXRpY19jYXN0PGNoYXIqPihn
X21hbGxvYyhidWZmZXJTaXplKSksIGJ1ZmZlclNpemUpKTsKKyAgICBSZWFkQXN5bmNEYXRhKiBh
c3luY0RhdGEgPSBuZXcgUmVhZEFzeW5jRGF0YSB7IHRoaXMsIGJ1ZmZlci5nZXQoKSwgc2l6ZSwg
Y29tcGxldGlvbkhhbmRsZXIsIHsgfSB9OworCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZz
ZXQuCisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBj
b25zdF9jYXN0PGNoYXIqPihidWZmZXItPmRhdGEpLCBidWZmZXJTaXplLCBHX1BSSU9SSVRZX0RF
RkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxs
YmFjaz4oaW5wdXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayksIGFzeW5jRGF0YSk7Cit9CisKKy8v
IEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZG8gd2l0aG91dCB0aGlzLgordm9pZCBJT0No
YW5uZWw6OnJlYWRTeW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBz
dGQ6Om1pbihzaXplLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICBHUmVmUHRyPFNvdXBC
dWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZ
X1RBS0UsIHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSksIGJ1ZmZlclNp
emUpKTsKKyAgICBEYXRhIGRhdGE7CisgICAgZ3NzaXplIGJ5dGVzUmVhZDsKKyAgICBzaXplX3Qg
cGVuZGluZ0J5dGVzVG9SZWFkID0gc2l6ZTsKKyAgICBzaXplX3QgYnl0ZXNUb1JlYWQgPSBidWZm
ZXJTaXplOworICAgIGRvIHsKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCisg
ICAgICAgIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQobV9pbnB1dFN0cmVhbS5nZXQo
KSwgY29uc3RfY2FzdDxjaGFyKj4ocmVhZEJ1ZmZlci0+ZGF0YSksIGJ5dGVzVG9SZWFkLCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSAtMSkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgLTEpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFieXRlc1JlYWQpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBBU1NFUlQoYnl0ZXNSZWFkID4gMCk7CisgICAgICAgIGZpbGxEYXRhRnJvbVJlYWRC
dWZmZXIocmVhZEJ1ZmZlci5nZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQpLCBk
YXRhKTsKKworICAgICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBzaXplIC0gZGF0YS5zaXplKCk7
CisgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RkOjptaW4ocGVuZGluZ0J5dGVzVG9SZWFkLCByZWFk
QnVmZmVyLT5sZW5ndGgpOworICAgIH0gd2hpbGUgKHBlbmRpbmdCeXRlc1RvUmVhZCk7CisKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcihkYXRhLCAwKTsKK30KKworc3RydWN0IFdyaXRlQXN5bmNEYXRh
IHsKKyAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsOworICAgIEdSZWZQdHI8U291cEJ1ZmZl
cj4gYnVmZmVyOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlv
bkhhbmRsZXI7Cit9OworCitzdGF0aWMgdm9pZCBvdXRwdXRTdHJlYW1Xcml0ZVJlYWR5Q2FsbGJh
Y2soR091dHB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV3JpdGVBc3lu
Y0RhdGEqIGFzeW5jRGF0YSkKK3sKKyAgICBnc3NpemUgYnl0ZXNXcml0dGVuID0gZ19vdXRwdXRf
c3RyZWFtX3dyaXRlX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwgbnVsbHB0cik7CisgICAgaWYgKGJ5
dGVzV3JpdHRlbiA9PSAtMSkgeworICAgICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVy
KC0xKTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGdzc2l6ZSBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gYXN5bmNEYXRhLT5idWZmZXItPmxl
bmd0aCAtIGJ5dGVzV3JpdHRlbjsKKyAgICBpZiAoIXBlbmRpbmdCeXRlc1RvV3JpdGUpIHsKKyAg
ICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAgZGVsZXRlIGFz
eW5jRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzeW5jRGF0YS0+YnVmZmVy
ID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZmZXIoYXN5bmNEYXRhLT5idWZmZXIu
Z2V0KCksIGJ5dGVzV3JpdHRlbiwgcGVuZGluZ0J5dGVzVG9Xcml0ZSkpOworICAgIGdfb3V0cHV0
X3N0cmVhbV93cml0ZV9hc3luYyhzdHJlYW0sIGFzeW5jRGF0YS0+YnVmZmVyLT5kYXRhLCBwZW5k
aW5nQnl0ZXNUb1dyaXRlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFtV3JpdGVSZWFk
eUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKwordm9pZCBJT0NoYW5uZWw6OndyaXRlKHNpemVf
dCBvZmZzZXQsIGNvbnN0IERhdGEmIGRhdGEsIFdvcmtRdWV1ZSosIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKG1fb3V0cHV0
U3RyZWFtIHx8IG1faW9TdHJlYW0pOworCisgICAgR091dHB1dFN0cmVhbSogc3RyZWFtID0gbV9v
dXRwdXRTdHJlYW0gPyBtX291dHB1dFN0cmVhbS5nZXQoKSA6IGdfaW9fc3RyZWFtX2dldF9vdXRw
dXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1faW9TdHJlYW0uZ2V0KCkpKTsKKyAgICBXcml0ZUFzeW5j
RGF0YSogYXN5bmNEYXRhID0gbmV3IFdyaXRlQXN5bmNEYXRhIHsgdGhpcywgZGF0YS5zb3VwQnVm
ZmVyKCksIGNvbXBsZXRpb25IYW5kbGVyIH07CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZz
ZXQuCisgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jKHN0cmVhbSwgYXN5bmNEYXRhLT5i
dWZmZXItPmRhdGEsIGRhdGEuc2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFt
V3JpdGVSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0
d29ya0NhY2hlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlU291cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjODM3ZDkuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZVNvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKLQotI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUNvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIG5ldHdvcmtDYWNoZVN1YmRp
cmVjdG9yeSA9ICJXZWJLaXRDYWNoZSI7Ci0KLU5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRh
dGEoKQotICAgIDogbV9kYXRhKG51bGxwdHIpCi0gICAgLCBtX3NpemUoMCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1OZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpEYXRhKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotICAgIDogbV9kYXRhKGRhdGEpCi0gICAgLCBt
X3NpemUoc2l6ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1jb25zdCB1aW50OF90
KiBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpkYXRhKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIE5ldHdvcmtDYWNoZVN0
b3JhZ2U6OkRhdGE6OmlzTnVsbCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+
IE5ldHdvcmtDYWNoZVN0b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbkNhY2hl
UGF0aCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFN0cmluZyBuZXR3
b3JrQ2FjaGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGFwcGxpY2F0
aW9uQ2FjaGVQYXRoLCBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkpOwotICAgIGlmICghV2ViQ29y
ZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVBhdGgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+
KG5ldyBOZXR3b3JrQ2FjaGVTdG9yYWdlKG5ldHdvcmtDYWNoZVBhdGgpKTsKLX0KLQotTmV0d29y
a0NhY2hlU3RvcmFnZTo6TmV0d29ya0NhY2hlU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eVBhdGgpCi0gICAgOiBtX2RpcmVjdG9yeVBhdGgoZGlyZWN0b3J5UGF0aCkKLSAgICAsIG1fbWF4
aW11bVNpemUoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKLSAgICAsIG1fYWN0
aXZlUmV0cmlldmVPcGVyYXRpb25Db3VudCgwKQotewotICAgIGluaXRpYWxpemVLZXlGaWx0ZXIo
KTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjppbml0aWFsaXplS2V5RmlsdGVyKCkK
LXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6cmVtb3ZlRW50cnkoY29uc3QgTmV0d29y
a0NhY2hlS2V5JikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hSZXRy
aWV2ZU9wZXJhdGlvbihjb25zdCBSZXRyaWV2ZU9wZXJhdGlvbiYpCi17Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE5ldHdv
cmtDYWNoZVN0b3JhZ2U6OmRpc3BhdGNoUGVuZGluZ1JldHJpZXZlT3BlcmF0aW9ucygpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IE5ldHdvcmtDYWNoZUtl
eSYsIHVuc2lnbmVkIC8qIHByaW9yaXR5ICovLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5p
cXVlX3B0cjxFbnRyeT4pPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6c3RvcmUoY29uc3Qg
TmV0d29ya0NhY2hlS2V5JiwgY29uc3QgRW50cnkmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wg
c3VjY2Vzcyk+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxz
ZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6c2V0TWF4aW11bVNpemUoc2l6ZV90
IHNpemUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIG1fbWF4aW11bVNpemUgPSBzaXplOwotfQotCi12b2lkIE5ldHdvcmtDYWNo
ZVN0b3JhZ2U6OmNsZWFyKCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNo
ZSIpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9rZXlGaWx0ZXIuY2xlYXIoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNI
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2d0ay9OZXR3b3Jr
UHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05l
dHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKaW5kZXggZmEwYTk3MC4uNjg1NWUzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9j
ZXNzTWFpbkd0ay5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBs
YXRmb3JtRmluYWxpemUoKSBvdmVycmlkZQogICAgIHsKKyNpZiAhRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCiAgICAgICAgIGlmIChTb3VwQ2FjaGUqIHNvdXBDYWNoZSA9IFNvdXBOZXR3b3JrU2Vzc2lv
bjo6ZGVmYXVsdFNlc3Npb24oKS5jYWNoZSgpKSB7CiAgICAgICAgICAgICBzb3VwX2NhY2hlX2Zs
dXNoKHNvdXBDYWNoZSk7CiAgICAgICAgICAgICBzb3VwX2NhY2hlX2R1bXAoc291cENhY2hlKTsK
ICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IDUx
NzkzMTEuLjYyZWZlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAK
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVhci5oIgogI2lu
Y2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCisjaWYgIUVOQUJMRShORVRXT1JL
X0NBQ0hFKQogc3RhdGljIHVpbnQ2NF90IGdldENhY2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSog
Y2FjaGUpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsKQEAgLTU1LDYgKzU3LDcgQEAgc3RhdGljIHVp
bnQ2NF90IGdldENhY2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSogY2FjaGUpCiAKICAgICByZXR1
cm4gV2ViQ29yZTo6Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNhY2hlRGlyLmdldCgpKTsKIH0K
KyNlbmRpZgogCiBzdGF0aWMgdWludDY0X3QgZ2V0TWVtb3J5U2l6ZSgpCiB7CkBAIC04Myw2ICs4
NiwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdl
ZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmRpc2tD
YWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpOworICAgIG1fZGlza0NhY2hlRGlyZWN0b3J5ID0gcGFy
YW1ldGVycy5kaXNrQ2FjaGVEaXJlY3Rvcnk7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisg
ICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZyk7
CisjZWxzZQogICAgIEdSZWZQdHI8U291cENhY2hlPiBzb3VwQ2FjaGUgPSBhZG9wdEdSZWYoc291
cF9jYWNoZV9uZXcocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkudXRmOCgpLmRhdGEoKSwg
U09VUF9DQUNIRV9TSU5HTEVfVVNFUikpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVs
dFNlc3Npb24oKS5zZXRDYWNoZShzb3VwQ2FjaGUuZ2V0KCkpOwogICAgIC8vIFNldCBhbiBpbml0
aWFsIGh1Z2UgbWF4X3NpemUgZm9yIHRoZSBTb3VwQ2FjaGUgc28gdGhlIGNhbGwgdG8gc291cF9j
YWNoZV9sb2FkKCkgd29uJ3QgZXZpY3QgYW55IGNhY2hlZApAQCAtOTEsNiArOTgsNyBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXplKHNvdXBDYWNo
ZS5nZXQoKSwgR19NQVhVSU5UKTsKICAgICBzb3VwX2NhY2hlX2xvYWQoc291cENhY2hlLmdldCgp
KTsKICAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShzb3VwQ2FjaGUuZ2V0KCksIGluaXRpYWxN
YXhTaXplKTsKKyNlbmRpZgogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyPigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlUGF0aCwKQEAgLTExNSwxNiArMTIzLDI2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgdW5z
aWduZWQgbG9uZyB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25lZCBsb25n
IHVybENhY2hlRGlza0NhcGFjaXR5ID0gMDsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQor
ICAgIHVpbnQ2NF90IGRpc2tGcmVlU2l6ZSA9IFdlYkNvcmU6OmdldFZvbHVtZUZyZWVTaXplRm9y
UGF0aChtX2Rpc2tDYWNoZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKSAvIDEwMjQgLyAxMDI0Owor
I2Vsc2UKICAgICBTb3VwQ2FjaGUqIGNhY2hlID0gU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0
U2Vzc2lvbigpLmNhY2hlKCk7CiAgICAgdWludDY0X3QgZGlza0ZyZWVTaXplID0gZ2V0Q2FjaGVE
aXNrRnJlZVNpemUoY2FjaGUpIC8gMTAyNCAvIDEwMjQ7CisjZW5kaWYKIAogICAgIHVpbnQ2NF90
IG1lbVNpemUgPSBnZXRNZW1vcnlTaXplKCk7CiAgICAgY2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNo
ZU1vZGVsLCBtZW1TaXplLCBkaXNrRnJlZVNpemUsCiAgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0
eSwgY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBkZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsLAogICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSwgdXJsQ2Fj
aGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogCisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCisgICAgYXV0byYgbmV0d29ya0NhY2hlID0gTmV0d29ya0NhY2hlOjpzaW5n
bGV0b24oKTsKKyAgICBpZiAobmV0d29ya0NhY2hlLmlzRW5hYmxlZCgpKQorICAgICAgICBuZXR3
b3JrQ2FjaGUuc2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworI2Vsc2UKICAgICBp
ZiAodXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPiBzb3VwX2NhY2hlX2dldF9tYXhfc2l6ZShjYWNoZSkp
CiAgICAgICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXplKGNhY2hlLCB1cmxDYWNoZURpc2tDYXBh
Y2l0eSk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJy
b3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQpAQCAtMTQ4LDcgKzE2NiwxMSBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFy
KQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jazo6dGltZV9wb2ludCAvKiBtb2RpZmllZFNpbmNlICovLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IC8qIGNvbXBsZXRpb25IYW5kbGVyICovKQogewogICAgIC8vIEZJWE1FOiBGaW5kIGEg
d2F5IHRvIG9ubHkgY2xlYXIgYSBwYXJ0IG9mIHRoZSBjYWNoZSBiYXNlZCBvbiB0aGUgZGF0ZS4K
KyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigp
LmNsZWFyKCk7CisjZWxzZQogICAgIHNvdXBfY2FjaGVfY2xlYXIoU291cE5ldHdvcmtTZXNzaW9u
OjpkZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCkpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXgg
YjAyZTk0Ny4uNDg1YTlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE4LDcgKzE4
LDggQEAgc2V0KFdlYktpdDJfVVNFX1BSRUZJWF9IRUFERVIgT04pCiBsaXN0KEFQUEVORCBXZWJL
aXQyX1NPVVJDRVMKICAgICBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vzc01haW5H
dGsuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291
cC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAK
KyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAog
CiAgICAgTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvY29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcu
aAppbmRleCBiYzlhYzI5Li4xNmRlYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9jb25m
aWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtODIsNyArODIsNyBAQAogI2Vu
ZGlmCiAKICNpZm5kZWYgRU5BQkxFX05FVFdPUktfQ0FDSEUKLSNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKSAmJiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKSAm
JiAoUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykpCiAjZGVmaW5lIEVOQUJMRV9ORVRX
T1JLX0NBQ0hFIDEKICNlbHNlCiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hFIDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251154</attachid>
            <date>2015-04-20 01:47:58 -0700</date>
            <delta_ts>2015-04-24 01:29:44 -0700</delta_ts>
            <desc>Another update</desc>
            <filename>wk2-network-cache-soup.diff</filename>
            <type>text/plain</type>
            <size>35097</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NWIxZTExLi4zZDVmNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBOZXR3b3Jr
UHJvY2VzcyBkaXNrIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDM4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbGxvdyB0byBjcmVhdGUgYSBHUmVmUHRyIGZvciBTb3VwQnVmZmVyLiBFdmVu
IHRob3VnaCBTb3VwQnVmZmVyCisgICAgICAgIGlzIG5vdCBhIEdPYmplY3QgYW5kIGhhcyBjb3B5
L2ZyZWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgcmVmL3VucmVmLAorICAgICAgICBpdCdzIGludGVy
bmFsbHkgcmVmY291bnRlZCwgc28gd2UgY291bGQgdXNlIGNvcHkvZnJlZSBhcworICAgICAgICBy
ZWYvdW5yZWYuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmg6IEFkZGVkLgorCiAyMDE1LTA0LTE5ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBJbXByb3ZlIHRoZSBm
ZWF0dXJlLmpzb24gZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMjEwNTcyOC4u
MDFjNmM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE2MSw2ICsxNjEsNyBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29v
a2llU3RvcmFnZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NyZWRlbnRpYWxT
dG9yYWdlU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKKyAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VFcnJvclNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wMDlhZWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdSZWZQdHJTb3VwLmgiCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBTb3VwQnVmZmVyKiByZWZHUHRyKFNvdXBC
dWZmZXIqIHB0cikKK3sKKyAgICByZXR1cm4gcHRyID8gc291cF9idWZmZXJfY29weShwdHIpIDog
bnVsbHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoU291cEJ1ZmZlciogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIHNvdXBfYnVmZmVyX2ZyZWUocHRyKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9HUmVmUHRyU291cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjY5ZmRiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvR1JlZlB0clNvdXAuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdSZWZQdHJTb3VwX2gK
KyNkZWZpbmUgR1JlZlB0clNvdXBfaAorCisjaWYgVVNFKFNPVVApCisKKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBTb3VwQnVmZmVyKiByZWZHUHRyKFNvdXBCdWZmZXIqKTsK
K3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNvdXBCdWZmZXIqKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoU09VUCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0
CmluZGV4IDBiNmQ2ODcuLjNjZGU1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0xNjQsMTAg
KzE2NCwxNCBAQCBzZXQoTmV0d29ya1Byb2Nlc3NfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNz
L0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAKIAogICAgIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVCbG9iU3RvcmFnZS5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVD
b2RlcnMuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcAorICAg
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCisgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAKICkKIAogc2V0KFdlYktpdDJfU09VUkNFUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEx
MGEyMzMuLjI1ODU1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxNS0wNC0xNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NP
VVBdIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIE5ldHdvcmtQcm9jZXNzIGRpc2sgY2Fj
aGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzg3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgcGFydHMgb2YgdGhlIGRpc2sgY2FjaGUKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gZm9yIFNvdXAuIEl0J3MgbWFpbmx5IE5ldHdvcmtDYWNoZTo6RGF0
YSBhbmQKKyAgICAgICAgTmV0d29ya0NhY2hlOjpJT0NoYW5uZWwuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmR1bXBGaWxlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6c291cEJ1ZmZlcik6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhOjplbXB0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGF0YTo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6aXNO
dWxsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjphcHBseSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6c3VicmFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmNvbmNhdGVuYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpNYXBXcmFwcGVyOjp+TWFwV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6ZGVsZXRlTWFwV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6bWFwRmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6YWRvcHRN
YXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNvbXB1dGVTSEExKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpieXRlc0VxdWFsKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaDoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpJT0NoYW5uZWwpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6b3Blbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6ZmlsbERhdGFGcm9tUmVhZEJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6aW5wdXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFkKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5jKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpvdXRwdXRTdHJlYW1Xcml0ZVJlYWR5Q2FsbGJhY2spOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6d3JpdGUpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VTb3VwLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWluR3RrLmNwcDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hl
TW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUp
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorCiAyMDE1LTA0LTE4ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxODE2
NTYpOiBBbmltYXRlZCB0aWxlZCBsYXllcnMgYXJlIG1pc3NpbmcgY29udGVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5k
ZXggZmNkZWY2MC4uY2ZiNGU0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC01NSw2ICs1NSwxMyBAQCBDYWNoZSYg
c2luZ2xldG9uKCkKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKKyNpZiBQTEFURk9STShHVEsp
CitzdGF0aWMgdm9pZCBkdW1wRmlsZUNoYW5nZWQoQ2FjaGUqIGNhY2hlKQoreworICAgIGNhY2hl
LT5kdW1wQ29udGVudHNUb0ZpbGUoKTsKK30KKyNlbmRpZgorCiBib29sIENhY2hlOjppbml0aWFs
aXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBib29sIGVuYWJsZUVmZmljYWN5TG9nZ2luZykK
IHsKICAgICBtX3N0b3JhZ2UgPSBTdG9yYWdlOjpvcGVuKGNhY2hlUGF0aCk7CkBAIC03MSw2ICs3
OCwxNSBAQCBib29sIENhY2hlOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBi
b29sIGVuYWJsZUVmZmljYWN5TG9nZ2luZykKICAgICAgICAgfSk7CiAgICAgfQogI2VuZGlmCisj
aWYgUExBVEZPUk0oR1RLKQorICAgIC8vIFRyaWdnZXJzIHdpdGggInRvdWNoICRjYWNoZVBhdGgv
ZHVtcCIuCisgICAgaWYgKG1fc3RvcmFnZSkgeworICAgICAgICBDU3RyaW5nIGR1bXBGaWxlUGF0
aCA9IFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobV9zdG9yYWdlLT5iYXNlUGF0aCgpLCAiZHVtcCIpKTsKKyAgICAgICAg
R1JlZlB0cjxHRmlsZT4gZHVtcEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChk
dW1wRmlsZVBhdGguZGF0YSgpKSk7CisgICAgICAgIEdGaWxlTW9uaXRvciogbW9uaXRvciA9IGdf
ZmlsZV9tb25pdG9yX2ZpbGUoZHVtcEZpbGUuZ2V0KCksIEdfRklMRV9NT05JVE9SX05PTkUsIG51
bGxwdHIsIG51bGxwdHIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobW9uaXRv
ciwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGR1bXBGaWxlQ2hhbmdlZCksIHRoaXMpOworICAgIH0K
KyNlbmRpZgogCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgb3BlbmVk
IGNhY2hlIHN0b3JhZ2UsIHN1Y2Nlc3MgJWQiLCAhIW1fc3RvcmFnZSk7CiAgICAgcmV0dXJuICEh
bV9zdG9yYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCmluZGV4IDRlY2RlN2MuLjdi
MDNiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBv
c2l4LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8ZmNudGwu
aD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5j
bHVkZSA8d3RmL1NIQTEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAppbmRleCAxMGY1ZDA3Li44NGZjY2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgVVNFKFNP
VVApCisjaW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyU291cC5oPgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKQEAgLTEwNiw2ICsxMTAsOSBA
QCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgRGF0YShEaXNwYXRjaFB0cjxkaXNw
YXRjaF9kYXRhX3Q+LCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgorI2lmIFVT
RShTT1VQKQorICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBCYWNraW5nID0gQmFja2lu
Zzo6QnVmZmVyKTsKKyNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQogCkBAIC0xMjAsMTAgKzEyNywxNyBA
QCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZGlzcGF0Y2hfZGF0YV90IGRpc3Bh
dGNoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGF0Y2hEYXRhLmdldCgpOyB9CiAjZW5kaWYK
KworI2lmIFVTRShTT1VQKQorICAgIFNvdXBCdWZmZXIqIHNvdXBCdWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlci5nZXQoKTsgfQorI2VuZGlmCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIG11dGFibGUgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfZGF0YV90PiBtX2Rpc3BhdGNo
RGF0YTsKICNlbmRpZgorI2lmIFVTRShTT1VQKQorICAgIG11dGFibGUgR1JlZlB0cjxTb3VwQnVm
ZmVyPiBtX2J1ZmZlcjsKKyNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9kYXRh
IHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgYm9vbCBtX2lzTWFw
IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yNjg5MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCkBAIC0wLDAgKzEs
MTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKworI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxz
eXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZSB7CisKK0RhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpCisgICAgOiBtX2J1ZmZlcihhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZ
X0NPUFksIGRhdGEsIHNpemUpKSkKKyAgICAsIG1fc2l6ZShzaXplKQoreworfQorCitEYXRhOjpE
YXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIEJhY2tpbmcgYmFja2luZykKKyAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fc2l6ZShidWZmZXIgPyBidWZmZXItPmxlbmd0aCA6
IDApCisgICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBiYWNraW5nID09IEJhY2tpbmc6Ok1hcCkKK3sK
K30KKworRGF0YSBEYXRhOjplbXB0eSgpCit7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZm
ZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZX1RBS0UsIG51bGxwdHIs
IDApKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnVmZmVyKSB9OworfQorCitjb25zdCB1aW50
OF90KiBEYXRhOjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9idWZmZXIgPyByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci0+ZGF0YSkgOiBudWxscHRyOworfQor
Citib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2J1ZmZlcjsKK30K
KworYm9vbCBEYXRhOjphcHBseShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYmIGFwcGxpZXIpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NpemUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCk7Cit9CisK
K0RhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEdSZWZQdHI8
U291cEJ1ZmZlcj4gc3ViQnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZm
ZXIobV9idWZmZXIuZ2V0KCksIG9mZnNldCwgc2l6ZSkpOworICAgIHJldHVybiB7IFdURjo6bW92
ZShzdWJCdWZmZXIpIH07Cit9CisKK0RhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29u
c3QgRGF0YSYgYikKK3sKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGI7Cisg
ICAgaWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhOworCisgICAgc2l6ZV90IHNpemUg
PSBhLnNpemUoKSArIGIuc2l6ZSgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZ19tYWxsb2Moc2l6ZSkpOworICAgIG1lbWNweShkYXRhLCBhLnNvdXBCdWZmZXIo
KS0+ZGF0YSwgYS5zb3VwQnVmZmVyKCktPmxlbmd0aCk7CisgICAgbWVtY3B5KGRhdGEgKyBhLnNv
dXBCdWZmZXIoKS0+bGVuZ3RoLCBiLnNvdXBCdWZmZXIoKS0+ZGF0YSwgYi5zb3VwQnVmZmVyKCkt
Pmxlbmd0aCk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoc291
cF9idWZmZXJfbmV3X3Rha2UoZGF0YSwgc2l6ZSkpOworICAgIHJldHVybiB7IFdURjo6bW92ZShi
dWZmZXIpIH07Cit9CisKK3N0cnVjdCBNYXBXcmFwcGVyIHsKKyAgICB+TWFwV3JhcHBlcigpCisg
ICAgeworICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKKyAgICB9CisKKyAgICB2b2lkKiBtYXA7
CisgICAgc2l6ZV90IHNpemU7Cit9OworCitzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1h
cFdyYXBwZXIqIHdyYXBwZXIpCit7CisgICAgZGVsZXRlIHdyYXBwZXI7Cit9CisKK0RhdGEgbWFw
RmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworICAgIGlmICghc2l6
ZSkKKyAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CisKKyAgICB2b2lkKiBtYXAgPSBtbWFw
KG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOworICAg
IGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4g
RGF0YTo6YWRvcHRNYXAobWFwLCBzaXplKTsKK30KKworRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lk
KiBtYXAsIHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVChtYXApOworICAgIEFTU0VSVChtYXAg
IT0gTUFQX0ZBSUxFRCk7CisgICAgTWFwV3JhcHBlciogd3JhcHBlciA9IG5ldyBNYXBXcmFwcGVy
IHsgbWFwLCBzaXplIH07CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9wdEdS
ZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIobWFwLCBzaXplLCB3cmFwcGVyLCByZWludGVy
cHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZWxldGVNYXBXcmFwcGVyKSkpOworICAgIHJldHVy
biB7IFdURjo6bW92ZShidWZmZXIpLCBEYXRhOjpCYWNraW5nOjpNYXAgfTsKK30KKworRGF0YSBt
YXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JE
T05MWSwgMCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBzdHJ1
Y3Qgc3RhdCBzdGF0OworICAgIGlmIChmc3RhdChmZCwgJnN0YXQpIDwgMCkgeworICAgICAgICBj
bG9zZShmZCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHNpemVfdCBzaXplID0g
c3RhdC5zdF9zaXplOworICAgIGF1dG8gZGF0YSA9IG1hcEZpbGUoZmQsIDAsIHNpemUpOworICAg
IGNsb3NlKGZkKTsKKworICAgIHJldHVybiBkYXRhOworfQorCitTSEExOjpEaWdlc3QgY29tcHV0
ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSkKK3sKKyAgICBTSEExIHNoYTE7CisgICAgZGF0YS5hcHBs
eShbJnNoYTFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIHNo
YTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOwor
ICAgIFNIQTE6OkRpZ2VzdCBkaWdlc3Q7CisgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwor
ICAgIHJldHVybiBkaWdlc3Q7Cit9CisKK2Jvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiBhLCBj
b25zdCBEYXRhJiBiKQoreworICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi5kYXRhKCksIGEu
c2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oCmluZGV4IGM4YzZiMTcuLjdj
MDQyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1
ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAor
I2lmIFVTRShTT1VQKQorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCkBAIC02Myw2
ICs2NywxMSBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIERpc3BhdGNoUHRy
PGRpc3BhdGNoX2lvX3Q+IG1fZGlzcGF0Y2hJTzsKICNlbmRpZgorI2lmIFVTRShTT1VQKQorICAg
IEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOworICAgIEdSZWZQdHI8R091dHB1
dFN0cmVhbT4gbV9vdXRwdXRTdHJlYW07CisgICAgR1JlZlB0cjxHRmlsZUlPU3RyZWFtPiBtX2lv
U3RyZWFtOworI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzI2MGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWxTb3VwLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlSU9DaGFubmVsLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkK
KworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitzdGF0aWMgY29uc3Qgc2l6ZV90
IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA0MDk2OworCitJT0NoYW5uZWw6OklPQ2hhbm5lbChj
b25zdCBTdHJpbmcmIGZpbGVQYXRoLCBUeXBlIHR5cGUpCisgICAgOiBtX3BhdGgoZmlsZVBhdGgp
CisgICAgLCBtX3R5cGUodHlwZSkKK3sKKyAgICBhdXRvIHBhdGggPSBXZWJDb3JlOjpmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpOworICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChwYXRoLmRhdGEoKSkpOworICAgIHN3aXRjaCAo
bV90eXBlKSB7CisgICAgY2FzZSBUeXBlOjpDcmVhdGU6CisgICAgICAgIGdfZmlsZV9kZWxldGUo
ZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fb3V0cHV0U3RyZWFtID0g
YWRvcHRHUmVmKEdfT1VUUFVUX1NUUkVBTShnX2ZpbGVfY3JlYXRlKGZpbGUuZ2V0KCksIHN0YXRp
Y19jYXN0PEdGaWxlQ3JlYXRlRmxhZ3M+KEdfRklMRV9DUkVBVEVfUFJJVkFURSksIG51bGxwdHIs
IG51bGxwdHIpKSk7CisgICAgICAgIEFTU0VSVChtX291dHB1dFN0cmVhbSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVHlwZTo6V3JpdGU6IHsKKyAgICAgICAgbV9pb1N0cmVhbSA9IGFkb3B0
R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikp
OworICAgICAgICBBU1NFUlQobV9pb1N0cmVhbSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFR5cGU6OlJlYWQ6CisgICAgICAgIG1faW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoR19J
TlBVVF9TVFJFQU0oZ19maWxlX3JlYWQoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpKTsK
KyAgICAgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK1JlZjxJT0NoYW5uZWw+IElPQ2hhbm5lbDo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBJT0NoYW5uZWw6OlR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJT0No
YW5uZWwoZmlsZVBhdGgsIHR5cGUpKTsKK30KKworc3RhdGljIHZvaWQgZmlsbERhdGFGcm9tUmVh
ZEJ1ZmZlcihTb3VwQnVmZmVyKiByZWFkQnVmZmVyLCBzaXplX3Qgc2l6ZSwgRGF0YSYgZGF0YSkK
K3sKKyAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IGJ1ZmZlcjsKKyAgICBpZiAoc2l6ZSAhPSByZWFk
QnVmZmVyLT5sZW5ndGgpIHsKKyAgICAgICAgLy8gVGhlIHN1YmJ1ZmZlciBkb2VzIG5vdCBjb3B5
IHRoZSBkYXRhLgorICAgICAgICBidWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3N1
YmJ1ZmZlcihyZWFkQnVmZmVyLCAwLCBzaXplKSk7CisgICAgfSBlbHNlCisgICAgICAgIGJ1ZmZl
ciA9IHJlYWRCdWZmZXI7CisKKyAgICBpZiAoZGF0YS5pc051bGwoKSkgeworICAgICAgICAvLyBG
aXJzdCBjaHVuaywgd2UgbmVlZCB0byBmb3JjZSB0aGUgZGF0YSB0byBiZSBjb3BpZWQuCisgICAg
ICAgIGRhdGEgPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0
YSksIHNpemUgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBEYXRhIGRhdGFSZWFkKFdURjo6bW92
ZShidWZmZXIpKTsKKyAgICAgICAgLy8gQ29uY2F0ZW5hdGUgd2lsbCBjb3B5IHRoZSBkYXRhLgor
ICAgICAgICBkYXRhID0gY29uY2F0ZW5hdGUoZGF0YSwgZGF0YVJlYWQpOworICAgIH0KK30KKwor
c3RydWN0IFJlYWRBc3luY0RhdGEgeworICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWw7Cisg
ICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXI7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkOwor
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5k
bGVyOworICAgIERhdGEgZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIGlucHV0U3RyZWFtUmVhZFJl
YWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBS
ZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEpCit7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5w
dXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0cmVhbSwgcmVzdWx0LCBudWxscHRyKTsKKyAgICBpZiAo
Ynl0ZXNSZWFkID09IC0xKSB7CisgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRsZXIo
YXN5bmNEYXRhLT5kYXRhLCAtMSk7CisgICAgICAgIGRlbGV0ZSBhc3luY0RhdGE7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWJ5dGVzUmVhZCkgeworICAgICAgICBhc3luY0Rh
dGEtPmNvbXBsZXRpb25IYW5kbGVyKGFzeW5jRGF0YS0+ZGF0YSwgMCk7CisgICAgICAgIGRlbGV0
ZSBhc3luY0RhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoYnl0ZXNS
ZWFkID4gMCk7CisgICAgZmlsbERhdGFGcm9tUmVhZEJ1ZmZlcihhc3luY0RhdGEtPmJ1ZmZlci5n
ZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQpLCBhc3luY0RhdGEtPmRhdGEpOwor
CisgICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvUmVhZCA9IGFzeW5jRGF0YS0+Ynl0ZXNUb1JlYWQg
LSBhc3luY0RhdGEtPmRhdGEuc2l6ZSgpOworICAgIGlmICghcGVuZGluZ0J5dGVzVG9SZWFkKSB7
CisgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoYXN5bmNEYXRhLT5kYXRhLCAw
KTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IHN0ZDo6bWluKHBlbmRpbmdCeXRlc1RvUmVhZCwgYXN5
bmNEYXRhLT5idWZmZXItPmxlbmd0aCk7CisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhz
dHJlYW0sIGNvbnN0X2Nhc3Q8Y2hhcio+KGFzeW5jRGF0YS0+YnVmZmVyLT5kYXRhKSwgYnl0ZXNU
b1JlYWQsIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwKKyAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihpbnB1dFN0cmVhbVJlYWRSZWFkeUNhbGxiYWNrKSwg
YXN5bmNEYXRhKTsKK30KKwordm9pZCBJT0NoYW5uZWw6OnJlYWQoc2l6ZV90IG9mZnNldCwgc2l6
ZV90IHNpemUsIFdvcmtRdWV1ZSosIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGludCBlcnJv
cik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsKKwor
ICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RkOjptaW4oc2l6ZSwgZ0RlZmF1bHRSZWFkQnVmZmVy
U2l6ZSk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoc291cF9i
dWZmZXJfbmV3KFNPVVBfTUVNT1JZX1RBS0UsIHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhi
dWZmZXJTaXplKSksIGJ1ZmZlclNpemUpKTsKKyAgICBSZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEg
PSBuZXcgUmVhZEFzeW5jRGF0YSB7IHRoaXMsIGJ1ZmZlci5nZXQoKSwgc2l6ZSwgY29tcGxldGlv
bkhhbmRsZXIsIHsgfSB9OworCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCisgICAg
Z19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBjb25zdF9jYXN0
PGNoYXIqPihidWZmZXItPmRhdGEpLCBidWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51
bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oaW5w
dXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayksIGFzeW5jRGF0YSk7Cit9CisKKy8vIEZJWE1FOiBJ
dCB3b3VsZCBiZSBiZXR0ZXIgdG8gZG8gd2l0aG91dCB0aGlzLgordm9pZCBJT0NoYW5uZWw6OnJl
YWRTeW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihz
aXplLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHJl
YWRCdWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3KFNPVVBfTUVNT1JZX1RBS0UsIHN0
YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSksIGJ1ZmZlclNpemUpKTsKKyAg
ICBEYXRhIGRhdGE7CisgICAgZ3NzaXplIGJ5dGVzUmVhZDsKKyAgICBzaXplX3QgcGVuZGluZ0J5
dGVzVG9SZWFkID0gc2l6ZTsKKyAgICBzaXplX3QgYnl0ZXNUb1JlYWQgPSBidWZmZXJTaXplOwor
ICAgIGRvIHsKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCisgICAgICAgIGJ5
dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQobV9pbnB1dFN0cmVhbS5nZXQoKSwgY29uc3Rf
Y2FzdDxjaGFyKj4ocmVhZEJ1ZmZlci0+ZGF0YSksIGJ5dGVzVG9SZWFkLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSAtMSkgeworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZGF0YSwgLTEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFieXRlc1JlYWQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBB
U1NFUlQoYnl0ZXNSZWFkID4gMCk7CisgICAgICAgIGZpbGxEYXRhRnJvbVJlYWRCdWZmZXIocmVh
ZEJ1ZmZlci5nZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQpLCBkYXRhKTsKKwor
ICAgICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBzaXplIC0gZGF0YS5zaXplKCk7CisgICAgICAg
IGJ5dGVzVG9SZWFkID0gc3RkOjptaW4ocGVuZGluZ0J5dGVzVG9SZWFkLCByZWFkQnVmZmVyLT5s
ZW5ndGgpOworICAgIH0gd2hpbGUgKHBlbmRpbmdCeXRlc1RvUmVhZCk7CisKKyAgICBjb21wbGV0
aW9uSGFuZGxlcihkYXRhLCAwKTsKK30KKworc3RydWN0IFdyaXRlQXN5bmNEYXRhIHsKKyAgICBS
ZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsOworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVy
OworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXI7
Cit9OworCitzdGF0aWMgdm9pZCBvdXRwdXRTdHJlYW1Xcml0ZVJlYWR5Q2FsbGJhY2soR091dHB1
dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV3JpdGVBc3luY0RhdGEqIGFz
eW5jRGF0YSkKK3sKKyAgICBnc3NpemUgYnl0ZXNXcml0dGVuID0gZ19vdXRwdXRfc3RyZWFtX3dy
aXRlX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwgbnVsbHB0cik7CisgICAgaWYgKGJ5dGVzV3JpdHRl
biA9PSAtMSkgeworICAgICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKC0xKTsKKyAg
ICAgICAgZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdz
c2l6ZSBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gYXN5bmNEYXRhLT5idWZmZXItPmxlbmd0aCAtIGJ5
dGVzV3JpdHRlbjsKKyAgICBpZiAoIXBlbmRpbmdCeXRlc1RvV3JpdGUpIHsKKyAgICAgICAgYXN5
bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0YTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzeW5jRGF0YS0+YnVmZmVyID0gYWRvcHRH
UmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZmZXIoYXN5bmNEYXRhLT5idWZmZXIuZ2V0KCksIGJ5
dGVzV3JpdHRlbiwgcGVuZGluZ0J5dGVzVG9Xcml0ZSkpOworICAgIGdfb3V0cHV0X3N0cmVhbV93
cml0ZV9hc3luYyhzdHJlYW0sIGFzeW5jRGF0YS0+YnVmZmVyLT5kYXRhLCBwZW5kaW5nQnl0ZXNU
b1dyaXRlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFtV3JpdGVSZWFkeUNhbGxiYWNr
KSwgYXN5bmNEYXRhKTsKK30KKwordm9pZCBJT0NoYW5uZWw6OndyaXRlKHNpemVfdCBvZmZzZXQs
IGNvbnN0IERhdGEmIGRhdGEsIFdvcmtRdWV1ZSosIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVy
cm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKG1fb3V0cHV0U3RyZWFtIHx8
IG1faW9TdHJlYW0pOworCisgICAgR091dHB1dFN0cmVhbSogc3RyZWFtID0gbV9vdXRwdXRTdHJl
YW0gPyBtX291dHB1dFN0cmVhbS5nZXQoKSA6IGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFt
KEdfSU9fU1RSRUFNKG1faW9TdHJlYW0uZ2V0KCkpKTsKKyAgICBXcml0ZUFzeW5jRGF0YSogYXN5
bmNEYXRhID0gbmV3IFdyaXRlQXN5bmNEYXRhIHsgdGhpcywgZGF0YS5zb3VwQnVmZmVyKCksIGNv
bXBsZXRpb25IYW5kbGVyIH07CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCisgICAg
Z19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jKHN0cmVhbSwgYXN5bmNEYXRhLT5idWZmZXItPmRh
dGEsIGRhdGEuc2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFtV3JpdGVSZWFk
eUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291cC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291
cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjODM3ZDkuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZVNvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVy
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeSA9
ICJXZWJLaXRDYWNoZSI7Ci0KLU5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRhdGEoKQotICAg
IDogbV9kYXRhKG51bGxwdHIpCi0gICAgLCBtX3NpemUoMCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1OZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQotICAgIDogbV9kYXRhKGRhdGEpCi0gICAgLCBtX3NpemUoc2l6
ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1jb25zdCB1aW50OF90KiBOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpEYXRhOjpkYXRhKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRh
dGE6OmlzTnVsbCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IE5ldHdvcmtD
YWNoZVN0b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbkNhY2hlUGF0aCkKLXsK
LSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFN0cmluZyBuZXR3b3JrQ2FjaGVQ
YXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGFwcGxpY2F0aW9uQ2FjaGVQ
YXRoLCBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkpOwotICAgIGlmICghV2ViQ29yZTo6bWFrZUFs
bERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVBhdGgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+KG5ldyBOZXR3
b3JrQ2FjaGVTdG9yYWdlKG5ldHdvcmtDYWNoZVBhdGgpKTsKLX0KLQotTmV0d29ya0NhY2hlU3Rv
cmFnZTo6TmV0d29ya0NhY2hlU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCi0g
ICAgOiBtX2RpcmVjdG9yeVBhdGgoZGlyZWN0b3J5UGF0aCkKLSAgICAsIG1fbWF4aW11bVNpemUo
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKLSAgICAsIG1fYWN0aXZlUmV0cmll
dmVPcGVyYXRpb25Db3VudCgwKQotewotICAgIGluaXRpYWxpemVLZXlGaWx0ZXIoKTsKLX0KLQot
dm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjppbml0aWFsaXplS2V5RmlsdGVyKCkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6cmVtb3ZlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlS2V5
JikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hSZXRyaWV2ZU9wZXJh
dGlvbihjb25zdCBSZXRyaWV2ZU9wZXJhdGlvbiYpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE5ldHdvcmtDYWNoZVN0
b3JhZ2U6OmRpc3BhdGNoUGVuZGluZ1JldHJpZXZlT3BlcmF0aW9ucygpCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE5l
dHdvcmtDYWNoZVN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIHVuc2ln
bmVkIC8qIHByaW9yaXR5ICovLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVlX3B0cjxF
bnRyeT4pPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0
cik7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6c3RvcmUoY29uc3QgTmV0d29ya0Nh
Y2hlS2V5JiwgY29uc3QgRW50cnkmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci19Ci0K
LXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6c2V0TWF4aW11bVNpemUoc2l6ZV90IHNpemUpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIG1fbWF4aW11bVNpemUgPSBzaXplOwotfQotCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6
OmNsZWFyKCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIExPRyhOZXR3
b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9rZXlGaWx0ZXIuY2xlYXIoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2d0ay9OZXR3b3JrUHJvY2Vzc01h
aW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9j
ZXNzTWFpbkd0ay5jcHAKaW5kZXggZmEwYTk3MC4uNjg1NWUzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0
ay5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBsYXRmb3JtRmlu
YWxpemUoKSBvdmVycmlkZQogICAgIHsKKyNpZiAhRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAg
ICAgIGlmIChTb3VwQ2FjaGUqIHNvdXBDYWNoZSA9IFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVs
dFNlc3Npb24oKS5jYWNoZSgpKSB7CiAgICAgICAgICAgICBzb3VwX2NhY2hlX2ZsdXNoKHNvdXBD
YWNoZSk7CiAgICAgICAgICAgICBzb3VwX2NhY2hlX2R1bXAoc291cENhY2hlKTsKICAgICAgICAg
fQorI2VuZGlmCiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IDUxNzkzMTEuLjYy
ZWZlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIgogI2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVhci5oIgogI2luY2x1ZGUgIldl
YkNvb2tpZU1hbmFnZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCisjaWYgIUVOQUJMRShORVRXT1JLX0NBQ0hFKQog
c3RhdGljIHVpbnQ2NF90IGdldENhY2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSogY2FjaGUpCiB7
CiAgICAgQVNTRVJUKGNhY2hlKTsKQEAgLTU1LDYgKzU3LDcgQEAgc3RhdGljIHVpbnQ2NF90IGdl
dENhY2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSogY2FjaGUpCiAKICAgICByZXR1cm4gV2ViQ29y
ZTo6Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNhY2hlRGlyLmdldCgpKTsKIH0KKyNlbmRpZgog
CiBzdGF0aWMgdWludDY0X3QgZ2V0TWVtb3J5U2l6ZSgpCiB7CkBAIC04Myw2ICs4NiwxMCBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVj
dG9yeS5pc0VtcHR5KCkpOworICAgIG1fZGlza0NhY2hlRGlyZWN0b3J5ID0gcGFyYW1ldGVycy5k
aXNrQ2FjaGVEaXJlY3Rvcnk7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgTmV0d29y
a0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZyk7CisjZWxzZQog
ICAgIEdSZWZQdHI8U291cENhY2hlPiBzb3VwQ2FjaGUgPSBhZG9wdEdSZWYoc291cF9jYWNoZV9u
ZXcocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkudXRmOCgpLmRhdGEoKSwgU09VUF9DQUNI
RV9TSU5HTEVfVVNFUikpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24o
KS5zZXRDYWNoZShzb3VwQ2FjaGUuZ2V0KCkpOwogICAgIC8vIFNldCBhbiBpbml0aWFsIGh1Z2Ug
bWF4X3NpemUgZm9yIHRoZSBTb3VwQ2FjaGUgc28gdGhlIGNhbGwgdG8gc291cF9jYWNoZV9sb2Fk
KCkgd29uJ3QgZXZpY3QgYW55IGNhY2hlZApAQCAtOTEsNiArOTgsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aQogICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXplKHNvdXBDYWNoZS5nZXQoKSwg
R19NQVhVSU5UKTsKICAgICBzb3VwX2NhY2hlX2xvYWQoc291cENhY2hlLmdldCgpKTsKICAgICBz
b3VwX2NhY2hlX3NldF9tYXhfc2l6ZShzb3VwQ2FjaGUuZ2V0KCksIGluaXRpYWxNYXhTaXplKTsK
KyNlbmRpZgogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0
aC5pc0VtcHR5KCkpIHsKICAgICAgICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5z
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlUGF0aCwKQEAgLTExNSwxNiArMTIzLDI2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRm
b3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgdW5zaWduZWQgbG9u
ZyB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25lZCBsb25nIHVybENhY2hl
RGlza0NhcGFjaXR5ID0gMDsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorICAgIHVpbnQ2
NF90IGRpc2tGcmVlU2l6ZSA9IFdlYkNvcmU6OmdldFZvbHVtZUZyZWVTaXplRm9yUGF0aChtX2Rp
c2tDYWNoZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKSAvIDEwMjQgLyAxMDI0OworI2Vsc2UKICAg
ICBTb3VwQ2FjaGUqIGNhY2hlID0gU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigp
LmNhY2hlKCk7CiAgICAgdWludDY0X3QgZGlza0ZyZWVTaXplID0gZ2V0Q2FjaGVEaXNrRnJlZVNp
emUoY2FjaGUpIC8gMTAyNCAvIDEwMjQ7CisjZW5kaWYKIAogICAgIHVpbnQ2NF90IG1lbVNpemUg
PSBnZXRNZW1vcnlTaXplKCk7CiAgICAgY2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNoZU1vZGVsLCBt
ZW1TaXplLCBkaXNrRnJlZVNpemUsCiAgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSwgY2FjaGVN
aW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBkZWFkRGVjb2RlZERhdGFEZWxl
dGlvbkludGVydmFsLAogICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSwgdXJsQ2FjaGVNZW1vcnlD
YXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCisgICAgYXV0byYgbmV0d29ya0NhY2hlID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKTsK
KyAgICBpZiAobmV0d29ya0NhY2hlLmlzRW5hYmxlZCgpKQorICAgICAgICBuZXR3b3JrQ2FjaGUu
c2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworI2Vsc2UKICAgICBpZiAodXJsQ2Fj
aGVEaXNrQ2FwYWNpdHkgPiBzb3VwX2NhY2hlX2dldF9tYXhfc2l6ZShjYWNoZSkpCiAgICAgICAg
IHNvdXBfY2FjaGVfc2V0X21heF9zaXplKGNhY2hlLCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wg
aWdub3JlVExTRXJyb3JzKQpAQCAtMTQ4LDcgKzE2NiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
dGltZV9wb2ludCAvKiBtb2RpZmllZFNpbmNlICovLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IC8q
IGNvbXBsZXRpb25IYW5kbGVyICovKQogewogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIG9u
bHkgY2xlYXIgYSBwYXJ0IG9mIHRoZSBjYWNoZSBiYXNlZCBvbiB0aGUgZGF0ZS4KKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKKyAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmNsZWFyKCk7
CisjZWxzZQogICAgIHNvdXBfY2FjaGVfY2xlYXIoU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0
U2Vzc2lvbigpLmNhY2hlKCkpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtVGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYjAyZTk0Ny4u
NDg1YTlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE4LDcgKzE4LDggQEAgc2V0
KFdlYktpdDJfVVNFX1BSRUZJWF9IRUFERVIgT04pCiBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsuY3BwCiAK
LSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291cC5jcHAKKyAg
ICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKKyAgICBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAogCiAgICAgTmV0
d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvY29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAppbmRleCBi
YzlhYzI5Li4xNmRlYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtODIsNyArODIsNyBAQAogI2VuZGlmCiAKICNp
Zm5kZWYgRU5BQkxFX05FVFdPUktfQ0FDSEUKLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKSAm
JiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKSAmJiAoUExBVEZP
Uk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykpCiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hF
IDEKICNlbHNlCiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hFIDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251543</attachid>
            <date>2015-04-24 01:29:44 -0700</date>
            <delta_ts>2015-04-24 09:13:27 -0700</delta_ts>
            <desc>Updated to use fast malloc/free</desc>
            <filename>wk2-disk-cache-soup.diff</filename>
            <type>text/plain</type>
            <size>35368</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMDc4MTdhLi45ZjJkNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBOZXR3b3Jr
UHJvY2VzcyBkaXNrIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDM4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbGxvdyB0byBjcmVhdGUgYSBHUmVmUHRyIGZvciBTb3VwQnVmZmVyLiBFdmVu
IHRob3VnaCBTb3VwQnVmZmVyCisgICAgICAgIGlzIG5vdCBhIEdPYmplY3QgYW5kIGhhcyBjb3B5
L2ZyZWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgcmVmL3VucmVmLAorICAgICAgICBpdCdzIGludGVy
bmFsbHkgcmVmY291bnRlZCwgc28gd2UgY291bGQgdXNlIGNvcHkvZnJlZSBhcworICAgICAgICBy
ZWYvdW5yZWYuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmg6IEFkZGVkLgorCiAyMDE1LTA0LTI0ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gVXNl
IGEgd2Via2l0IHN1YmRpcmVjdG9yeSBmb3IgdGhlIGRpc2sgY2FjaGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKaW5kZXggYjgxYzlkNS4uYjc0MzYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UKQEAgLTE2MCw2ICsxNjAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL0NyZWRlbnRpYWxTdG9yYWdlU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvRE5TU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNv
dXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNv
dXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDlhZWMxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmNwcApA
QCAtMCwwICsxLDM1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdSZWZQdHJTb3VwLmgiCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBT
b3VwQnVmZmVyKiByZWZHUHRyKFNvdXBCdWZmZXIqIHB0cikKK3sKKyAgICByZXR1cm4gcHRyID8g
c291cF9idWZmZXJfY29weShwdHIpIDogbnVsbHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoU291cEJ1ZmZlciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIHNvdXBf
YnVmZmVyX2ZyZWUocHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZmRiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuaApAQCAtMCwwICsx
LDM3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIEdSZWZQdHJTb3VwX2gKKyNkZWZpbmUgR1JlZlB0clNvdXBfaAorCisjaWYgVVNF
KFNPVVApCisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBTb3VwQnVmZmVy
KiByZWZHUHRyKFNvdXBCdWZmZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNvdXBC
dWZmZXIqKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoU09VUCkKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDBiNmQ2ODcuLjNjZGU1ZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NN
YWtlTGlzdHMudHh0CkBAIC0xNjQsMTAgKzE2NCwxNCBAQCBzZXQoTmV0d29ya1Byb2Nlc3NfU09V
UkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAK
IAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKyAgICBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCi0gICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEZWNvZGVyLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUVuY29kZXIuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnku
Y3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAorICAgIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCisgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKICkKIAogc2V0KFdlYktpdDJf
U09VUkNFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDkyMWU5NzMuLjdmZWU1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxNS0wNC0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9m
IE5ldHdvcmtQcm9jZXNzIGRpc2sgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0Mzg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgcGFydHMg
b2YgdGhlIGRpc2sgY2FjaGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIFNvdXAuIEl0J3Mg
bWFpbmx5IE5ldHdvcmtDYWNoZTo6RGF0YSBhbmQKKyAgICAgICAgTmV0d29ya0NhY2hlOjpJT0No
YW5uZWwuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OmR1bXBGaWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2Fj
aGU6OmluaXRpYWxpemUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUJsb2JTdG9yYWdlLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6c291
cEJ1ZmZlcik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YVNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjplbXB0eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6RGF0YTo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEYXRhOjphcHBseSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6
c3VicmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNvbmNhdGVuYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpNYXBXcmFwcGVyOjp+TWFwV3JhcHBlcik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVsZXRlTWFwV3JhcHBlcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6bWFwRmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGF0YTo6YWRvcHRNYXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OmNvbXB1dGVTSEExKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpieXRlc0Vx
dWFsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5u
ZWwuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5u
ZWxTb3VwLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFu
bmVsOjpJT0NoYW5uZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5l
bDo6b3Blbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZmlsbERhdGFGcm9tUmVh
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6aW5wdXRTdHJlYW1SZWFk
UmVhZHlDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVs
OjpyZWFkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRT
eW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpvdXRwdXRTdHJlYW1Xcml0ZVJl
YWR5Q2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6
d3JpdGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3Jh
Z2VTb3VwLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29y
a1Byb2Nlc3NNYWluR3RrLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUpOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgor
CiAyMDE1LTA0LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbU09VUF0gVXNlIGEgd2Via2l0IHN1YmRpcmVjdG9yeSBmb3IgdGhlIGRpc2sg
Y2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCmluZGV4IGIyOTI4ZmYuLmRhZTQ3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtNTUsNiAr
NTUsMTMgQEAgQ2FjaGUmIHNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCisj
aWYgUExBVEZPUk0oR1RLKQorc3RhdGljIHZvaWQgZHVtcEZpbGVDaGFuZ2VkKENhY2hlKiBjYWNo
ZSkKK3sKKyAgICBjYWNoZS0+ZHVtcENvbnRlbnRzVG9GaWxlKCk7Cit9CisjZW5kaWYKKwogYm9v
bCBDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVF
ZmZpY2FjeUxvZ2dpbmcpCiB7CiAgICAgbV9zdG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBh
dGgpOwpAQCAtNzEsNiArNzgsMTUgQEAgYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCiAgICAgICAgIH0pOwog
ICAgIH0KICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBUcmlnZ2VycyB3aXRoICJ0
b3VjaCAkY2FjaGVQYXRoL2R1bXAiLgorICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgQ1N0
cmluZyBkdW1wRmlsZVBhdGggPSBXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fc3RvcmFnZS0+YmFzZVBhdGgoKSwgImR1
bXAiKSk7CisgICAgICAgIEdSZWZQdHI8R0ZpbGU+IGR1bXBGaWxlID0gYWRvcHRHUmVmKGdfZmls
ZV9uZXdfZm9yX3BhdGgoZHVtcEZpbGVQYXRoLmRhdGEoKSkpOworICAgICAgICBHRmlsZU1vbml0
b3IqIG1vbml0b3IgPSBnX2ZpbGVfbW9uaXRvcl9maWxlKGR1bXBGaWxlLmdldCgpLCBHX0ZJTEVf
TU9OSVRPUl9OT05FLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1vbml0b3IsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhkdW1wRmlsZUNoYW5nZWQp
LCB0aGlzKTsKKyAgICB9CisjZW5kaWYKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29y
a1Byb2Nlc3MpIG9wZW5lZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2Up
OwogICAgIHJldHVybiAhIW1fc3RvcmFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcApp
bmRleCA0ZWNkZTdjLi43YjAzYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgor
I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggMTBmNWQw
Ny4uODRmY2NjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNvdXAuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCkBA
IC0xMDYsNiArMTEwLDkgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIERhdGEo
RGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfZGF0YV90PiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7
CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwg
QmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CisjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KIApAQCAt
MTIwLDEwICsxMjcsMTcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGRpc3Bh
dGNoX2RhdGFfdCBkaXNwYXRjaERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BhdGNoRGF0YS5n
ZXQoKTsgfQogI2VuZGlmCisKKyNpZiBVU0UoU09VUCkKKyAgICBTb3VwQnVmZmVyKiBzb3VwQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KKyNlbmRpZgogcHJpdmF0ZToK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRpc3BhdGNoX2Rh
dGFfdD4gbV9kaXNwYXRjaERhdGE7CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBtdXRhYmxl
IEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7CisjZW5kaWYKICAgICBtdXRhYmxlIGNvbnN0
IHVpbnQ4X3QqIG1fZGF0YSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9Owog
ICAgIGJvb2wgbV9pc01hcCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlNTA3MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3Vw
LmNwcApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEg
Uy5MCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVEYXRhLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgPGZjbnRs
Lmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQorICAgIDogbV9zaXplKHNpemUpCit7CisgICAgdWludDhfdCog
Y29waWVkRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKHNpemUpKTsKKyAg
ICBtZW1jcHkoY29waWVkRGF0YSwgZGF0YSwgc2l6ZSk7CisgICAgbV9idWZmZXIgPSBhZG9wdEdS
ZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoY29waWVkRGF0YSwgc2l6ZSwgY29waWVkRGF0
YSwgZmFzdEZyZWUpKTsKK30KKworRGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVm
ZmVyLCBCYWNraW5nIGJhY2tpbmcpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX3Np
emUoYnVmZmVyID8gYnVmZmVyLT5sZW5ndGggOiAwKQorICAgICwgbV9pc01hcChtX3NpemUgJiYg
YmFja2luZyA9PSBCYWNraW5nOjpNYXApCit7Cit9CisKK0RhdGEgRGF0YTo6ZW1wdHkoKQorewor
ICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25l
dyhTT1VQX01FTU9SWV9UQUtFLCBudWxscHRyLCAwKSk7CisgICAgcmV0dXJuIHsgV1RGOjptb3Zl
KGJ1ZmZlcikgfTsKK30KKworY29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fYnVmZmVyID8gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9i
dWZmZXItPmRhdGEpIDogbnVsbHB0cjsKK30KKworYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAor
eworICAgIHJldHVybiAhbV9idWZmZXI7Cit9CisKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mJiBhcHBsaWVyKSBjb25z
dAoreworICAgIGlmICghbV9zaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci0+ZGF0
YSksIG1fYnVmZmVyLT5sZW5ndGgpOworfQorCitEYXRhIERhdGE6OnN1YnJhbmdlKHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHN1YkJ1ZmZlciA9IGFkb3B0
R1JlZihzb3VwX2J1ZmZlcl9uZXdfc3ViYnVmZmVyKG1fYnVmZmVyLmdldCgpLCBvZmZzZXQsIHNp
emUpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoc3ViQnVmZmVyKSB9OworfQorCitEYXRhIGNv
bmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCit7CisgICAgaWYgKGEuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBiOworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gYTsKKworICAgIHNpemVfdCBzaXplID0gYS5zaXplKCkgKyBiLnNpemUoKTsKKyAgICB1
aW50OF90KiBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2Moc2l6ZSkpOwor
ICAgIG1lbWNweShkYXRhLCBhLnNvdXBCdWZmZXIoKS0+ZGF0YSwgYS5zb3VwQnVmZmVyKCktPmxl
bmd0aCk7CisgICAgbWVtY3B5KGRhdGEgKyBhLnNvdXBCdWZmZXIoKS0+bGVuZ3RoLCBiLnNvdXBC
dWZmZXIoKS0+ZGF0YSwgYi5zb3VwQnVmZmVyKCktPmxlbmd0aCk7CisgICAgR1JlZlB0cjxTb3Vw
QnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoZGF0
YSwgc2l6ZSwgZGF0YSwgZmFzdEZyZWUpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnVmZmVy
KSB9OworfQorCitzdHJ1Y3QgTWFwV3JhcHBlciB7CisgICAgfk1hcFdyYXBwZXIoKQorICAgIHsK
KyAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCogbWFwOworICAg
IHNpemVfdCBzaXplOworfTsKKworc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFw
cGVyKiB3cmFwcGVyKQoreworICAgIGRlbGV0ZSB3cmFwcGVyOworfQorCitEYXRhIG1hcEZpbGUo
aW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIXNpemUpCisg
ICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOworCisgICAgdm9pZCogbWFwID0gbW1hcChudWxs
cHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKKyAgICBpZiAo
bWFwID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIERhdGE6
OmFkb3B0TWFwKG1hcCwgc2l6ZSk7Cit9CisKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFw
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQobWFwKTsKKyAgICBBU1NFUlQobWFwICE9IE1B
UF9GQUlMRUQpOworICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1h
cCwgc2l6ZSB9OworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNv
dXBfYnVmZmVyX25ld193aXRoX293bmVyKG1hcCwgc2l6ZSwgd3JhcHBlciwgcmVpbnRlcnByZXRf
Y2FzdDxHRGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlcikpKTsKKyAgICByZXR1cm4geyBX
VEY6Om1vdmUoYnVmZmVyKSwgRGF0YTo6QmFja2luZzo6TWFwIH07Cit9CisKK0RhdGEgbWFwRmls
ZShjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFks
IDApOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiB7IH07CisgICAgc3RydWN0IHN0
YXQgc3RhdDsKKyAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKKyAgICAgICAgY2xvc2Uo
ZmQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXQu
c3Rfc2l6ZTsKKyAgICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAwLCBzaXplKTsKKyAgICBjbG9z
ZShmZCk7CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEEx
KGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBwbHkoWyZz
aGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzaGExLmFk
ZEJ5dGVzKGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICBT
SEExOjpEaWdlc3QgZGlnZXN0OworICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKKyAgICBy
ZXR1cm4gZGlnZXN0OworfQorCitib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29uc3Qg
RGF0YSYgYikKK3sKKyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAppbmRleCBjOGM2YjE3Li43YzA0MjEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVJT0NoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3
dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIApAQCAtNjMsNiArNjcs
MTEgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBEaXNwYXRjaFB0cjxkaXNw
YXRjaF9pb190PiBtX2Rpc3BhdGNoSU87CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBHUmVm
UHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdPdXRwdXRTdHJl
YW0+IG1fb3V0cHV0U3RyZWFtOworICAgIEdSZWZQdHI8R0ZpbGVJT1N0cmVhbT4gbV9pb1N0cmVh
bTsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTBhMjIyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFu
bmVsU291cC5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZUlPQ2hhbm5lbC5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBnRGVm
YXVsdFJlYWRCdWZmZXJTaXplID0gNDA5NjsKKworSU9DaGFubmVsOjpJT0NoYW5uZWwoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgVHlwZSB0eXBlKQorICAgIDogbV9wYXRoKGZpbGVQYXRoKQorICAg
ICwgbV90eXBlKHR5cGUpCit7CisgICAgYXV0byBwYXRoID0gV2ViQ29yZTo6ZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5kYXRhKCkpKTsKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2UgVHlwZTo6Q3JlYXRlOgorICAgICAgICBnX2ZpbGVfZGVsZXRlKGZpbGUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBtX291dHB1dFN0cmVhbSA9IGFkb3B0
R1JlZihHX09VVFBVVF9TVFJFQU0oZ19maWxlX2NyZWF0ZShmaWxlLmdldCgpLCBzdGF0aWNfY2Fz
dDxHRmlsZUNyZWF0ZUZsYWdzPihHX0ZJTEVfQ1JFQVRFX1BSSVZBVEUpLCBudWxscHRyLCBudWxs
cHRyKSkpOworICAgICAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFR5cGU6OldyaXRlOiB7CisgICAgICAgIG1faW9TdHJlYW0gPSBhZG9wdEdSZWYo
Z19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAg
ICAgICAgQVNTRVJUKG1faW9TdHJlYW0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBUeXBlOjpSZWFkOgorICAgICAgICBtX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKEdfSU5QVVRf
U1RSRUFNKGdfZmlsZV9yZWFkKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKSk7CisgICAg
ICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitS
ZWY8SU9DaGFubmVsPiBJT0NoYW5uZWw6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgSU9D
aGFubmVsOjpUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSU9DaGFubmVs
KGZpbGVQYXRoLCB0eXBlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxEYXRhRnJvbVJlYWRCdWZm
ZXIoU291cEJ1ZmZlciogcmVhZEJ1ZmZlciwgc2l6ZV90IHNpemUsIERhdGEmIGRhdGEpCit7Cisg
ICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXI7CisgICAgaWYgKHNpemUgIT0gcmVhZEJ1ZmZl
ci0+bGVuZ3RoKSB7CisgICAgICAgIC8vIFRoZSBzdWJidWZmZXIgZG9lcyBub3QgY29weSB0aGUg
ZGF0YS4KKyAgICAgICAgYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZm
ZXIocmVhZEJ1ZmZlciwgMCwgc2l6ZSkpOworICAgIH0gZWxzZQorICAgICAgICBidWZmZXIgPSBy
ZWFkQnVmZmVyOworCisgICAgaWYgKGRhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRmlyc3Qg
Y2h1bmssIHdlIG5lZWQgdG8gZm9yY2UgdGhlIGRhdGEgdG8gYmUgY29waWVkLgorICAgICAgICBk
YXRhID0geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEpLCBz
aXplIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgRGF0YSBkYXRhUmVhZChXVEY6Om1vdmUoYnVm
ZmVyKSk7CisgICAgICAgIC8vIENvbmNhdGVuYXRlIHdpbGwgY29weSB0aGUgZGF0YS4KKyAgICAg
ICAgZGF0YSA9IGNvbmNhdGVuYXRlKGRhdGEsIGRhdGFSZWFkKTsKKyAgICB9Cit9CisKK3N0cnVj
dCBSZWFkQXN5bmNEYXRhIHsKKyAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsOworICAgIEdS
ZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyOworICAgIHNpemVfdCBieXRlc1RvUmVhZDsKKyAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcjsK
KyAgICBEYXRhIGRhdGE7Cit9OworCitzdGF0aWMgdm9pZCBpbnB1dFN0cmVhbVJlYWRSZWFkeUNh
bGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgUmVhZEFz
eW5jRGF0YSogYXN5bmNEYXRhKQoreworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0
cmVhbV9yZWFkX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwgbnVsbHB0cik7CisgICAgaWYgKGJ5dGVz
UmVhZCA9PSAtMSkgeworICAgICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKGFzeW5j
RGF0YS0+ZGF0YSwgLTEpOworICAgICAgICBkZWxldGUgYXN5bmNEYXRhOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFieXRlc1JlYWQpIHsKKyAgICAgICAgYXN5bmNEYXRhLT5j
b21wbGV0aW9uSGFuZGxlcihhc3luY0RhdGEtPmRhdGEsIDApOworICAgICAgICBkZWxldGUgYXN5
bmNEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGJ5dGVzUmVhZCA+
IDApOworICAgIGZpbGxEYXRhRnJvbVJlYWRCdWZmZXIoYXN5bmNEYXRhLT5idWZmZXIuZ2V0KCks
IHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNSZWFkKSwgYXN5bmNEYXRhLT5kYXRhKTsKKworICAg
IHNpemVfdCBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBhc3luY0RhdGEtPmJ5dGVzVG9SZWFkIC0gYXN5
bmNEYXRhLT5kYXRhLnNpemUoKTsKKyAgICBpZiAoIXBlbmRpbmdCeXRlc1RvUmVhZCkgeworICAg
ICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKGFzeW5jRGF0YS0+ZGF0YSwgMCk7Cisg
ICAgICAgIGRlbGV0ZSBhc3luY0RhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
aXplX3QgYnl0ZXNUb1JlYWQgPSBzdGQ6Om1pbihwZW5kaW5nQnl0ZXNUb1JlYWQsIGFzeW5jRGF0
YS0+YnVmZmVyLT5sZW5ndGgpOworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoc3RyZWFt
LCBjb25zdF9jYXN0PGNoYXIqPihhc3luY0RhdGEtPmJ1ZmZlci0+ZGF0YSksIGJ5dGVzVG9SZWFk
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
R0FzeW5jUmVhZHlDYWxsYmFjaz4oaW5wdXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayksIGFzeW5j
RGF0YSk7Cit9CisKK3ZvaWQgSU9DaGFubmVsOjpyZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBz
aXplLCBXb3JrUXVldWUqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisKKyAgICBz
aXplX3QgYnVmZmVyU2l6ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUp
OworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVy
X25ldyhTT1VQX01FTU9SWV9UQUtFLCBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MoYnVmZmVy
U2l6ZSkpLCBidWZmZXJTaXplKSk7CisgICAgUmVhZEFzeW5jRGF0YSogYXN5bmNEYXRhID0gbmV3
IFJlYWRBc3luY0RhdGEgeyB0aGlzLCBidWZmZXIuZ2V0KCksIHNpemUsIGNvbXBsZXRpb25IYW5k
bGVyLCB7IH0gfTsKKworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgb2Zmc2V0LgorICAgIGdfaW5w
dXRfc3RyZWFtX3JlYWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgY29uc3RfY2FzdDxjaGFy
Kj4oYnVmZmVyLT5kYXRhKSwgYnVmZmVyU2l6ZSwgR19QUklPUklUWV9ERUZBVUxULCBudWxscHRy
LAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGlucHV0U3Ry
ZWFtUmVhZFJlYWR5Q2FsbGJhY2spLCBhc3luY0RhdGEpOworfQorCisvLyBGSVhNRTogSXQgd291
bGQgYmUgYmV0dGVyIHRvIGRvIHdpdGhvdXQgdGhpcy4KK3ZvaWQgSU9DaGFubmVsOjpyZWFkU3lu
YyhzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiwgc3RkOjpmdW5jdGlvbjx2
b2lkIChEYXRhJiwgaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJU
KG1faW5wdXRTdHJlYW0pOworICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RkOjptaW4oc2l6ZSwg
Z0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiByZWFkQnVm
ZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ldyhTT1VQX01FTU9SWV9UQUtFLCBzdGF0aWNf
Y2FzdDxjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpLCBidWZmZXJTaXplKSk7CisgICAgRGF0
YSBkYXRhOworICAgIHNpemVfdCBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBzaXplOworICAgIHNpemVf
dCBieXRlc1RvUmVhZCA9IGJ1ZmZlclNpemU7CisgICAgZG8geworICAgICAgICAvLyBGSVhNRTog
aW1wbGVtZW50IG9mZnNldC4KKyAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3Ry
ZWFtX3JlYWQobV9pbnB1dFN0cmVhbS5nZXQoKSwgY29uc3RfY2FzdDxjaGFyKj4ocmVhZEJ1ZmZl
ci0+ZGF0YSksIGJ5dGVzVG9SZWFkLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGJ5
dGVzUmVhZCA9PSAtMSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgLTEp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFieXRlc1Jl
YWQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBBU1NFUlQoYnl0ZXNSZWFkID4gMCk7
CisgICAgICAgIGZpbGxEYXRhRnJvbVJlYWRCdWZmZXIocmVhZEJ1ZmZlci5nZXQoKSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihieXRlc1JlYWQpLCBkYXRhKTsKKworICAgICAgICBwZW5kaW5nQnl0ZXNU
b1JlYWQgPSBzaXplIC0gZGF0YS5zaXplKCk7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RkOjpt
aW4ocGVuZGluZ0J5dGVzVG9SZWFkLCByZWFkQnVmZmVyLT5sZW5ndGgpOworICAgIH0gd2hpbGUg
KHBlbmRpbmdCeXRlc1RvUmVhZCk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRhLCAwKTsK
K30KKworc3RydWN0IFdyaXRlQXN5bmNEYXRhIHsKKyAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFu
bmVsOworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyOworICAgIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXI7Cit9OworCitzdGF0aWMgdm9pZCBv
dXRwdXRTdHJlYW1Xcml0ZVJlYWR5Q2FsbGJhY2soR091dHB1dFN0cmVhbSogc3RyZWFtLCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgV3JpdGVBc3luY0RhdGEqIGFzeW5jRGF0YSkKK3sKKyAgICBnc3Np
emUgYnl0ZXNXcml0dGVuID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaChzdHJlYW0sIHJl
c3VsdCwgbnVsbHB0cik7CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgeworICAgICAgICBh
c3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKC0xKTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0
YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdzc2l6ZSBwZW5kaW5nQnl0ZXNUb1dy
aXRlID0gYXN5bmNEYXRhLT5idWZmZXItPmxlbmd0aCAtIGJ5dGVzV3JpdHRlbjsKKyAgICBpZiAo
IXBlbmRpbmdCeXRlc1RvV3JpdGUpIHsKKyAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFu
ZGxlcigwKTsKKyAgICAgICAgZGVsZXRlIGFzeW5jRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGFzeW5jRGF0YS0+YnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19z
dWJidWZmZXIoYXN5bmNEYXRhLT5idWZmZXIuZ2V0KCksIGJ5dGVzV3JpdHRlbiwgcGVuZGluZ0J5
dGVzVG9Xcml0ZSkpOworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyhzdHJlYW0sIGFz
eW5jRGF0YS0+YnVmZmVyLT5kYXRhLCBwZW5kaW5nQnl0ZXNUb1dyaXRlLCBHX1BSSU9SSVRZX0RF
RkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxs
YmFjaz4ob3V0cHV0U3RyZWFtV3JpdGVSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKK30KKwor
dm9pZCBJT0NoYW5uZWw6OndyaXRlKHNpemVfdCBvZmZzZXQsIGNvbnN0IERhdGEmIGRhdGEsIFdv
cmtRdWV1ZSosIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgQVNTRVJUKG1fb3V0cHV0U3RyZWFtIHx8IG1faW9TdHJlYW0pOworCisgICAg
R091dHB1dFN0cmVhbSogc3RyZWFtID0gbV9vdXRwdXRTdHJlYW0gPyBtX291dHB1dFN0cmVhbS5n
ZXQoKSA6IGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1faW9TdHJl
YW0uZ2V0KCkpKTsKKyAgICBXcml0ZUFzeW5jRGF0YSogYXN5bmNEYXRhID0gbmV3IFdyaXRlQXN5
bmNEYXRhIHsgdGhpcywgZGF0YS5zb3VwQnVmZmVyKCksIGNvbXBsZXRpb25IYW5kbGVyIH07Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCisgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRl
X2FzeW5jKHN0cmVhbSwgYXN5bmNEYXRhLT5idWZmZXItPmRhdGEsIGRhdGEuc2l6ZSgpLCBHX1BS
SU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5j
UmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFtV3JpdGVSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRh
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291cC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNjODM3ZDkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZVNvdXAuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMu
TC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZVN0b3JhZ2UuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeSA9ICJXZWJLaXRDYWNoZSI7Ci0KLU5l
dHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRhdGEoKQotICAgIDogbV9kYXRhKG51bGxwdHIpCi0g
ICAgLCBtX3NpemUoMCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1OZXR3b3JrQ2Fj
aGVTdG9yYWdlOjpEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQot
ICAgIDogbV9kYXRhKGRhdGEpCi0gICAgLCBtX3NpemUoc2l6ZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi1jb25zdCB1aW50OF90KiBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpk
YXRhKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRy
OwotfQotCi1ib29sIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OmlzTnVsbCgpIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IE5ldHdvcmtDYWNoZVN0b3JhZ2U6Om9wZW4oY29u
c3QgU3RyaW5nJiBhcHBsaWNhdGlvbkNhY2hlUGF0aCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwotICAgIFN0cmluZyBuZXR3b3JrQ2FjaGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGFwcGxpY2F0aW9uQ2FjaGVQYXRoLCBuZXR3b3JrQ2FjaGVTdWJk
aXJlY3RvcnkpOwotICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtD
YWNoZVBhdGgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+KG5ldyBOZXR3b3JrQ2FjaGVTdG9yYWdlKG5ldHdv
cmtDYWNoZVBhdGgpKTsKLX0KLQotTmV0d29ya0NhY2hlU3RvcmFnZTo6TmV0d29ya0NhY2hlU3Rv
cmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCi0gICAgOiBtX2RpcmVjdG9yeVBhdGgo
ZGlyZWN0b3J5UGF0aCkKLSAgICAsIG1fbWF4aW11bVNpemUoc3RkOjpudW1lcmljX2xpbWl0czxz
aXplX3Q+OjptYXgoKSkKLSAgICAsIG1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3VudCgwKQot
ewotICAgIGluaXRpYWxpemVLZXlGaWx0ZXIoKTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9y
YWdlOjppbml0aWFsaXplS2V5RmlsdGVyKCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFn
ZTo6cmVtb3ZlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlS2V5JikKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0d29y
a0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hSZXRyaWV2ZU9wZXJhdGlvbihjb25zdCBSZXRyaWV2ZU9w
ZXJhdGlvbiYpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmRpc3BhdGNoUGVuZGlu
Z1JldHJpZXZlT3BlcmF0aW9ucygpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnJl
dHJpZXZlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIHVuc2lnbmVkIC8qIHByaW9yaXR5ICovLCBz
dGQ6OmZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Ci19Ci0KLXZvaWQgTmV0d29y
a0NhY2hlU3RvcmFnZTo6c3RvcmUoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgRW50cnkm
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+IGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3Rv
cmFnZTo6c2V0TWF4aW11bVNpemUoc2l6ZV90IHNpemUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIG1fbWF4aW11bVNpemUgPSBz
aXplOwotfQotCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmNsZWFyKCkKLXsKLSAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5l
dHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgbV9rZXlGaWx0ZXIuY2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2d0ay9OZXR3b3JrUHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKaW5kZXgg
ZmEwYTk3MC4uNjg1NWUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKQEAgLTQ4LDEwICs0OCwx
MiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBsYXRmb3JtRmluYWxpemUoKSBvdmVycmlkZQogICAg
IHsKKyNpZiAhRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgICAgIGlmIChTb3VwQ2FjaGUqIHNv
dXBDYWNoZSA9IFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jYWNoZSgpKSB7
CiAgICAgICAgICAgICBzb3VwX2NhY2hlX2ZsdXNoKHNvdXBDYWNoZSk7CiAgICAgICAgICAgICBz
b3VwX2NhY2hlX2R1bXAoc291cENhY2hlKTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IGRmZjc2MTYuLmUyNzFkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJl
c291cmNlQ2FjaGVzVG9DbGVhci5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIKQEAg
LTQ0LDYgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCisjaWYgIUVOQUJMRShORVRXT1JLX0NBQ0hFKQogc3RhdGljIHVpbnQ2NF90IGdldENh
Y2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSogY2FjaGUpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsK
QEAgLTU1LDYgKzU3LDcgQEAgc3RhdGljIHVpbnQ2NF90IGdldENhY2hlRGlza0ZyZWVTaXplKFNv
dXBDYWNoZSogY2FjaGUpCiAKICAgICByZXR1cm4gV2ViQ29yZTo6Z2V0Vm9sdW1lRnJlZVNpemVG
b3JQYXRoKGNhY2hlRGlyLmdldCgpKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdWludDY0X3QgZ2V0
TWVtb3J5U2l6ZSgpCiB7CkBAIC04Myw3ICs4NiwxNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3Vh
Zwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAg
ICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpOworICAg
IG1fZGlza0NhY2hlRGlyZWN0b3J5ID0gcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3Rvcnk7CisK
KyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyAgICAvLyBDbGVhciB0aGUgb2xkIHNvdXAgY2Fj
aGUgaWYgaXQgZXhpc3RzLgorICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24o
KS5jbGVhckNhY2hlKG1fZGlza0NhY2hlRGlyZWN0b3J5KTsKIAorICAgIE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSwgcGFyYW1ldGVycy5z
aG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpOworI2Vsc2UKICAgICAvLyBX
ZSB1c2VkIHRvIHVzZSB0aGUgZ2l2ZW4gY2FjaGUgZGlyZWN0b3J5IGZvciB0aGUgc291cCBjYWNo
ZSwgYnV0IG5vdyB3ZSB1c2UgYSBzdWJkaXJlY3RvcnkgdG8gYXZvaWQKICAgICAvLyBjb25mbGlj
dHMgd2l0aCBvdGhlciBjYWNoZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuIFJlbW92ZSB0
aGUgb2xkIGNhY2hlIGZpbGVzIGlmIHRoZXkgc3RpbGwgZXhpc3QuCiAgICAgU291cE5ldHdvcmtT
ZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNsZWFyQ2FjaGUocGFyYW1ldGVycy5kaXNrQ2FjaGVE
aXJlY3RvcnkpOwpAQCAtOTcsNiArMTA3LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAg
ICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShzb3VwQ2FjaGUuZ2V0KCksIEdfTUFYVUlOVCk7CiAg
ICAgc291cF9jYWNoZV9sb2FkKHNvdXBDYWNoZS5nZXQoKSk7CiAgICAgc291cF9jYWNoZV9zZXRf
bWF4X3NpemUoc291cENhY2hlLmdldCgpLCBpbml0aWFsTWF4U2l6ZSk7CisjZW5kaWYKIAogICAg
IGlmICghcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7
CiAgICAgICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UocGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsCkBAIC0x
MjEsMTYgKzEzMiwyNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9k
ZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVNZW1v
cnlDYXBhY2l0eSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZURpc2tDYXBhY2l0eSA9
IDA7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyAgICB1aW50NjRfdCBkaXNrRnJlZVNp
emUgPSBXZWJDb3JlOjpnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgobV9kaXNrQ2FjaGVEaXJlY3Rv
cnkudXRmOCgpLmRhdGEoKSkgLyAxMDI0IC8gMTAyNDsKKyNlbHNlCiAgICAgU291cENhY2hlKiBj
YWNoZSA9IFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jYWNoZSgpOwogICAg
IHVpbnQ2NF90IGRpc2tGcmVlU2l6ZSA9IGdldENhY2hlRGlza0ZyZWVTaXplKGNhY2hlKSAvIDEw
MjQgLyAxMDI0OworI2VuZGlmCiAKICAgICB1aW50NjRfdCBtZW1TaXplID0gZ2V0TWVtb3J5U2l6
ZSgpOwogICAgIGNhbGN1bGF0ZUNhY2hlU2l6ZXMoY2FjaGVNb2RlbCwgbWVtU2l6ZSwgZGlza0Zy
ZWVTaXplLAogICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHksIGNhY2hlTWluRGVhZENhcGFjaXR5
LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCwK
ICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHksIHVybENhY2hlTWVtb3J5Q2FwYWNpdHksIHVybENh
Y2hlRGlza0NhcGFjaXR5KTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorICAgIGF1dG8m
IG5ldHdvcmtDYWNoZSA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKG5ldHdv
cmtDYWNoZS5pc0VuYWJsZWQoKSkKKyAgICAgICAgbmV0d29ya0NhY2hlLnNldENhcGFjaXR5KHVy
bENhY2hlRGlza0NhcGFjaXR5KTsKKyNlbHNlCiAgICAgaWYgKHVybENhY2hlRGlza0NhcGFjaXR5
ID4gc291cF9jYWNoZV9nZXRfbWF4X3NpemUoY2FjaGUpKQogICAgICAgICBzb3VwX2NhY2hlX3Nl
dF9tYXhfc2l6ZShjYWNoZSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworI2VuZGlmCiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9y
cykKQEAgLTE1NCw3ICsxNzUsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZUZv
ckFsbE9yaWdpbnModWludDMyX3QgY2FjaGVzVG9DbGVhcikKIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmNsZWFyRGlza0NhY2hlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgLyog
bW9kaWZpZWRTaW5jZSAqLywgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiAvKiBjb21wbGV0aW9uSGFu
ZGxlciAqLykKIHsKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBvbmx5IGNsZWFyIGEgcGFy
dCBvZiB0aGUgY2FjaGUgYmFzZWQgb24gdGhlIGRhdGUuCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCisgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5jbGVhcigpOworI2Vsc2UKICAgICBz
b3VwX2NhY2hlX2NsZWFyKFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jYWNo
ZSgpKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGIwMmU5NDcuLjQ4NWE5ZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xOCw3ICsxOCw4IEBAIHNldChXZWJLaXQyX1VTRV9Q
UkVGSVhfSEVBREVSIE9OKQogbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgRGF0YWJh
c2VQcm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcAogCi0gICAgTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZVNvdXAuY3BwCisgICAgTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKIAogICAgIE5ldHdvcmtQcm9jZXNzL2d0
ay9OZXR3b3JrUHJvY2Vzc01haW5HdGsuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L2NvbmZpZy5oIGIvU291cmNlL1dlYktpdDIvY29uZmlnLmgKaW5kZXggYmM5YWMyOS4uMTZkZWFm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvY29uZmlnLmgKKysrIGIvU291cmNlL1dlYktp
dDIvY29uZmlnLmgKQEAgLTgyLDcgKzgyLDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIEVOQUJMRV9O
RVRXT1JLX0NBQ0hFCi0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykgJiYgUExBVEZPUk0oQ09D
T0EpCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykgJiYgKFBMQVRGT1JNKENPQ09BKSB8fCBQ
TEFURk9STShHVEspKQogI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQUNIRSAxCiAjZWxzZQogI2Rl
ZmluZSBFTkFCTEVfTkVUV09SS19DQUNIRSAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251553</attachid>
            <date>2015-04-24 09:13:27 -0700</date>
            <delta_ts>2015-04-26 02:15:04 -0700</delta_ts>
            <desc>Use fast malloc/free in IOChannel too</desc>
            <filename>wk2-disk-cache-soup.diff</filename>
            <type>text/plain</type>
            <size>35486</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZDdkNWE4Li5mOWEwYzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBOZXR3b3Jr
UHJvY2VzcyBkaXNrIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDM4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbGxvdyB0byBjcmVhdGUgYSBHUmVmUHRyIGZvciBTb3VwQnVmZmVyLiBFdmVu
IHRob3VnaCBTb3VwQnVmZmVyCisgICAgICAgIGlzIG5vdCBhIEdPYmplY3QgYW5kIGhhcyBjb3B5
L2ZyZWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgcmVmL3VucmVmLAorICAgICAgICBpdCdzIGludGVy
bmFsbHkgcmVmY291bnRlZCwgc28gd2UgY291bGQgdXNlIGNvcHkvZnJlZSBhcworICAgICAgICBy
ZWYvdW5yZWYuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmg6IEFkZGVkLgorCiAyMDE1LTA0LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNZW1vcnkgY2FjaGUgbGl2ZSBy
ZXNvdXJjZXMgcmVwZWF0ZWRseSBwdXJnZWQgZHVyaW5nIHBhaW50aW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IGI4MWM5ZDUuLmI3NDM2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC0xNjAsNiArMTYwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9DcmVkZW50aWFsU3RvcmFnZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9zb3VwL0ROU1NvdXAuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJT
b3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25T
b3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Qcm94eVNlcnZlclNvdXAuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3JTb3VwLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5YWVjMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5jcHAK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHUmVmUHRyU291cC5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4g
U291cEJ1ZmZlciogcmVmR1B0cihTb3VwQnVmZmVyKiBwdHIpCit7CisgICAgcmV0dXJuIHB0ciA/
IHNvdXBfYnVmZmVyX2NvcHkocHRyKSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyKFNvdXBCdWZmZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBzb3Vw
X2J1ZmZlcl9mcmVlKHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWZkYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmgKQEAgLTAsMCAr
MSwzNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBHUmVmUHRyU291cF9oCisjZGVmaW5lIEdSZWZQdHJTb3VwX2gKKworI2lmIFVT
RShTT1VQKQorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gU291cEJ1ZmZl
ciogcmVmR1B0cihTb3VwQnVmZmVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihTb3Vw
QnVmZmVyKik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFNPVVApCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCAwYjZkNjg3Li4zY2RlNWViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dApAQCAtMTY0LDEwICsxNjQsMTQgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX1NP
VVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3Bw
CiAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCiAgICAgTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAotICAgIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGVjb2Rlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVFbmNvZGVyLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5
LmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAKKyAgICBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAorICAgIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCiApCiAKIHNldChXZWJLaXQy
X1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyMTE1YTM0Li5jYTk4ZWM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTMgQEAKKzIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtTT1VQXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBv
ZiBOZXR3b3JrUHJvY2VzcyBkaXNrIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIHBsYXRmb3JtIHNwZWNpZmljIHBhcnRz
IG9mIHRoZSBkaXNrIGNhY2hlCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBTb3VwLiBJdCdz
IG1haW5seSBOZXR3b3JrQ2FjaGU6OkRhdGEgYW5kCisgICAgICAgIE5ldHdvcmtDYWNoZTo6SU9D
aGFubmVsLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpkdW1wRmlsZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNh
Y2hlOjppbml0aWFsaXplKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVCbG9iU3RvcmFnZS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OnNv
dXBCdWZmZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFTb3VwLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YTo6ZW1wdHkpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmlzTnVsbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGF0YTo6YXBwbHkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6
OnN1YnJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpjb25jYXRlbmF0ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6TWFwV3JhcHBlcjo6fk1hcFdyYXBwZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlbGV0ZU1hcFdyYXBwZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1hcEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkRhdGE6OmFkb3B0TWFwKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpjb21wdXRlU0hBMSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Ynl0ZXNF
cXVhbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFu
bmVsLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFu
bmVsU291cC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hh
bm5lbDo6SU9DaGFubmVsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5u
ZWw6Om9wZW4pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmZpbGxEYXRhRnJvbVJl
YWRCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmlucHV0U3RyZWFtUmVh
ZFJlYWR5Q2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5l
bDo6cmVhZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFk
U3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6b3V0cHV0U3RyZWFtV3JpdGVS
ZWFkeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6
OndyaXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlU291cC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdv
cmtQcm9jZXNzTWFpbkd0ay5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmNsZWFyRGlza0NhY2hlKToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToK
KwogMjAxNS0wNC0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmVtb3ZlIGluY29ycmVjdCBhc3NlcnQgYWZ0ZXIgcjE4
MzE4OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCmluZGV4IGIyOTI4ZmYuLmRhZTQ3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtNTUsNiAr
NTUsMTMgQEAgQ2FjaGUmIHNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCisj
aWYgUExBVEZPUk0oR1RLKQorc3RhdGljIHZvaWQgZHVtcEZpbGVDaGFuZ2VkKENhY2hlKiBjYWNo
ZSkKK3sKKyAgICBjYWNoZS0+ZHVtcENvbnRlbnRzVG9GaWxlKCk7Cit9CisjZW5kaWYKKwogYm9v
bCBDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVF
ZmZpY2FjeUxvZ2dpbmcpCiB7CiAgICAgbV9zdG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBh
dGgpOwpAQCAtNzEsNiArNzgsMTUgQEAgYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCiAgICAgICAgIH0pOwog
ICAgIH0KICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBUcmlnZ2VycyB3aXRoICJ0
b3VjaCAkY2FjaGVQYXRoL2R1bXAiLgorICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgQ1N0
cmluZyBkdW1wRmlsZVBhdGggPSBXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fc3RvcmFnZS0+YmFzZVBhdGgoKSwgImR1
bXAiKSk7CisgICAgICAgIEdSZWZQdHI8R0ZpbGU+IGR1bXBGaWxlID0gYWRvcHRHUmVmKGdfZmls
ZV9uZXdfZm9yX3BhdGgoZHVtcEZpbGVQYXRoLmRhdGEoKSkpOworICAgICAgICBHRmlsZU1vbml0
b3IqIG1vbml0b3IgPSBnX2ZpbGVfbW9uaXRvcl9maWxlKGR1bXBGaWxlLmdldCgpLCBHX0ZJTEVf
TU9OSVRPUl9OT05FLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1vbml0b3IsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhkdW1wRmlsZUNoYW5nZWQp
LCB0aGlzKTsKKyAgICB9CisjZW5kaWYKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29y
a1Byb2Nlc3MpIG9wZW5lZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2Up
OwogICAgIHJldHVybiAhIW1fc3RvcmFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcApp
bmRleCA0ZWNkZTdjLi43YjAzYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgor
I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggMTBmNWQw
Ny4uODRmY2NjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNvdXAuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCkBA
IC0xMDYsNiArMTEwLDkgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIERhdGEo
RGlzcGF0Y2hQdHI8ZGlzcGF0Y2hfZGF0YV90PiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7
CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwg
QmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CisjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KIApAQCAt
MTIwLDEwICsxMjcsMTcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGRpc3Bh
dGNoX2RhdGFfdCBkaXNwYXRjaERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BhdGNoRGF0YS5n
ZXQoKTsgfQogI2VuZGlmCisKKyNpZiBVU0UoU09VUCkKKyAgICBTb3VwQnVmZmVyKiBzb3VwQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KKyNlbmRpZgogcHJpdmF0ZToK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRpc3BhdGNoX2Rh
dGFfdD4gbV9kaXNwYXRjaERhdGE7CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBtdXRhYmxl
IEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7CisjZW5kaWYKICAgICBtdXRhYmxlIGNvbnN0
IHVpbnQ4X3QqIG1fZGF0YSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9Owog
ICAgIGJvb2wgbV9pc01hcCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlNTA3MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3Vw
LmNwcApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEg
Uy5MCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVEYXRhLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgPGZjbnRs
Lmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQorICAgIDogbV9zaXplKHNpemUpCit7CisgICAgdWludDhfdCog
Y29waWVkRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKHNpemUpKTsKKyAg
ICBtZW1jcHkoY29waWVkRGF0YSwgZGF0YSwgc2l6ZSk7CisgICAgbV9idWZmZXIgPSBhZG9wdEdS
ZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoY29waWVkRGF0YSwgc2l6ZSwgY29waWVkRGF0
YSwgZmFzdEZyZWUpKTsKK30KKworRGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVm
ZmVyLCBCYWNraW5nIGJhY2tpbmcpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX3Np
emUoYnVmZmVyID8gYnVmZmVyLT5sZW5ndGggOiAwKQorICAgICwgbV9pc01hcChtX3NpemUgJiYg
YmFja2luZyA9PSBCYWNraW5nOjpNYXApCit7Cit9CisKK0RhdGEgRGF0YTo6ZW1wdHkoKQorewor
ICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25l
dyhTT1VQX01FTU9SWV9UQUtFLCBudWxscHRyLCAwKSk7CisgICAgcmV0dXJuIHsgV1RGOjptb3Zl
KGJ1ZmZlcikgfTsKK30KKworY29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fYnVmZmVyID8gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9i
dWZmZXItPmRhdGEpIDogbnVsbHB0cjsKK30KKworYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAor
eworICAgIHJldHVybiAhbV9idWZmZXI7Cit9CisKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mJiBhcHBsaWVyKSBjb25z
dAoreworICAgIGlmICghbV9zaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci0+ZGF0
YSksIG1fYnVmZmVyLT5sZW5ndGgpOworfQorCitEYXRhIERhdGE6OnN1YnJhbmdlKHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHN1YkJ1ZmZlciA9IGFkb3B0
R1JlZihzb3VwX2J1ZmZlcl9uZXdfc3ViYnVmZmVyKG1fYnVmZmVyLmdldCgpLCBvZmZzZXQsIHNp
emUpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoc3ViQnVmZmVyKSB9OworfQorCitEYXRhIGNv
bmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCit7CisgICAgaWYgKGEuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBiOworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gYTsKKworICAgIHNpemVfdCBzaXplID0gYS5zaXplKCkgKyBiLnNpemUoKTsKKyAgICB1
aW50OF90KiBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2Moc2l6ZSkpOwor
ICAgIG1lbWNweShkYXRhLCBhLnNvdXBCdWZmZXIoKS0+ZGF0YSwgYS5zb3VwQnVmZmVyKCktPmxl
bmd0aCk7CisgICAgbWVtY3B5KGRhdGEgKyBhLnNvdXBCdWZmZXIoKS0+bGVuZ3RoLCBiLnNvdXBC
dWZmZXIoKS0+ZGF0YSwgYi5zb3VwQnVmZmVyKCktPmxlbmd0aCk7CisgICAgR1JlZlB0cjxTb3Vw
QnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoZGF0
YSwgc2l6ZSwgZGF0YSwgZmFzdEZyZWUpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnVmZmVy
KSB9OworfQorCitzdHJ1Y3QgTWFwV3JhcHBlciB7CisgICAgfk1hcFdyYXBwZXIoKQorICAgIHsK
KyAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCogbWFwOworICAg
IHNpemVfdCBzaXplOworfTsKKworc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFw
cGVyKiB3cmFwcGVyKQoreworICAgIGRlbGV0ZSB3cmFwcGVyOworfQorCitEYXRhIG1hcEZpbGUo
aW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIXNpemUpCisg
ICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOworCisgICAgdm9pZCogbWFwID0gbW1hcChudWxs
cHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKKyAgICBpZiAo
bWFwID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIERhdGE6
OmFkb3B0TWFwKG1hcCwgc2l6ZSk7Cit9CisKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFw
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQobWFwKTsKKyAgICBBU1NFUlQobWFwICE9IE1B
UF9GQUlMRUQpOworICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1h
cCwgc2l6ZSB9OworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNv
dXBfYnVmZmVyX25ld193aXRoX293bmVyKG1hcCwgc2l6ZSwgd3JhcHBlciwgcmVpbnRlcnByZXRf
Y2FzdDxHRGVzdHJveU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlcikpKTsKKyAgICByZXR1cm4geyBX
VEY6Om1vdmUoYnVmZmVyKSwgRGF0YTo6QmFja2luZzo6TWFwIH07Cit9CisKK0RhdGEgbWFwRmls
ZShjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFks
IDApOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiB7IH07CisgICAgc3RydWN0IHN0
YXQgc3RhdDsKKyAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKKyAgICAgICAgY2xvc2Uo
ZmQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXQu
c3Rfc2l6ZTsKKyAgICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAwLCBzaXplKTsKKyAgICBjbG9z
ZShmZCk7CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEEx
KGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBwbHkoWyZz
aGExXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzaGExLmFk
ZEJ5dGVzKGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICBT
SEExOjpEaWdlc3QgZGlnZXN0OworICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKKyAgICBy
ZXR1cm4gZGlnZXN0OworfQorCitib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29uc3Qg
RGF0YSYgYikKK3sKKyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAppbmRleCBjOGM2YjE3Li43YzA0MjEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVJT0NoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3
dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIApAQCAtNjMsNiArNjcs
MTEgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBEaXNwYXRjaFB0cjxkaXNw
YXRjaF9pb190PiBtX2Rpc3BhdGNoSU87CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBHUmVm
UHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdPdXRwdXRTdHJl
YW0+IG1fb3V0cHV0U3RyZWFtOworICAgIEdSZWZQdHI8R0ZpbGVJT1N0cmVhbT4gbV9pb1N0cmVh
bTsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQyYjY3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFu
bmVsU291cC5jcHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZUlPQ2hhbm5lbC5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBnRGVm
YXVsdFJlYWRCdWZmZXJTaXplID0gNDA5NjsKKworSU9DaGFubmVsOjpJT0NoYW5uZWwoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgVHlwZSB0eXBlKQorICAgIDogbV9wYXRoKGZpbGVQYXRoKQorICAg
ICwgbV90eXBlKHR5cGUpCit7CisgICAgYXV0byBwYXRoID0gV2ViQ29yZTo6ZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5kYXRhKCkpKTsKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2UgVHlwZTo6Q3JlYXRlOgorICAgICAgICBnX2ZpbGVfZGVsZXRlKGZpbGUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBtX291dHB1dFN0cmVhbSA9IGFkb3B0
R1JlZihHX09VVFBVVF9TVFJFQU0oZ19maWxlX2NyZWF0ZShmaWxlLmdldCgpLCBzdGF0aWNfY2Fz
dDxHRmlsZUNyZWF0ZUZsYWdzPihHX0ZJTEVfQ1JFQVRFX1BSSVZBVEUpLCBudWxscHRyLCBudWxs
cHRyKSkpOworICAgICAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFR5cGU6OldyaXRlOiB7CisgICAgICAgIG1faW9TdHJlYW0gPSBhZG9wdEdSZWYo
Z19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAg
ICAgICAgQVNTRVJUKG1faW9TdHJlYW0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBUeXBlOjpSZWFkOgorICAgICAgICBtX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKEdfSU5QVVRf
U1RSRUFNKGdfZmlsZV9yZWFkKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKSk7CisgICAg
ICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitS
ZWY8SU9DaGFubmVsPiBJT0NoYW5uZWw6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgSU9D
aGFubmVsOjpUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSU9DaGFubmVs
KGZpbGVQYXRoLCB0eXBlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxEYXRhRnJvbVJlYWRCdWZm
ZXIoU291cEJ1ZmZlciogcmVhZEJ1ZmZlciwgc2l6ZV90IHNpemUsIERhdGEmIGRhdGEpCit7Cisg
ICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXI7CisgICAgaWYgKHNpemUgIT0gcmVhZEJ1ZmZl
ci0+bGVuZ3RoKSB7CisgICAgICAgIC8vIFRoZSBzdWJidWZmZXIgZG9lcyBub3QgY29weSB0aGUg
ZGF0YS4KKyAgICAgICAgYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZm
ZXIocmVhZEJ1ZmZlciwgMCwgc2l6ZSkpOworICAgIH0gZWxzZQorICAgICAgICBidWZmZXIgPSBy
ZWFkQnVmZmVyOworCisgICAgaWYgKGRhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRmlyc3Qg
Y2h1bmssIHdlIG5lZWQgdG8gZm9yY2UgdGhlIGRhdGEgdG8gYmUgY29waWVkLgorICAgICAgICBk
YXRhID0geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEpLCBz
aXplIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgRGF0YSBkYXRhUmVhZChXVEY6Om1vdmUoYnVm
ZmVyKSk7CisgICAgICAgIC8vIENvbmNhdGVuYXRlIHdpbGwgY29weSB0aGUgZGF0YS4KKyAgICAg
ICAgZGF0YSA9IGNvbmNhdGVuYXRlKGRhdGEsIGRhdGFSZWFkKTsKKyAgICB9Cit9CisKK3N0cnVj
dCBSZWFkQXN5bmNEYXRhIHsKKyAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsOworICAgIEdS
ZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyOworICAgIHNpemVfdCBieXRlc1RvUmVhZDsKKyAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcjsK
KyAgICBEYXRhIGRhdGE7Cit9OworCitzdGF0aWMgdm9pZCBpbnB1dFN0cmVhbVJlYWRSZWFkeUNh
bGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgUmVhZEFz
eW5jRGF0YSogYXN5bmNEYXRhKQoreworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0
cmVhbV9yZWFkX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwgbnVsbHB0cik7CisgICAgaWYgKGJ5dGVz
UmVhZCA9PSAtMSkgeworICAgICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKGFzeW5j
RGF0YS0+ZGF0YSwgLTEpOworICAgICAgICBkZWxldGUgYXN5bmNEYXRhOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFieXRlc1JlYWQpIHsKKyAgICAgICAgYXN5bmNEYXRhLT5j
b21wbGV0aW9uSGFuZGxlcihhc3luY0RhdGEtPmRhdGEsIDApOworICAgICAgICBkZWxldGUgYXN5
bmNEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGJ5dGVzUmVhZCA+
IDApOworICAgIGZpbGxEYXRhRnJvbVJlYWRCdWZmZXIoYXN5bmNEYXRhLT5idWZmZXIuZ2V0KCks
IHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNSZWFkKSwgYXN5bmNEYXRhLT5kYXRhKTsKKworICAg
IHNpemVfdCBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBhc3luY0RhdGEtPmJ5dGVzVG9SZWFkIC0gYXN5
bmNEYXRhLT5kYXRhLnNpemUoKTsKKyAgICBpZiAoIXBlbmRpbmdCeXRlc1RvUmVhZCkgeworICAg
ICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKGFzeW5jRGF0YS0+ZGF0YSwgMCk7Cisg
ICAgICAgIGRlbGV0ZSBhc3luY0RhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
aXplX3QgYnl0ZXNUb1JlYWQgPSBzdGQ6Om1pbihwZW5kaW5nQnl0ZXNUb1JlYWQsIGFzeW5jRGF0
YS0+YnVmZmVyLT5sZW5ndGgpOworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoc3RyZWFt
LCBjb25zdF9jYXN0PGNoYXIqPihhc3luY0RhdGEtPmJ1ZmZlci0+ZGF0YSksIGJ5dGVzVG9SZWFk
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
R0FzeW5jUmVhZHlDYWxsYmFjaz4oaW5wdXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayksIGFzeW5j
RGF0YSk7Cit9CisKK3ZvaWQgSU9DaGFubmVsOjpyZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBz
aXplLCBXb3JrUXVldWUqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisKKyAgICBz
aXplX3QgYnVmZmVyU2l6ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUp
OworICAgIHVpbnQ4X3QqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1h
bGxvYyhidWZmZXJTaXplKSk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9w
dEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwg
YnVmZmVyRGF0YSwgZmFzdEZyZWUpKTsKKyAgICBSZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEgPSBu
ZXcgUmVhZEFzeW5jRGF0YSB7IHRoaXMsIGJ1ZmZlci5nZXQoKSwgc2l6ZSwgY29tcGxldGlvbkhh
bmRsZXIsIHsgfSB9OworCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCisgICAgZ19p
bnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBjb25zdF9jYXN0PGNo
YXIqPihidWZmZXItPmRhdGEpLCBidWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxw
dHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oaW5wdXRT
dHJlYW1SZWFkUmVhZHlDYWxsYmFjayksIGFzeW5jRGF0YSk7Cit9CisKKy8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBiZXR0ZXIgdG8gZG8gd2l0aG91dCB0aGlzLgordm9pZCBJT0NoYW5uZWw6OnJlYWRT
eW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NF
UlQobV9pbnB1dFN0cmVhbSk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXpl
LCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICB1aW50OF90KiBidWZmZXJEYXRhID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZSkpOworICAgIEdSZWZQdHI8
U291cEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9v
d25lcihidWZmZXJEYXRhLCBidWZmZXJTaXplLCBidWZmZXJEYXRhLCBmYXN0RnJlZSkpOworICAg
IERhdGEgZGF0YTsKKyAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gc2l6ZTsKKyAgICBz
aXplX3QgYnl0ZXNUb1JlYWQgPSBidWZmZXJTaXplOworICAgIGRvIHsKKyAgICAgICAgLy8gRklY
TUU6IGltcGxlbWVudCBvZmZzZXQuCisgICAgICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0
X3N0cmVhbV9yZWFkKG1faW5wdXRTdHJlYW0uZ2V0KCksIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlYWRC
dWZmZXItPmRhdGEpLCBieXRlc1RvUmVhZCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGlm
IChieXRlc1JlYWQgPT0gLTEpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEs
IC0xKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYnl0
ZXNSZWFkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgQVNTRVJUKGJ5dGVzUmVhZCA+
IDApOworICAgICAgICBmaWxsRGF0YUZyb21SZWFkQnVmZmVyKHJlYWRCdWZmZXIuZ2V0KCksIHN0
YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNSZWFkKSwgZGF0YSk7CisKKyAgICAgICAgcGVuZGluZ0J5
dGVzVG9SZWFkID0gc2l6ZSAtIGRhdGEuc2l6ZSgpOworICAgICAgICBieXRlc1RvUmVhZCA9IHN0
ZDo6bWluKHBlbmRpbmdCeXRlc1RvUmVhZCwgcmVhZEJ1ZmZlci0+bGVuZ3RoKTsKKyAgICB9IHdo
aWxlIChwZW5kaW5nQnl0ZXNUb1JlYWQpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwg
MCk7Cit9CisKK3N0cnVjdCBXcml0ZUFzeW5jRGF0YSB7CisgICAgUmVmUHRyPElPQ2hhbm5lbD4g
Y2hhbm5lbDsKKyAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IGJ1ZmZlcjsKKyAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyOworfTsKKworc3RhdGljIHZv
aWQgb3V0cHV0U3RyZWFtV3JpdGVSZWFkeUNhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIHN0cmVhbSwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIFdyaXRlQXN5bmNEYXRhKiBhc3luY0RhdGEpCit7CisgICAg
Z3NzaXplIGJ5dGVzV3JpdHRlbiA9IGdfb3V0cHV0X3N0cmVhbV93cml0ZV9maW5pc2goc3RyZWFt
LCByZXN1bHQsIG51bGxwdHIpOworICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gLTEpIHsKKyAgICAg
ICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigtMSk7CisgICAgICAgIGRlbGV0ZSBhc3lu
Y0RhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnc3NpemUgcGVuZGluZ0J5dGVz
VG9Xcml0ZSA9IGFzeW5jRGF0YS0+YnVmZmVyLT5sZW5ndGggLSBieXRlc1dyaXR0ZW47CisgICAg
aWYgKCFwZW5kaW5nQnl0ZXNUb1dyaXRlKSB7CisgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlv
bkhhbmRsZXIoMCk7CisgICAgICAgIGRlbGV0ZSBhc3luY0RhdGE7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhc3luY0RhdGEtPmJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9u
ZXdfc3ViYnVmZmVyKGFzeW5jRGF0YS0+YnVmZmVyLmdldCgpLCBieXRlc1dyaXR0ZW4sIHBlbmRp
bmdCeXRlc1RvV3JpdGUpKTsKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMoc3RyZWFt
LCBhc3luY0RhdGEtPmJ1ZmZlci0+ZGF0YSwgcGVuZGluZ0J5dGVzVG9Xcml0ZSwgR19QUklPUklU
WV9ERUZBVUxULCBudWxscHRyLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KG91dHB1dFN0cmVhbVdyaXRlUmVhZHlDYWxsYmFjayksIGFzeW5jRGF0YSk7Cit9
CisKK3ZvaWQgSU9DaGFubmVsOjp3cml0ZShzaXplX3Qgb2Zmc2V0LCBjb25zdCBEYXRhJiBkYXRh
LCBXb3JrUXVldWUqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGludCBlcnJvcik+IGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIEFTU0VSVChtX291dHB1dFN0cmVhbSB8fCBtX2lvU3RyZWFtKTsKKwor
ICAgIEdPdXRwdXRTdHJlYW0qIHN0cmVhbSA9IG1fb3V0cHV0U3RyZWFtID8gbV9vdXRwdXRTdHJl
YW0uZ2V0KCkgOiBnX2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX2lv
U3RyZWFtLmdldCgpKSk7CisgICAgV3JpdGVBc3luY0RhdGEqIGFzeW5jRGF0YSA9IG5ldyBXcml0
ZUFzeW5jRGF0YSB7IHRoaXMsIGRhdGEuc291cEJ1ZmZlcigpLCBjb21wbGV0aW9uSGFuZGxlciB9
OworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgb2Zmc2V0LgorICAgIGdfb3V0cHV0X3N0cmVhbV93
cml0ZV9hc3luYyhzdHJlYW0sIGFzeW5jRGF0YS0+YnVmZmVyLT5kYXRhLCBkYXRhLnNpemUoKSwg
R19QUklPUklUWV9ERUZBVUxULCBudWxscHRyLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdB
c3luY1JlYWR5Q2FsbGJhY2s+KG91dHB1dFN0cmVhbVdyaXRlUmVhZHlDYWxsYmFjayksIGFzeW5j
RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZVNvdXAuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYzgzN2Q5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VTb3VwLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVTdG9yYWdlLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkgPSAiV2ViS2l0Q2FjaGUiOwot
Ci1OZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjpEYXRhKCkKLSAgICA6IG1fZGF0YShudWxscHRy
KQotICAgICwgbV9zaXplKDApCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotTmV0d29y
a0NhY2hlU3RvcmFnZTo6RGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkKLSAgICA6IG1fZGF0YShkYXRhKQotICAgICwgbV9zaXplKHNpemUpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotY29uc3QgdWludDhfdCogTmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0
YTo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotYm9vbCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpEYXRhOjppc051bGwoKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlPiBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpvcGVu
KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25DYWNoZVBhdGgpCi17Ci0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICBTdHJpbmcgbmV0d29ya0NhY2hlUGF0aCA9IFdlYkNvcmU6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChhcHBsaWNhdGlvbkNhY2hlUGF0aCwgbmV0d29ya0NhY2hl
U3ViZGlyZWN0b3J5KTsKLSAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhuZXR3
b3JrQ2FjaGVQYXRoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlPihuZXcgTmV0d29ya0NhY2hlU3RvcmFnZShu
ZXR3b3JrQ2FjaGVQYXRoKSk7Ci19Ci0KLU5ldHdvcmtDYWNoZVN0b3JhZ2U6Ok5ldHdvcmtDYWNo
ZVN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQotICAgIDogbV9kaXJlY3RvcnlQ
YXRoKGRpcmVjdG9yeVBhdGgpCi0gICAgLCBtX21heGltdW1TaXplKHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkpCi0gICAgLCBtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9uQ291bnQo
MCkKLXsKLSAgICBpbml0aWFsaXplS2V5RmlsdGVyKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hl
U3RvcmFnZTo6aW5pdGlhbGl6ZUtleUZpbHRlcigpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE5ldHdvcmtDYWNoZVN0
b3JhZ2U6OnJlbW92ZUVudHJ5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYpCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIE5l
dHdvcmtDYWNoZVN0b3JhZ2U6OmRpc3BhdGNoUmV0cmlldmVPcGVyYXRpb24oY29uc3QgUmV0cmll
dmVPcGVyYXRpb24mKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNwYXRjaFBl
bmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMoKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdl
OjpyZXRyaWV2ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCB1bnNpZ25lZCAvKiBwcmlvcml0eSAq
Lywgc3RkOjpmdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4gY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwotfQotCi12b2lkIE5l
dHdvcmtDYWNoZVN0b3JhZ2U6OnN0b3JlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IEVu
dHJ5Jiwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHN1Y2Nlc3MpPiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotfQotCi12b2lkIE5ldHdvcmtDYWNo
ZVN0b3JhZ2U6OnNldE1heGltdW1TaXplKHNpemVfdCBzaXplKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBtX21heGltdW1TaXpl
ID0gc2l6ZTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpjbGVhcigpCi17Ci0gICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwg
IihOZXR3b3JrUHJvY2VzcykgY2xlYXJpbmcgY2FjaGUiKTsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIG1fa2V5RmlsdGVyLmNsZWFyKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWluR3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2d0ay9OZXR3b3JrUHJvY2Vzc01haW5HdGsuY3BwCmlu
ZGV4IGZhMGE5NzAuLjY4NTVlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2d0ay9OZXR3b3JrUHJvY2Vzc01haW5HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2d0ay9OZXR3b3JrUHJvY2Vzc01haW5HdGsuY3BwCkBAIC00OCwxMCAr
NDgsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBwbGF0Zm9ybUZpbmFsaXplKCkgb3ZlcnJpZGUK
ICAgICB7CisjaWYgIUVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgICAgICBpZiAoU291cENhY2hl
KiBzb3VwQ2FjaGUgPSBTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuY2FjaGUo
KSkgewogICAgICAgICAgICAgc291cF9jYWNoZV9mbHVzaChzb3VwQ2FjaGUpOwogICAgICAgICAg
ICAgc291cF9jYWNoZV9kdW1wKHNvdXBDYWNoZSk7CiAgICAgICAgIH0KKyNlbmRpZgogICAgIH0K
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCBkZmY3NjE2Li5lMjcxZGRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vz
c1NvdXAuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUNhY2hlc1RvQ2xlYXIuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgi
CkBAIC00NCw2ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAorI2lmICFFTkFCTEUoTkVUV09SS19DQUNIRSkKIHN0YXRpYyB1aW50NjRfdCBn
ZXRDYWNoZURpc2tGcmVlU2l6ZShTb3VwQ2FjaGUqIGNhY2hlKQogewogICAgIEFTU0VSVChjYWNo
ZSk7CkBAIC01NSw2ICs1Nyw3IEBAIHN0YXRpYyB1aW50NjRfdCBnZXRDYWNoZURpc2tGcmVlU2l6
ZShTb3VwQ2FjaGUqIGNhY2hlKQogCiAgICAgcmV0dXJuIFdlYkNvcmU6OmdldFZvbHVtZUZyZWVT
aXplRm9yUGF0aChjYWNoZURpci5nZXQoKSk7CiB9CisjZW5kaWYKIAogc3RhdGljIHVpbnQ2NF90
IGdldE1lbW9yeVNpemUoKQogewpAQCAtODMsNyArODYsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6dXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxh
bmd1YWcKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQog
ewogICAgIEFTU0VSVCghcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKTsK
KyAgICBtX2Rpc2tDYWNoZURpcmVjdG9yeSA9IHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5
OworCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgLy8gQ2xlYXIgdGhlIG9sZCBzb3Vw
IGNhY2hlIGlmIGl0IGV4aXN0cy4KKyAgICBTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNz
aW9uKCkuY2xlYXJDYWNoZShtX2Rpc2tDYWNoZURpcmVjdG9yeSk7CiAKKyAgICBOZXR3b3JrQ2Fj
aGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2FjaGVEaXJlY3RvcnksIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nKTsKKyNlbHNlCiAgICAg
Ly8gV2UgdXNlZCB0byB1c2UgdGhlIGdpdmVuIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHNvdXAg
Y2FjaGUsIGJ1dCBub3cgd2UgdXNlIGEgc3ViZGlyZWN0b3J5IHRvIGF2b2lkCiAgICAgLy8gY29u
ZmxpY3RzIHdpdGggb3RoZXIgY2FjaGUgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LiBSZW1v
dmUgdGhlIG9sZCBjYWNoZSBmaWxlcyBpZiB0aGV5IHN0aWxsIGV4aXN0LgogICAgIFNvdXBOZXR3
b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jbGVhckNhY2hlKHBhcmFtZXRlcnMuZGlza0Nh
Y2hlRGlyZWN0b3J5KTsKQEAgLTk3LDYgKzEwNyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRp
CiAgICAgc291cF9jYWNoZV9zZXRfbWF4X3NpemUoc291cENhY2hlLmdldCgpLCBHX01BWFVJTlQp
OwogICAgIHNvdXBfY2FjaGVfbG9hZChzb3VwQ2FjaGUuZ2V0KCkpOwogICAgIHNvdXBfY2FjaGVf
c2V0X21heF9zaXplKHNvdXBDYWNoZS5nZXQoKSwgaW5pdGlhbE1heFNpemUpOworI2VuZGlmCiAK
ICAgICBpZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLmlzRW1wdHko
KSkgewogICAgICAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNldENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLApA
QCAtMTIxLDE2ICsxMzIsMjYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNo
ZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBsb25nIHVybENhY2hl
TWVtb3J5Q2FwYWNpdHkgPSAwOwogICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVEaXNrQ2FwYWNp
dHkgPSAwOwogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgdWludDY0X3QgZGlza0Zy
ZWVTaXplID0gV2ViQ29yZTo6Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKG1fZGlza0NhY2hlRGly
ZWN0b3J5LnV0ZjgoKS5kYXRhKCkpIC8gMTAyNCAvIDEwMjQ7CisjZWxzZQogICAgIFNvdXBDYWNo
ZSogY2FjaGUgPSBTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuY2FjaGUoKTsK
ICAgICB1aW50NjRfdCBkaXNrRnJlZVNpemUgPSBnZXRDYWNoZURpc2tGcmVlU2l6ZShjYWNoZSkg
LyAxMDI0IC8gMTAyNDsKKyNlbmRpZgogCiAgICAgdWludDY0X3QgbWVtU2l6ZSA9IGdldE1lbW9y
eVNpemUoKTsKICAgICBjYWxjdWxhdGVDYWNoZVNpemVzKGNhY2hlTW9kZWwsIG1lbVNpemUsIGRp
c2tGcmVlU2l6ZSwKICAgICAgICAgY2FjaGVUb3RhbENhcGFjaXR5LCBjYWNoZU1pbkRlYWRDYXBh
Y2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2
YWwsCiAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5LCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1
cmxDYWNoZURpc2tDYXBhY2l0eSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyAgICBh
dXRvJiBuZXR3b3JrQ2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpOworICAgIGlmIChu
ZXR3b3JrQ2FjaGUuaXNFbmFibGVkKCkpCisgICAgICAgIG5ldHdvcmtDYWNoZS5zZXRDYXBhY2l0
eSh1cmxDYWNoZURpc2tDYXBhY2l0eSk7CisjZWxzZQogICAgIGlmICh1cmxDYWNoZURpc2tDYXBh
Y2l0eSA+IHNvdXBfY2FjaGVfZ2V0X21heF9zaXplKGNhY2hlKSkKICAgICAgICAgc291cF9jYWNo
ZV9zZXRfbWF4X3NpemUoY2FjaGUsIHVybENhY2hlRGlza0NhcGFjaXR5KTsKKyNlbmRpZgogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNF
cnJvcnMpCkBAIC0xNTQsNyArMTc1LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2Fj
aGVGb3JBbGxPcmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xlYXIpCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpjbGVhckRpc2tDYWNoZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50
IC8qIG1vZGlmaWVkU2luY2UgKi8sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gLyogY29tcGxldGlv
bkhhbmRsZXIgKi8pCiB7CiAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gb25seSBjbGVhciBh
IHBhcnQgb2YgdGhlIGNhY2hlIGJhc2VkIG9uIHRoZSBkYXRlLgorI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQorICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2xlYXIoKTsKKyNlbHNlCiAg
ICAgc291cF9jYWNoZV9jbGVhcihTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCku
Y2FjaGUoKSk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1UZXJt
aW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBiMDJlOTQ3Li40ODVhOWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTgsNyArMTgsOCBAQCBzZXQoV2ViS2l0Ml9V
U0VfUFJFRklYX0hFQURFUiBPTikKIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIERh
dGFiYXNlUHJvY2Vzcy9ndGsvRGF0YWJhc2VQcm9jZXNzTWFpbkd0ay5jcHAKIAotICAgIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VTb3VwLmNwcAorICAgIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAorICAgIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCiAKICAgICBOZXR3b3JrUHJvY2Vz
cy9ndGsvTmV0d29ya1Byb2Nlc3NNYWluR3RrLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9jb25maWcuaCBiL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCmluZGV4IGJjOWFjMjkuLjE2
ZGVhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL2NvbmZpZy5oCkBAIC04Miw3ICs4Miw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBFTkFC
TEVfTkVUV09SS19DQUNIRQotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpICYmIFBMQVRGT1JN
KENPQ09BKQorI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpICYmIChQTEFURk9STShDT0NPQSkg
fHwgUExBVEZPUk0oR1RLKSkKICNkZWZpbmUgRU5BQkxFX05FVFdPUktfQ0FDSEUgMQogI2Vsc2UK
ICNkZWZpbmUgRU5BQkxFX05FVFdPUktfQ0FDSEUgMAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251679</attachid>
            <date>2015-04-26 02:15:04 -0700</date>
            <delta_ts>2015-04-26 17:23:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-disk-cache-soup.diff</filename>
            <type>text/plain</type>
            <size>35616</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOTM3YTk1Li5hYTBmNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTUtMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBOZXR3b3Jr
UHJvY2VzcyBkaXNrIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDM4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBbGxvdyB0byBjcmVhdGUgYSBHUmVmUHRyIGZvciBTb3VwQnVmZmVyLiBFdmVu
IHRob3VnaCBTb3VwQnVmZmVyCisgICAgICAgIGlzIG5vdCBhIEdPYmplY3QgYW5kIGhhcyBjb3B5
L2ZyZWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgcmVmL3VucmVmLAorICAgICAgICBpdCdzIGludGVy
bmFsbHkgcmVmY291bnRlZCwgc28gd2UgY291bGQgdXNlIGNvcHkvZnJlZSBhcworICAgICAgICBy
ZWYvdW5yZWYuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmg6IEFkZGVkLgorCiAyMDE1LTA0LTI1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlZCBleHBlY3RlZCBiaW5k
aW5ncyBnZW5lcmF0aW9uIHRlc3QgcmVzdWx0cyBhZnRlciByMTgzMzQzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQppbmRleCBkOGI2ZDY1Li4wMTgzMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtMTU5LDYgKzE1OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291cC5jcHAKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9ETlNTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRy
U291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
U291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291cC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOWFlYzEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR1JlZlB0clNvdXAuY3Bw
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR1JlZlB0clNvdXAuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+
IFNvdXBCdWZmZXIqIHJlZkdQdHIoU291cEJ1ZmZlciogcHRyKQoreworICAgIHJldHVybiBwdHIg
PyBzb3VwX2J1ZmZlcl9jb3B5KHB0cikgOiBudWxscHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lk
IGRlcmVmR1B0cihTb3VwQnVmZmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgc291
cF9idWZmZXJfZnJlZShwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dSZWZQdHJTb3VwLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmZGIyNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9HUmVmUHRyU291cC5oCkBAIC0wLDAg
KzEsMzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgR1JlZlB0clNvdXBfaAorI2RlZmluZSBHUmVmUHRyU291cF9oCisKKyNpZiBV
U0UoU09VUCkKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IFNvdXBCdWZm
ZXIqIHJlZkdQdHIoU291cEJ1ZmZlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoU291
cEJ1ZmZlciopOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShTT1VQKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMGI2ZDY4Ny4uM2NkZTVlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIv
Q01ha2VMaXN0cy50eHQKQEAgLTE2NCwxMCArMTY0LDE0IEBAIHNldChOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNw
cAogCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorICAgIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAogICAgIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURlY29kZXIuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW5jb2Rlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCisgICAg
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKKyAgICBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAogKQogCiBzZXQoV2ViS2l0
Ml9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTUwODgyZS4uNDNmNzNiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDUzIEBACisyMDE1LTA0LTE3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgTmV0d29ya1Byb2Nlc3MgZGlzayBjYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJ0
cyBvZiB0aGUgZGlzayBjYWNoZQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBmb3IgU291cC4gSXQn
cyBtYWlubHkgTmV0d29ya0NhY2hlOjpEYXRhIGFuZAorICAgICAgICBOZXR3b3JrQ2FjaGU6OklP
Q2hhbm5lbC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6ZHVtcEZpbGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpD
YWNoZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlQmxvYlN0b3JhZ2UuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpz
b3VwQnVmZmVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhU291cC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6
OkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE6OmVtcHR5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpEYXRhOjppc051bGwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRhdGE6OmFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRh
OjpzdWJyYW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Y29uY2F0ZW5hdGUp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Ok1hcFdyYXBwZXI6On5NYXBXcmFwcGVy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWxldGVNYXBXcmFwcGVyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjptYXBGaWxlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpEYXRhOjphZG9wdE1hcCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Y29tcHV0ZVNIQTEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmJ5dGVz
RXF1YWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hh
bm5lbC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hh
bm5lbFNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0No
YW5uZWw6OklPQ2hhbm5lbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFu
bmVsOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpmaWxsRGF0YUZyb21S
ZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjppbnB1dFN0cmVhbVJl
YWRSZWFkeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5u
ZWw6OnJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6cmVh
ZFN5bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om91dHB1dFN0cmVhbVdyaXRl
UmVhZHlDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVs
Ojp3cml0ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZVNvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2d0ay9OZXR3
b3JrUHJvY2Vzc01haW5HdGsuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6
CisKIDIwMTUtMDQtMjUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgRnVydGhlciB1cGRhdGUgZ2VzdHVyZSBzd2lwZSBzaGFkb3cgc3R5bGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3Bw
CmluZGV4IGIyOTI4ZmYuLmRhZTQ3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtNTUsNiArNTUsMTMgQEAgQ2Fj
aGUmIHNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCisjaWYgUExBVEZPUk0o
R1RLKQorc3RhdGljIHZvaWQgZHVtcEZpbGVDaGFuZ2VkKENhY2hlKiBjYWNoZSkKK3sKKyAgICBj
YWNoZS0+ZHVtcENvbnRlbnRzVG9GaWxlKCk7Cit9CisjZW5kaWYKKwogYm9vbCBDYWNoZTo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dp
bmcpCiB7CiAgICAgbV9zdG9yYWdlID0gU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOwpAQCAtNzEs
NiArNzgsMTUgQEAgYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0
aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCiAgICAgICAgIH0pOwogICAgIH0KICNlbmRp
ZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBUcmlnZ2VycyB3aXRoICJ0b3VjaCAkY2FjaGVQ
YXRoL2R1bXAiLgorICAgIGlmIChtX3N0b3JhZ2UpIHsKKyAgICAgICAgQ1N0cmluZyBkdW1wRmls
ZVBhdGggPSBXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oV2ViQ29yZTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KG1fc3RvcmFnZS0+YmFzZVBhdGgoKSwgImR1bXAiKSk7CisgICAg
ICAgIEdSZWZQdHI8R0ZpbGU+IGR1bXBGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZHVtcEZpbGVQYXRoLmRhdGEoKSkpOworICAgICAgICBHRmlsZU1vbml0b3IqIG1vbml0b3Ig
PSBnX2ZpbGVfbW9uaXRvcl9maWxlKGR1bXBGaWxlLmdldCgpLCBHX0ZJTEVfTU9OSVRPUl9OT05F
LCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1v
bml0b3IsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhkdW1wRmlsZUNoYW5nZWQpLCB0aGlzKTsKKyAg
ICB9CisjZW5kaWYKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG9w
ZW5lZCBjYWNoZSBzdG9yYWdlLCBzdWNjZXNzICVkIiwgISFtX3N0b3JhZ2UpOwogICAgIHJldHVy
biAhIW1fc3RvcmFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAppbmRleCA0ZWNkZTdj
Li43YjAzYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0
ZW1Qb3NpeC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGZj
bnRsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgog
I2luY2x1ZGUgPHd0Zi9TSEExLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggMTBmNWQwNy4uODRmY2NjOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFVT
RShTT1VQKQorI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNvdXAuaD4KKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCkBAIC0xMDYsNiArMTEw
LDkgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIERhdGEoRGlzcGF0Y2hQdHI8
ZGlzcGF0Y2hfZGF0YV90PiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5kaWYKKyNp
ZiBVU0UoU09VUCkKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgQmFja2luZyA9IEJh
Y2tpbmc6OkJ1ZmZlcik7CisjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KIApAQCAtMTIwLDEwICsxMjcs
MTcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGRpc3BhdGNoX2RhdGFfdCBk
aXNwYXRjaERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BhdGNoRGF0YS5nZXQoKTsgfQogI2Vu
ZGlmCisKKyNpZiBVU0UoU09VUCkKKyAgICBTb3VwQnVmZmVyKiBzb3VwQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KKyNlbmRpZgogcHJpdmF0ZToKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBtdXRhYmxlIERpc3BhdGNoUHRyPGRpc3BhdGNoX2RhdGFfdD4gbV9kaXNw
YXRjaERhdGE7CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBtdXRhYmxlIEdSZWZQdHI8U291
cEJ1ZmZlcj4gbV9idWZmZXI7CisjZW5kaWYKICAgICBtdXRhYmxlIGNvbnN0IHVpbnQ4X3QqIG1f
ZGF0YSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIGJvb2wgbV9p
c01hcCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjRlNTA3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApAQCAtMCww
ICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCisK
KyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk
ZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFj
ZSBOZXR3b3JrQ2FjaGUgeworCitEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIDogbV9zaXplKHNpemUpCit7CisgICAgdWludDhfdCogY29waWVkRGF0YSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKHNpemUpKTsKKyAgICBtZW1jcHkoY29w
aWVkRGF0YSwgZGF0YSwgc2l6ZSk7CisgICAgbV9idWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZm
ZXJfbmV3X3dpdGhfb3duZXIoY29waWVkRGF0YSwgc2l6ZSwgY29waWVkRGF0YSwgZmFzdEZyZWUp
KTsKK30KKworRGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBCYWNraW5n
IGJhY2tpbmcpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX3NpemUoYnVmZmVyID8g
YnVmZmVyLT5sZW5ndGggOiAwKQorICAgICwgbV9pc01hcChtX3NpemUgJiYgYmFja2luZyA9PSBC
YWNraW5nOjpNYXApCit7Cit9CisKK0RhdGEgRGF0YTo6ZW1wdHkoKQoreworICAgIEdSZWZQdHI8
U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ldyhTT1VQX01FTU9S
WV9UQUtFLCBudWxscHRyLCAwKSk7CisgICAgcmV0dXJuIHsgV1RGOjptb3ZlKGJ1ZmZlcikgfTsK
K30KKworY29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YnVmZmVyID8gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9idWZmZXItPmRhdGEp
IDogbnVsbHB0cjsKK30KKworYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVy
biAhbV9idWZmZXI7Cit9CisKK2Jvb2wgRGF0YTo6YXBwbHkoY29uc3Qgc3RkOjpmdW5jdGlvbjxi
b29sIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mJiBhcHBsaWVyKSBjb25zdAoreworICAgIGlm
ICghbV9zaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYXBwbGllcihy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVy
LT5sZW5ndGgpOworfQorCitEYXRhIERhdGE6OnN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVf
dCBzaXplKSBjb25zdAoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHN1YkJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1
ZmZlcl9uZXdfc3ViYnVmZmVyKG1fYnVmZmVyLmdldCgpLCBvZmZzZXQsIHNpemUpKTsKKyAgICBy
ZXR1cm4geyBXVEY6Om1vdmUoc3ViQnVmZmVyKSB9OworfQorCitEYXRhIGNvbmNhdGVuYXRlKGNv
bnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCit7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBiOworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsKKwor
ICAgIHNpemVfdCBzaXplID0gYS5zaXplKCkgKyBiLnNpemUoKTsKKyAgICB1aW50OF90KiBkYXRh
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2Moc2l6ZSkpOworICAgIG1lbWNweShk
YXRhLCBhLnNvdXBCdWZmZXIoKS0+ZGF0YSwgYS5zb3VwQnVmZmVyKCktPmxlbmd0aCk7CisgICAg
bWVtY3B5KGRhdGEgKyBhLnNvdXBCdWZmZXIoKS0+bGVuZ3RoLCBiLnNvdXBCdWZmZXIoKS0+ZGF0
YSwgYi5zb3VwQnVmZmVyKCktPmxlbmd0aCk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZm
ZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoZGF0YSwgc2l6ZSwgZGF0
YSwgZmFzdEZyZWUpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnVmZmVyKSB9OworfQorCitz
dHJ1Y3QgTWFwV3JhcHBlciB7CisgICAgfk1hcFdyYXBwZXIoKQorICAgIHsKKyAgICAgICAgbXVu
bWFwKG1hcCwgc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCogbWFwOworICAgIHNpemVfdCBzaXpl
OworfTsKKworc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVy
KQoreworICAgIGRlbGV0ZSB3cmFwcGVyOworfQorCitEYXRhIG1hcEZpbGUoaW50IGZkLCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVy
biBEYXRhOjplbXB0eSgpOworCisgICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQ
Uk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKKyAgICBpZiAobWFwID09IE1BUF9G
QUlMRUQpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1h
cCwgc2l6ZSk7Cit9CisKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICBBU1NFUlQobWFwKTsKKyAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwor
ICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6ZSB9Owor
ICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25l
d193aXRoX293bmVyKG1hcCwgc2l6ZSwgd3JhcHBlciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oZGVsZXRlTWFwV3JhcHBlcikpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnVm
ZmVyKSwgRGF0YTo6QmFja2luZzo6TWFwIH07Cit9CisKK0RhdGEgbWFwRmlsZShjb25zdCBjaGFy
KiBwYXRoKQoreworICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOworICAgIGlm
IChmZCA8IDApCisgICAgICAgIHJldHVybiB7IH07CisgICAgc3RydWN0IHN0YXQgc3RhdDsKKyAg
ICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKKyAg
ICBhdXRvIGRhdGEgPSBtYXBGaWxlKGZkLCAwLCBzaXplKTsKKyAgICBjbG9zZShmZCk7CisKKyAg
ICByZXR1cm4gZGF0YTsKK30KKworU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEm
IGRhdGEpCit7CisgICAgU0hBMSBzaGExOworICAgIGRhdGEuYXBwbHkoWyZzaGExXShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzaGExLmFkZEJ5dGVzKGRhdGEs
IHNpemUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICBTSEExOjpEaWdlc3Qg
ZGlnZXN0OworICAgIHNoYTEuY29tcHV0ZUhhc2goZGlnZXN0KTsKKyAgICByZXR1cm4gZGlnZXN0
OworfQorCitib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKK3sK
KyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlSU9DaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAppbmRleCBjOGM2YjE3Li43YzA0MjEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5u
ZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVJT0NoYW5uZWwuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVl
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBVU0UoU09VUCkKKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIApAQCAtNjMsNiArNjcsMTEgQEAgcHJpdmF0
ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBEaXNwYXRjaFB0cjxkaXNwYXRjaF9pb190PiBt
X2Rpc3BhdGNoSU87CiAjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBHUmVmUHRyPEdJbnB1dFN0
cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdPdXRwdXRTdHJlYW0+IG1fb3V0cHV0
U3RyZWFtOworICAgIEdSZWZQdHI8R0ZpbGVJT1N0cmVhbT4gbV9pb1N0cmVhbTsKKyNlbmRpZgog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iNjA5ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAK
QEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUlP
Q2hhbm5lbC5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3Bh
Y2UgTmV0d29ya0NhY2hlIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBnRGVmYXVsdFJlYWRCdWZm
ZXJTaXplID0gNDA5NjsKKworSU9DaGFubmVsOjpJT0NoYW5uZWwoY29uc3QgU3RyaW5nJiBmaWxl
UGF0aCwgVHlwZSB0eXBlKQorICAgIDogbV9wYXRoKGZpbGVQYXRoKQorICAgICwgbV90eXBlKHR5
cGUpCit7CisgICAgYXV0byBwYXRoID0gV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGZpbGVQYXRoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3BhdGgocGF0aC5kYXRhKCkpKTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNh
c2UgVHlwZTo6Q3JlYXRlOgorICAgICAgICBnX2ZpbGVfZGVsZXRlKGZpbGUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOworICAgICAgICBtX291dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihHX09VVFBV
VF9TVFJFQU0oZ19maWxlX2NyZWF0ZShmaWxlLmdldCgpLCBzdGF0aWNfY2FzdDxHRmlsZUNyZWF0
ZUZsYWdzPihHX0ZJTEVfQ1JFQVRFX1BSSVZBVEUpLCBudWxscHRyLCBudWxscHRyKSkpOworICAg
ICAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5
cGU6OldyaXRlOiB7CisgICAgICAgIG1faW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29wZW5f
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgQVNTRVJU
KG1faW9TdHJlYW0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUeXBlOjpSZWFk
OgorICAgICAgICBtX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKEdfSU5QVVRfU1RSRUFNKGdfZmls
ZV9yZWFkKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKSk7CisgICAgICAgIEFTU0VSVCht
X2lucHV0U3RyZWFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitSZWY8SU9DaGFubmVs
PiBJT0NoYW5uZWw6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgSU9DaGFubmVsOjpUeXBl
IHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSU9DaGFubmVsKGZpbGVQYXRoLCB0
eXBlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxEYXRhRnJvbVJlYWRCdWZmZXIoU291cEJ1ZmZl
ciogcmVhZEJ1ZmZlciwgc2l6ZV90IHNpemUsIERhdGEmIGRhdGEpCit7CisgICAgR1JlZlB0cjxT
b3VwQnVmZmVyPiBidWZmZXI7CisgICAgaWYgKHNpemUgIT0gcmVhZEJ1ZmZlci0+bGVuZ3RoKSB7
CisgICAgICAgIC8vIFRoZSBzdWJidWZmZXIgZG9lcyBub3QgY29weSB0aGUgZGF0YS4KKyAgICAg
ICAgYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld19zdWJidWZmZXIocmVhZEJ1ZmZl
ciwgMCwgc2l6ZSkpOworICAgIH0gZWxzZQorICAgICAgICBidWZmZXIgPSByZWFkQnVmZmVyOwor
CisgICAgaWYgKGRhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRmlyc3QgY2h1bmssIHdlIG5l
ZWQgdG8gZm9yY2UgdGhlIGRhdGEgdG8gYmUgY29waWVkLgorICAgICAgICBkYXRhID0geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEpLCBzaXplIH07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgRGF0YSBkYXRhUmVhZChXVEY6Om1vdmUoYnVmZmVyKSk7CisgICAg
ICAgIC8vIENvbmNhdGVuYXRlIHdpbGwgY29weSB0aGUgZGF0YS4KKyAgICAgICAgZGF0YSA9IGNv
bmNhdGVuYXRlKGRhdGEsIGRhdGFSZWFkKTsKKyAgICB9Cit9CisKK3N0cnVjdCBSZWFkQXN5bmNE
YXRhIHsKKyAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsOworICAgIEdSZWZQdHI8U291cEJ1
ZmZlcj4gYnVmZmVyOworICAgIHNpemVfdCBieXRlc1RvUmVhZDsKKyAgICBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICBEYXRhIGRh
dGE7Cit9OworCitzdGF0aWMgdm9pZCBpbnB1dFN0cmVhbVJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1
dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlYWRBc3luY0RhdGE+IGFzeW5jRGF0YShzdGF0aWNf
Y2FzdDxSZWFkQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0g
Z19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goc3RyZWFtLCByZXN1bHQsIG51bGxwdHIpOworICAg
IGlmIChieXRlc1JlYWQgPT0gLTEpIHsKKyAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFu
ZGxlcihhc3luY0RhdGEtPmRhdGEsIC0xKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRsZXIo
YXN5bmNEYXRhLT5kYXRhLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VChieXRlc1JlYWQgPiAwKTsKKyAgICBmaWxsRGF0YUZyb21SZWFkQnVmZmVyKGFzeW5jRGF0YS0+
YnVmZmVyLmdldCgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVzUmVhZCksIGFzeW5jRGF0YS0+
ZGF0YSk7CisKKyAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gYXN5bmNEYXRhLT5ieXRl
c1RvUmVhZCAtIGFzeW5jRGF0YS0+ZGF0YS5zaXplKCk7CisgICAgaWYgKCFwZW5kaW5nQnl0ZXNU
b1JlYWQpIHsKKyAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcihhc3luY0RhdGEt
PmRhdGEsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IGJ5dGVzVG9S
ZWFkID0gc3RkOjptaW4ocGVuZGluZ0J5dGVzVG9SZWFkLCBhc3luY0RhdGEtPmJ1ZmZlci0+bGVu
Z3RoKTsKKyAgICBhdXRvIGRhdGEgPSBjb25zdF9jYXN0PGNoYXIqPihhc3luY0RhdGEtPmJ1ZmZl
ci0+ZGF0YSk7CisgICAgdXNlckRhdGEgPSBhc3luY0RhdGEucmVsZWFzZSgpOworICAgIGdfaW5w
dXRfc3RyZWFtX3JlYWRfYXN5bmMoc3RyZWFtLCBkYXRhLCBieXRlc1RvUmVhZCwgR19QUklPUklU
WV9ERUZBVUxULCBudWxscHRyLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KGlucHV0U3RyZWFtUmVhZFJlYWR5Q2FsbGJhY2spLCB1c2VyRGF0YSk7Cit9CisK
K3ZvaWQgSU9DaGFubmVsOjpyZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVl
dWUqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisKKyAgICBzaXplX3QgYnVmZmVy
U2l6ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUpOworICAgIHVpbnQ4
X3QqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhidWZmZXJT
aXplKSk7CisgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoc291cF9i
dWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwgYnVmZmVyRGF0YSwg
ZmFzdEZyZWUpKTsKKyAgICBSZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEgPSBuZXcgUmVhZEFzeW5j
RGF0YSB7IHRoaXMsIGJ1ZmZlci5nZXQoKSwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXIsIHsgfSB9
OworCisgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCisgICAgZ19pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBjb25zdF9jYXN0PGNoYXIqPihidWZmZXIt
PmRhdGEpLCBidWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oaW5wdXRTdHJlYW1SZWFkUmVh
ZHlDYWxsYmFjayksIGFzeW5jRGF0YSk7Cit9CisKKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0
ZXIgdG8gZG8gd2l0aG91dCB0aGlzLgordm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jKHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEm
LCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0
cmVhbSk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVmYXVsdFJl
YWRCdWZmZXJTaXplKTsKKyAgICB1aW50OF90KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZSkpOworICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4g
cmVhZEJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihidWZmZXJE
YXRhLCBidWZmZXJTaXplLCBidWZmZXJEYXRhLCBmYXN0RnJlZSkpOworICAgIERhdGEgZGF0YTsK
KyAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gc2l6ZTsKKyAgICBzaXplX3QgYnl0ZXNU
b1JlYWQgPSBidWZmZXJTaXplOworICAgIGRvIHsKKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVu
dCBvZmZzZXQuCisgICAgICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFk
KG1faW5wdXRTdHJlYW0uZ2V0KCksIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlYWRCdWZmZXItPmRhdGEp
LCBieXRlc1RvUmVhZCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGlmIChieXRlc1JlYWQg
PT0gLTEpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEsIC0xKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYnl0ZXNSZWFkKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgQVNTRVJUKGJ5dGVzUmVhZCA+IDApOworICAgICAg
ICBmaWxsRGF0YUZyb21SZWFkQnVmZmVyKHJlYWRCdWZmZXIuZ2V0KCksIHN0YXRpY19jYXN0PHNp
emVfdD4oYnl0ZXNSZWFkKSwgZGF0YSk7CisKKyAgICAgICAgcGVuZGluZ0J5dGVzVG9SZWFkID0g
c2l6ZSAtIGRhdGEuc2l6ZSgpOworICAgICAgICBieXRlc1RvUmVhZCA9IHN0ZDo6bWluKHBlbmRp
bmdCeXRlc1RvUmVhZCwgcmVhZEJ1ZmZlci0+bGVuZ3RoKTsKKyAgICB9IHdoaWxlIChwZW5kaW5n
Qnl0ZXNUb1JlYWQpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgMCk7Cit9CisKK3N0
cnVjdCBXcml0ZUFzeW5jRGF0YSB7CisgICAgUmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbDsKKyAg
ICBHUmVmUHRyPFNvdXBCdWZmZXI+IGJ1ZmZlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGlu
dCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyOworfTsKKworc3RhdGljIHZvaWQgb3V0cHV0U3Ry
ZWFtV3JpdGVSZWFkeUNhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxXcml0
ZUFzeW5jRGF0YT4gYXN5bmNEYXRhKHN0YXRpY19jYXN0PFdyaXRlQXN5bmNEYXRhKj4odXNlckRh
dGEpKTsKKyAgICBnc3NpemUgYnl0ZXNXcml0dGVuID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2Zp
bmlzaChzdHJlYW0sIHJlc3VsdCwgbnVsbHB0cik7CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAt
MSkgeworICAgICAgICBhc3luY0RhdGEtPmNvbXBsZXRpb25IYW5kbGVyKC0xKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGdzc2l6ZSBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gYXN5bmNE
YXRhLT5idWZmZXItPmxlbmd0aCAtIGJ5dGVzV3JpdHRlbjsKKyAgICBpZiAoIXBlbmRpbmdCeXRl
c1RvV3JpdGUpIHsKKyAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzeW5jRGF0YS0+YnVmZmVyID0gYWRvcHRHUmVm
KHNvdXBfYnVmZmVyX25ld19zdWJidWZmZXIoYXN5bmNEYXRhLT5idWZmZXIuZ2V0KCksIGJ5dGVz
V3JpdHRlbiwgcGVuZGluZ0J5dGVzVG9Xcml0ZSkpOworICAgIGF1dG8gZGF0YSA9IGFzeW5jRGF0
YS0+YnVmZmVyLT5kYXRhOworICAgIHVzZXJEYXRhID0gYXN5bmNEYXRhLnJlbGVhc2UoKTsKKyAg
ICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMoc3RyZWFtLCBkYXRhLCBwZW5kaW5nQnl0ZXNU
b1dyaXRlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFtV3JpdGVSZWFkeUNhbGxiYWNr
KSwgdXNlckRhdGEpOworfQorCit2b2lkIElPQ2hhbm5lbDo6d3JpdGUoc2l6ZV90IG9mZnNldCwg
Y29uc3QgRGF0YSYgZGF0YSwgV29ya1F1ZXVlKiwgc3RkOjpmdW5jdGlvbjx2b2lkIChpbnQgZXJy
b3IpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQobV9vdXRwdXRTdHJlYW0gfHwg
bV9pb1N0cmVhbSk7CisKKyAgICBHT3V0cHV0U3RyZWFtKiBzdHJlYW0gPSBtX291dHB1dFN0cmVh
bSA/IG1fb3V0cHV0U3RyZWFtLmdldCgpIDogZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0o
R19JT19TVFJFQU0obV9pb1N0cmVhbS5nZXQoKSkpOworICAgIFdyaXRlQXN5bmNEYXRhKiBhc3lu
Y0RhdGEgPSBuZXcgV3JpdGVBc3luY0RhdGEgeyB0aGlzLCBkYXRhLnNvdXBCdWZmZXIoKSwgY29t
cGxldGlvbkhhbmRsZXIgfTsKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IG9mZnNldC4KKyAgICBn
X291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMoc3RyZWFtLCBhc3luY0RhdGEtPmJ1ZmZlci0+ZGF0
YSwgZGF0YS5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwKKyAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihvdXRwdXRTdHJlYW1Xcml0ZVJlYWR5
Q2FsbGJhY2spLCBhc3luY0RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VTb3VwLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VTb3Vw
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4MzdkOS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
U291cC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJz
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1zdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5ID0g
IldlYktpdENhY2hlIjsKLQotTmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0YTo6RGF0YSgpCi0gICAg
OiBtX2RhdGEobnVsbHB0cikKLSAgICAsIG1fc2l6ZSgwKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLU5ldHdvcmtDYWNoZVN0b3JhZ2U6OkRhdGE6OkRhdGEoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpCi0gICAgOiBtX2RhdGEoZGF0YSkKLSAgICAsIG1fc2l6ZShzaXpl
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWNvbnN0IHVpbnQ4X3QqIE5ldHdvcmtD
YWNoZVN0b3JhZ2U6OkRhdGE6OmRhdGEoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgTmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0
YTo6aXNOdWxsKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZT4gTmV0d29ya0Nh
Y2hlU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uQ2FjaGVQYXRoKQotewot
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgU3RyaW5nIG5ldHdvcmtDYWNoZVBh
dGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYXBwbGljYXRpb25DYWNoZVBh
dGgsIG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeSk7Ci0gICAgaWYgKCFXZWJDb3JlOjptYWtlQWxs
RGlyZWN0b3JpZXMobmV0d29ya0NhY2hlUGF0aCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RvcmFnZT4obmV3IE5ldHdv
cmtDYWNoZVN0b3JhZ2UobmV0d29ya0NhY2hlUGF0aCkpOwotfQotCi1OZXR3b3JrQ2FjaGVTdG9y
YWdlOjpOZXR3b3JrQ2FjaGVTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCkKLSAg
ICA6IG1fZGlyZWN0b3J5UGF0aChkaXJlY3RvcnlQYXRoKQotICAgICwgbV9tYXhpbXVtU2l6ZShz
dGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQotICAgICwgbV9hY3RpdmVSZXRyaWV2
ZU9wZXJhdGlvbkNvdW50KDApCi17Ci0gICAgaW5pdGlhbGl6ZUtleUZpbHRlcigpOwotfQotCi12
b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmluaXRpYWxpemVLZXlGaWx0ZXIoKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZW1vdmVFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVLZXkm
KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNwYXRjaFJldHJpZXZlT3BlcmF0
aW9uKGNvbnN0IFJldHJpZXZlT3BlcmF0aW9uJikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3Rv
cmFnZTo6ZGlzcGF0Y2hQZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zKCkKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0
d29ya0NhY2hlU3RvcmFnZTo6cmV0cmlldmUoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgdW5zaWdu
ZWQgLyogcHJpb3JpdHkgKi8sIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKLX0KLQotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpzdG9yZShjb25zdCBOZXR3b3JrQ2Fj
aGVLZXkmLCBjb25zdCBFbnRyeSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNzKT4g
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLX0KLQot
dm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpzZXRNYXhpbXVtU2l6ZShzaXplX3Qgc2l6ZSkKLXsK
LSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgbV9tYXhpbXVtU2l6ZSA9IHNpemU7Ci19Ci0KLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6
Y2xlYXIoKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgTE9HKE5ldHdv
cmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICBtX2tleUZpbHRlci5jbGVhcigpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFp
bkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nl
c3NNYWluR3RrLmNwcAppbmRleCBmYTBhOTcwLi42ODU1ZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWluR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9ndGsvTmV0d29ya1Byb2Nlc3NNYWluR3Rr
LmNwcApAQCAtNDgsMTAgKzQ4LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGxhdGZvcm1GaW5h
bGl6ZSgpIG92ZXJyaWRlCiAgICAgeworI2lmICFFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICAg
ICAgaWYgKFNvdXBDYWNoZSogc291cENhY2hlID0gU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0
U2Vzc2lvbigpLmNhY2hlKCkpIHsKICAgICAgICAgICAgIHNvdXBfY2FjaGVfZmx1c2goc291cENh
Y2hlKTsKICAgICAgICAgICAgIHNvdXBfY2FjaGVfZHVtcChzb3VwQ2FjaGUpOwogICAgICAgICB9
CisjZW5kaWYKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggZGZmNzYxNi4uZTI3
MWRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKIAorI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFyLmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlci5oIgpAQCAtNDQsNiArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKKyNpZiAhRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiBz
dGF0aWMgdWludDY0X3QgZ2V0Q2FjaGVEaXNrRnJlZVNpemUoU291cENhY2hlKiBjYWNoZSkKIHsK
ICAgICBBU1NFUlQoY2FjaGUpOwpAQCAtNTUsNiArNTcsNyBAQCBzdGF0aWMgdWludDY0X3QgZ2V0
Q2FjaGVEaXNrRnJlZVNpemUoU291cENhY2hlKiBjYWNoZSkKIAogICAgIHJldHVybiBXZWJDb3Jl
OjpnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY2FjaGVEaXIuZ2V0KCkpOwogfQorI2VuZGlmCiAK
IHN0YXRpYyB1aW50NjRfdCBnZXRNZW1vcnlTaXplKCkKIHsKQEAgLTgzLDcgKzg2LDE0IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBsYW5ndWFnCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKIHsKICAgICBBU1NFUlQoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0
b3J5LmlzRW1wdHkoKSk7CisgICAgbV9kaXNrQ2FjaGVEaXJlY3RvcnkgPSBwYXJhbWV0ZXJzLmRp
c2tDYWNoZURpcmVjdG9yeTsKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorICAgIC8vIENs
ZWFyIHRoZSBvbGQgc291cCBjYWNoZSBpZiBpdCBleGlzdHMuCisgICAgU291cE5ldHdvcmtTZXNz
aW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNsZWFyQ2FjaGUobV9kaXNrQ2FjaGVEaXJlY3RvcnkpOwog
CisgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2lu
Zyk7CisjZWxzZQogICAgIC8vIFdlIHVzZWQgdG8gdXNlIHRoZSBnaXZlbiBjYWNoZSBkaXJlY3Rv
cnkgZm9yIHRoZSBzb3VwIGNhY2hlLCBidXQgbm93IHdlIHVzZSBhIHN1YmRpcmVjdG9yeSB0byBh
dm9pZAogICAgIC8vIGNvbmZsaWN0cyB3aXRoIG90aGVyIGNhY2hlIGZpbGVzIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4gUmVtb3ZlIHRoZSBvbGQgY2FjaGUgZmlsZXMgaWYgdGhleSBzdGlsbCBleGlz
dC4KICAgICBTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuY2xlYXJDYWNoZShw
YXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeSk7CkBAIC05Nyw2ICsxMDcsNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aQogICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXplKHNvdXBDYWNoZS5n
ZXQoKSwgR19NQVhVSU5UKTsKICAgICBzb3VwX2NhY2hlX2xvYWQoc291cENhY2hlLmdldCgpKTsK
ICAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShzb3VwQ2FjaGUuZ2V0KCksIGluaXRpYWxNYXhT
aXplKTsKKyNlbmRpZgogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlUGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlUGF0aCwKQEAgLTEyMSwxNiArMTMyLDI2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgdW5zaWdu
ZWQgbG9uZyB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25lZCBsb25nIHVy
bENhY2hlRGlza0NhcGFjaXR5ID0gMDsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorICAg
IHVpbnQ2NF90IGRpc2tGcmVlU2l6ZSA9IFdlYkNvcmU6OmdldFZvbHVtZUZyZWVTaXplRm9yUGF0
aChtX2Rpc2tDYWNoZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKSAvIDEwMjQgLyAxMDI0OworI2Vs
c2UKICAgICBTb3VwQ2FjaGUqIGNhY2hlID0gU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vz
c2lvbigpLmNhY2hlKCk7CiAgICAgdWludDY0X3QgZGlza0ZyZWVTaXplID0gZ2V0Q2FjaGVEaXNr
RnJlZVNpemUoY2FjaGUpIC8gMTAyNCAvIDEwMjQ7CisjZW5kaWYKIAogICAgIHVpbnQ2NF90IG1l
bVNpemUgPSBnZXRNZW1vcnlTaXplKCk7CiAgICAgY2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNoZU1v
ZGVsLCBtZW1TaXplLCBkaXNrRnJlZVNpemUsCiAgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSwg
Y2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBkZWFkRGVjb2RlZERh
dGFEZWxldGlvbkludGVydmFsLAogICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSwgdXJsQ2FjaGVN
ZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCisgICAgYXV0byYgbmV0d29ya0NhY2hlID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0
b24oKTsKKyAgICBpZiAobmV0d29ya0NhY2hlLmlzRW5hYmxlZCgpKQorICAgICAgICBuZXR3b3Jr
Q2FjaGUuc2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworI2Vsc2UKICAgICBpZiAo
dXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPiBzb3VwX2NhY2hlX2dldF9tYXhfc2l6ZShjYWNoZSkpCiAg
ICAgICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXplKGNhY2hlLCB1cmxDYWNoZURpc2tDYXBhY2l0
eSk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3Jz
KGJvb2wgaWdub3JlVExTRXJyb3JzKQpAQCAtMTU0LDcgKzE3NSwxMSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6dGltZV9wb2ludCAvKiBtb2RpZmllZFNpbmNlICovLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IC8qIGNvbXBsZXRpb25IYW5kbGVyICovKQogewogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5
IHRvIG9ubHkgY2xlYXIgYSBwYXJ0IG9mIHRoZSBjYWNoZSBiYXNlZCBvbiB0aGUgZGF0ZS4KKyNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmNs
ZWFyKCk7CisjZWxzZQogICAgIHNvdXBfY2FjaGVfY2xlYXIoU291cE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCkpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtVGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYjAy
ZTk0Ny4uNDg1YTlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE4LDcgKzE4LDgg
QEAgc2V0KFdlYktpdDJfVVNFX1BSRUZJWF9IRUFERVIgT04pCiBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBEYXRhYmFzZVByb2Nlc3MvZ3RrL0RhdGFiYXNlUHJvY2Vzc01haW5HdGsu
Y3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlU291cC5j
cHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKKyAg
ICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAogCiAg
ICAgTmV0d29ya1Byb2Nlc3MvZ3RrL05ldHdvcmtQcm9jZXNzTWFpbkd0ay5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvY29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApp
bmRleCBiYzlhYzI5Li4xNmRlYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtODIsNyArODIsNyBAQAogI2VuZGlm
CiAKICNpZm5kZWYgRU5BQkxFX05FVFdPUktfQ0FDSEUKLSNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKSAmJiBQTEFURk9STShDT0NPQSkKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKSAmJiAo
UExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykpCiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JL
X0NBQ0hFIDEKICNlbHNlCiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hFIDAK
</data>
<flag name="review"
          id="276455"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>