<?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>197684</bug_id>
          
          <creation_ts>2019-05-07 21:07:48 -0700</creation_ts>
          <short_desc>[Win] Implement NetworkCache::Data by using FileSystem::MappedFileData</short_desc>
          <delta_ts>2020-02-26 14:41:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>207807</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Christopher Reid">chris.reid</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>basuke</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>chris.reid</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>cturner</cc>
    
    <cc>dbates</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>koivisto</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>stephan.szabo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1534235</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-05-07 21:07:48 -0700</bug_when>
    <thetext>[Win] Implement NetworkCache::Data by using FileSystem::MappedFileData

We need to implement FileSystem::MappedFileData for Windows first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534237</commentid>
    <comment_count>1</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-05-07 21:10:25 -0700</bug_when>
    <thetext>See also Bug 196289 Comment 28.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539327</commentid>
    <comment_count>2</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-05-26 22:11:18 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #0)
&gt; We need to implement FileSystem::MappedFileData for Windows first.

Filed this in Bug 198269.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613178</commentid>
    <comment_count>3</comment_count>
      <attachid>389293</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-01-30 15:35:34 -0800</bug_when>
    <thetext>Created attachment 389293
patch

WinCairo now passes 30/31 disk-cache tests with these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613201</commentid>
    <comment_count>4</comment_count>
      <attachid>389299</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-01-30 16:24:03 -0800</bug_when>
    <thetext>Created attachment 389299
patch

Fixing style and GTK/Mac build issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613570</commentid>
    <comment_count>5</comment_count>
      <attachid>389410</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-01-31 13:56:08 -0800</bug_when>
    <thetext>Created attachment 389410
patch

more build fixes and fixing GTK assert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613575</commentid>
    <comment_count>6</comment_count>
      <attachid>389411</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-01-31 13:59:41 -0800</bug_when>
    <thetext>Created attachment 389411
patch

style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613644</commentid>
    <comment_count>7</comment_count>
      <attachid>389437</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-01-31 16:11:06 -0800</bug_when>
    <thetext>Created attachment 389437
patch

Adding flag to FileSystem::openFile can open with 0600 directly instead of 0666 then fchmod to 0600.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613647</commentid>
    <comment_count>8</comment_count>
      <attachid>389438</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-01-31 16:20:43 -0800</bug_when>
    <thetext>Created attachment 389438
patch

fixing mac builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613859</commentid>
    <comment_count>9</comment_count>
      <attachid>389438</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-02-02 20:13:30 -0800</bug_when>
    <thetext>Comment on attachment 389438
patch

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

&gt; LayoutTests/platform/wincairo/TestExpectations:856
&gt; +

Sort alphabetically. Put http/tests/cache/* after http/tests/blink/sendbeacon before http/tests/cache-storage .

&gt; Source/WTF/wtf/win/FileSystemWin.cpp:439
&gt; +        creationDisposition = CREATE_ALWAYS;

CREATE_ALWAYS always truncates the file. Why is this OK?

&gt; Source/WTF/wtf/win/PathWalker.cpp:35
&gt; +    String path = makeString(directory, &quot;\\&quot;_s, pattern);

&apos;\\&apos; is slightly better than &quot;\\&quot;_s.

&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheDataCurl.cpp:47
&gt; +    return Data(WTF::nullopt);

This is null Data. Data::empty() returns the empty Data in other ports. Is this OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614341</commentid>
    <comment_count>10</comment_count>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-03 18:50:41 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #9)
&gt; Comment on attachment 389438 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=389438&amp;action=review
&gt; 
&gt; &gt; LayoutTests/platform/wincairo/TestExpectations:856
&gt; &gt; +
&gt; 
&gt; Sort alphabetically. Put http/tests/cache/* after
&gt; http/tests/blink/sendbeacon before http/tests/cache-storage .
&gt; 
will fix this.

&gt; &gt; Source/WTF/wtf/win/FileSystemWin.cpp:439
&gt; &gt; +        creationDisposition = CREATE_ALWAYS;
&gt; 
&gt; CREATE_ALWAYS always truncates the file. Why is this OK?
&gt; 
It seems like this was only working for this case because if the file exists it gets deleted before this call so it&apos;s not called with a non-empty file. https://github.com/WebKit/webkit/blob/master/Source/WebKit/NetworkProcess/cache/NetworkCacheBlobStorage.cpp#L111.
O_RDWR doesn&apos;t seem needed for this case then.

&gt; &gt; Source/WTF/wtf/win/PathWalker.cpp:35
&gt; &gt; +    String path = makeString(directory, &quot;\\&quot;_s, pattern);
&gt; 
&gt; &apos;\\&apos; is slightly better than &quot;\\&quot;_s.
&gt; 
will fix this.

&gt; &gt; Source/WebKit/NetworkProcess/cache/NetworkCacheDataCurl.cpp:47
&gt; &gt; +    return Data(WTF::nullopt);
&gt; 
&gt; This is null Data. Data::empty() returns the empty Data in other ports. Is
&gt; this OK?
Right, this should use an empty vector instead of null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614774</commentid>
    <comment_count>11</comment_count>
      <attachid>389719</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-04 15:10:23 -0800</bug_when>
    <thetext>Created attachment 389719
patch

updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615150</commentid>
    <comment_count>12</comment_count>
      <attachid>389719</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-02-05 11:26:49 -0800</bug_when>
    <thetext>Comment on attachment 389719
patch

I think this patch looks good from the Windows code standpoint, but we need Antti or another cache person to double-check the cache logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615336</commentid>
    <comment_count>13</comment_count>
      <attachid>389719</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-05 15:32:45 -0800</bug_when>
    <thetext>Comment on attachment 389719
patch

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

&gt; Source/WTF/wtf/FileSystem.cpp:336
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

Could we remove the default and put EventsOnly?

&gt; Source/WTF/wtf/FileSystem.h:87
&gt; +enum class FileAccessPermission {

: bool

&gt; Source/WTF/wtf/posix/FileSystemPOSIX.cpp:96
&gt;          platformFlag |= O_EVTONLY;

Please also change this to a switch.

&gt; Source/WTF/wtf/win/FileSystemWin.cpp:638
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

Again, please remove the default.

&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheDataCurl.cpp:96
&gt; +    memcpy(buffer.data(), map, size);

Do we really want this memcpy here?  Doesn&apos;t that defeat the purpose of having mapped memory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615385</commentid>
    <comment_count>14</comment_count>
      <attachid>389719</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-02-05 16:25:32 -0800</bug_when>
    <thetext>Comment on attachment 389719
patch

Overall it&apos;s super nice to see common code being cleaned up and operating
system specific guards being removed \o/

Adding to Alex&apos;s comments, the changes to the GLib/Soup/Unix bits look good
to me, with the caveat that the API test /webkit/WebKitWebsiteData/databases
is not supposed to be flaky so I would say we need it to keep it passing
before we can land this—please drop me a line (or anyone else) on IRC if
you need a hand figuring out why it might be failing :-]


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

&gt; Source/WTF/wtf/posix/FileSystemPOSIX.cpp:103
&gt; +        permissionFlag |= 0666;

I would probably use (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
for the sake of consistency, even though 0666 is a common idiom.

(Note: with _BSD_SOURCE there is a DEFFILEMODE macro which expands to
the expression above, but it won&apos;t be available in all systems so I&apos;d
rather avoid using this macro.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617610</commentid>
    <comment_count>15</comment_count>
      <attachid>390418</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-11 13:59:25 -0800</bug_when>
    <thetext>Created attachment 390418
patch

Updated patch addressing comments from Alex and Adrian.

I updated NetworkCacheDataCurl to use a ref counted Variant&lt;Vector&lt;uint8_t&gt;, FileSystem::MappedFileData&gt; to act like the ref counted buffers for mmap/allocated containers in Soup and Mac ports so the mapped file can be kept around.

I&apos;ll be digging in to that GTK failure today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617901</commentid>
    <comment_count>16</comment_count>
      <attachid>390418</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-02-12 01:49:51 -0800</bug_when>
    <thetext>Comment on attachment 390418
patch

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

&gt; Source/WTF/wtf/win/FileSystemWin.cpp:-438
&gt; -        ASSERT_NOT_REACHED();

Why did you remove this ASSERT_NOT_REACHED? IIRC, MSVC reports compilation warnings.

&gt; Source/WTF/wtf/win/FileSystemWin.cpp:551
&gt; +    if (!GetDiskFreeSpaceExW(path.wideCharacters().data(), &amp;freeBytesAvailableToCaller, &amp;totalNumberOfBytes, &amp;totalNumberOfFreeBytes))

GetDiskFreeSpaceExW can take NULL. Replace totalNumberOfBytes, totalNumberOfFreeBytes with nullptr.

&gt; Source/WTF/wtf/win/FileSystemWin.cpp:554
&gt; +    if (freeBytesAvailableToCaller.QuadPart &gt; static_cast&lt;ULONGLONG&gt;(std::numeric_limits&lt;uint64_t&gt;::max()))

ULONGLONG and uint64_t are same in x64 Windows. Is this code only for 32bit Windows?
If so, how about enclosing it with #if defined(_M_IX86).
https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types

&gt; Source/WTF/wtf/win/FileSystemWin.cpp:555
&gt; +        return false;

If you have plenty of storage, it always return false.
What do you think returning std::numeric_limits&lt;uint64_t&gt;::max() in this case?

&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheData.h:102
&gt; +    Box&lt;Variant&lt;Vector&lt;uint8_t&gt;, FileSystem::MappedFileData&gt;&gt; m_buffer;

Box&lt;T&gt; manages T as ThreadSafeRefCounted. Do you need to manage T by thread-safe and ref-counted?
What about using Optional&lt;T&gt; or unique_ptr&lt;T&gt; ?
Variant is already marked by WTF_MAKE_FAST_ALLOCATED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617931</commentid>
    <comment_count>17</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2020-02-12 04:09:55 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #16)
&gt; Comment on attachment 390418 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=390418&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/win/FileSystemWin.cpp:-438
&gt; &gt; -        ASSERT_NOT_REACHED();
&gt; 
&gt; Why did you remove this ASSERT_NOT_REACHED? IIRC, MSVC reports compilation
&gt; warnings.

If assert is really needed to avoid warning, then release build should have this warning because it&apos;s not a RELEASE_ASSERT_NOT_REACHED()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618212</commentid>
    <comment_count>18</comment_count>
      <attachid>390418</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-12 14:03:39 -0800</bug_when>
    <thetext>Comment on attachment 390418
patch

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

&gt;&gt;&gt; Source/WTF/wtf/win/FileSystemWin.cpp:-438
&gt;&gt;&gt; -        ASSERT_NOT_REACHED();
&gt;&gt; 
&gt;&gt; Why did you remove this ASSERT_NOT_REACHED? IIRC, MSVC reports compilation warnings.
&gt; 
&gt; If assert is really needed to avoid warning, then release build should have this warning because it&apos;s not a RELEASE_ASSERT_NOT_REACHED()

Right should be a warning in MSVC if there was an unhandled enum class value. All the FileOpenMode cases for windows are handled here so we shouldn&apos;t get a warning.

&gt;&gt; Source/WTF/wtf/win/FileSystemWin.cpp:551
&gt;&gt; +    if (!GetDiskFreeSpaceExW(path.wideCharacters().data(), &amp;freeBytesAvailableToCaller, &amp;totalNumberOfBytes, &amp;totalNumberOfFreeBytes))
&gt; 
&gt; GetDiskFreeSpaceExW can take NULL. Replace totalNumberOfBytes, totalNumberOfFreeBytes with nullptr.

That&apos;s good to know, I&apos;ll take them out.

&gt;&gt; Source/WTF/wtf/win/FileSystemWin.cpp:554
&gt;&gt; +    if (freeBytesAvailableToCaller.QuadPart &gt; static_cast&lt;ULONGLONG&gt;(std::numeric_limits&lt;uint64_t&gt;::max()))
&gt; 
&gt; ULONGLONG and uint64_t are same in x64 Windows. Is this code only for 32bit Windows?
&gt; If so, how about enclosing it with #if defined(_M_IX86).
&gt; https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types

Oh yeah this seems pretty redundant even on 32-bit windows.
On 32-bit ULONGLONG and uint64_t should still both have at least 64-bits of storage.
I&apos;ll remove this check.

&gt;&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheData.h:102
&gt;&gt; +    Box&lt;Variant&lt;Vector&lt;uint8_t&gt;, FileSystem::MappedFileData&gt;&gt; m_buffer;
&gt; 
&gt; Box&lt;T&gt; manages T as ThreadSafeRefCounted. Do you need to manage T by thread-safe and ref-counted?
&gt; What about using Optional&lt;T&gt; or unique_ptr&lt;T&gt; ?
&gt; Variant is already marked by WTF_MAKE_FAST_ALLOCATED.

I used this ref-counted container here because there&apos;s currently some cases where this class is copied and needs to manage multiple instances of the data.
The case I remember seeing was https://github.com/WebKit/webkit/blob/master/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp#L99</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618750</commentid>
    <comment_count>19</comment_count>
      <attachid>390697</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-13 15:32:10 -0800</bug_when>
    <thetext>Created attachment 390697
patch

Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618756</commentid>
    <comment_count>20</comment_count>
      <attachid>390698</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-13 15:38:39 -0800</bug_when>
    <thetext>Created attachment 390698
patch

Style fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618760</commentid>
    <comment_count>21</comment_count>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-13 15:48:23 -0800</bug_when>
    <thetext>This should also fix the GTK failure.

It seemed to be a pre-existing problem where the CacheStorage directory wasn&apos;t being created for ports without SandboxExtensions.

Before trying to open CacheStorage/salt was failing silently.
Now with these FileSystem changes GTK&apos;s writeToFile fails an assert if the handle isn&apos;t valid.

That directory should now be created properly for all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618815</commentid>
    <comment_count>22</comment_count>
      <attachid>390698</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-02-13 18:09:51 -0800</bug_when>
    <thetext>Comment on attachment 390698
patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618913</commentid>
    <comment_count>23</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-02-14 02:04:25 -0800</bug_when>
    <thetext>(In reply to Christopher Reid from comment #21)
&gt; This should also fix the GTK failure.
&gt; 
&gt; It seemed to be a pre-existing problem where the CacheStorage directory
&gt; wasn&apos;t being created for ports without SandboxExtensions.
&gt; 
&gt; Before trying to open CacheStorage/salt was failing silently.
&gt; Now with these FileSystem changes GTK&apos;s writeToFile fails an assert if the
&gt; handle isn&apos;t valid.
&gt; 
&gt; That directory should now be created properly for all ports.

Nicer find! 💪</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619128</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-14 12:05:51 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 390698:

editing/spelling/spellcheck-async-remove-frame.html bug 158401 (authors: morrita@google.com, rniwa@webkit.org, and tony@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619130</commentid>
    <comment_count>25</comment_count>
      <attachid>390698</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-14 12:06:33 -0800</bug_when>
    <thetext>Comment on attachment 390698
patch

Clearing flags on attachment: 390698

Committed r256633: &lt;https://trac.webkit.org/changeset/256633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619131</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-14 12:06:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619132</commentid>
    <comment_count>27</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-14 12:07:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/59467397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619373</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-14 22:46:47 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 207807</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620465</commentid>
    <comment_count>29</comment_count>
      <attachid>391124</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-18 18:48:15 -0800</bug_when>
    <thetext>Created attachment 391124
patch

I ended up re-adding FileOpenMode::ReadWrite since mmap was failing on FileSystemPOSIX when the file was created with O_WRONLY. That caused the memory regression in Mac.

I also wanted to check if O_EXCL is needed on this NetworkCacheData mapped file before re-landing. I didn&apos;t carry it over to FileSystem::openFile implementations since I don&apos;t think most openFile calls using ReadWrite will want to always create a file. Also the parent directory for the caches are created with S_IRWXU access.

If O_EXCL is needed it might make sense then to have something like a FileSystem::createFile call that fails if the file already exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620467</commentid>
    <comment_count>30</comment_count>
      <attachid>391126</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-18 18:51:57 -0800</bug_when>
    <thetext>Created attachment 391126
patch

fixing gtk build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620742</commentid>
    <comment_count>31</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-19 11:02:46 -0800</bug_when>
    <thetext>Note that I already run the patch offered by Chris and ensured that new patch does not cause Membuster regression on macOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621246</commentid>
    <comment_count>32</comment_count>
      <attachid>391126</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-02-20 09:09:42 -0800</bug_when>
    <thetext>Comment on attachment 391126
patch

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

&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheData.cpp:45
&gt; -    int fd = open(FileSystem::fileSystemRepresentation(path).data(), O_CREAT | O_EXCL | O_RDWR , S_IRUSR | S_IWUSR);
&gt; -    if (fd &lt; 0)
&gt; -        return { };
&gt; -
&gt; -    if (ftruncate(fd, m_size) &lt; 0) {
&gt; -        close(fd);
&gt; +    auto handle = FileSystem::openFile(path, FileSystem::FileOpenMode::ReadWrite, FileSystem::FileAccessPermission::User);
&gt; +    if (!FileSystem::truncateFile(handle, m_size)) {
&gt; +        FileSystem::closeFile(handle);

Please don&apos;t lose O_EXCL (or any other flags). Otherwise in error situation we&apos;l truncate a file backing an existing mapping. This will crash hard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621505</commentid>
    <comment_count>33</comment_count>
      <attachid>391361</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-20 17:35:43 -0800</bug_when>
    <thetext>Created attachment 391361
Patch

Added FileSystem::createFile to keep the O_EXCL flag. It will return an invalid handle if the file already exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621506</commentid>
    <comment_count>34</comment_count>
      <attachid>391362</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-20 17:39:27 -0800</bug_when>
    <thetext>Created attachment 391362
patch

mac build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621583</commentid>
    <comment_count>35</comment_count>
      <attachid>391362</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-02-20 23:47:47 -0800</bug_when>
    <thetext>Comment on attachment 391362
patch

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

&gt; Source/WTF/wtf/posix/FileSystemPOSIX.cpp:116
&gt; +PlatformFileHandle createFile(const String&amp; path, FileOpenMode mode, FileAccessPermission permission)

Can&apos;t exclusivness just be another parameter for openFile? Seems unnecessary to copy the whole function. Also your openFile can still create files and name createFile doesn&apos;t really communicate the difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622527</commentid>
    <comment_count>36</comment_count>
      <attachid>391632</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-25 00:49:03 -0800</bug_when>
    <thetext>Created attachment 391632
Patch

Added onlyCreateFile parameter to openFile instead of using a new function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622755</commentid>
    <comment_count>37</comment_count>
      <attachid>391685</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-25 14:18:06 -0800</bug_when>
    <thetext>Created attachment 391685
patch

Ensure the salt file is deleted if it exists but doesn&apos;t match the needed salt size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622850</commentid>
    <comment_count>38</comment_count>
      <attachid>391685</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-25 17:25:59 -0800</bug_when>
    <thetext>Comment on attachment 391685
patch

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

r=me

&gt; Source/WTF/ChangeLog:16
&gt; +        Added onlyCreateFile flag to openFile which causes openFile to fail if the file already exists.

We should name this flag as `failIfFileExists`

&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheData.cpp:43
&gt; +    auto handle = FileSystem::openFile(path, FileSystem::FileOpenMode::ReadWrite, FileSystem::FileAccessPermission::User, true);

Let&apos;s not pass boolean directly, it is hard to read what this bool means.

constexpr bool failIfFileExists = true;
auto handle = FileSystem::openFile(path, ..., failIfFileExists);

is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623056</commentid>
    <comment_count>39</comment_count>
      <attachid>391756</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-26 10:52:43 -0800</bug_when>
    <thetext>Created attachment 391756
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623058</commentid>
    <comment_count>40</comment_count>
      <attachid>391757</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-26 10:57:59 -0800</bug_when>
    <thetext>Created attachment 391757
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623082</commentid>
    <comment_count>41</comment_count>
      <attachid>391757</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 11:28:19 -0800</bug_when>
    <thetext>Comment on attachment 391757
Patch for landing

Rejecting attachment 391757 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 391757, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.

Full output: https://webkit-queues.webkit.org/results/13329377</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623124</commentid>
    <comment_count>42</comment_count>
      <attachid>391772</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-26 13:05:15 -0800</bug_when>
    <thetext>Created attachment 391772
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623153</commentid>
    <comment_count>43</comment_count>
      <attachid>391772</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 13:40:01 -0800</bug_when>
    <thetext>Comment on attachment 391772
Patch for landing

Rejecting attachment 391772 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 391772, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=391772&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=197684&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Updating working directory
Processing patch 391772 from bug 197684.
Fetching: https://bugs.webkit.org/attachment.cgi?id=391772
Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/platform/wincairo/TestExpectations
	M	Source/WTF/ChangeLog
	M	Source/WTF/wtf/FileSystem.cpp
	M	Source/WTF/wtf/FileSystem.h
	M	Source/WTF/wtf/glib/FileSystemGlib.cpp
	M	Source/WTF/wtf/posix/FileSystemPOSIX.cpp
	M	Source/WTF/wtf/win/FileSystemWin.cpp
	M	Source/WTF/wtf/win/PathWalker.cpp
	M	Source/WebKit/ChangeLog
	M	Source/WebKit/NetworkProcess/NetworkProcess.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheData.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheData.h
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheDataCocoa.mm
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheDataCurl.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheDataSoup.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheFileSystem.cpp
	M	Tools/ChangeLog
	M	Tools/TestWebKitAPI/Tests/WTF/FileSystem.cpp

ERROR from SVN:
Merge conflict during commit: Conflict at &apos;/trunk/LayoutTests/ChangeLog&apos;
W: c1bfafc7aabfe735fbd0fdaeed79acbf8a3a31be and refs/remotes/origin/master differ, using rebase:
:040000 040000 3715dea03ca78607882c1c315dd41b063fb3cfd7 148ef925334bff92d196d535b0dac66bb1037bda M	LayoutTests
:040000 040000 82adc380b74dda0797ee354f6e8bade45a6ddd51 8eee6c7b770d71aabbb3cc5bab7b21d43e8dbbeb M	Source
:040000 040000 57674841b68c9058d5d4bbfa659f2fbd7367d9b4 adfcec4e4cae19a6159741b7cffdddced27e95ec M	Tools
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/platform/wincairo/TestExpectations
	M	Source/WTF/ChangeLog
	M	Source/WTF/wtf/FileSystem.cpp
	M	Source/WTF/wtf/FileSystem.h
	M	Source/WTF/wtf/glib/FileSystemGlib.cpp
	M	Source/WTF/wtf/posix/FileSystemPOSIX.cpp
	M	Source/WTF/wtf/win/FileSystemWin.cpp
	M	Source/WTF/wtf/win/PathWalker.cpp
	M	Source/WebKit/ChangeLog
	M	Source/WebKit/NetworkProcess/NetworkProcess.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheData.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheData.h
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheDataCocoa.mm
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheDataCurl.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheDataSoup.cpp
	M	Source/WebKit/NetworkProcess/cache/NetworkCacheFileSystem.cpp
	M	Tools/ChangeLog
	M	Tools/TestWebKitAPI/Tests/WTF/FileSystem.cpp

ERROR from SVN:
Merge conflict during commit: Conflict at &apos;/trunk/LayoutTests/ChangeLog&apos;
W: c1bfafc7aabfe735fbd0fdaeed79acbf8a3a31be and refs/remotes/origin/master differ, using rebase:
:040000 040000 3715dea03ca78607882c1c315dd41b063fb3cfd7 148ef925334bff92d196d535b0dac66bb1037bda M	LayoutTests
:040000 040000 82adc380b74dda0797ee354f6e8bade45a6ddd51 8eee6c7b770d71aabbb3cc5bab7b21d43e8dbbeb M	Source
:040000 040000 57674841b68c9058d5d4bbfa659f2fbd7367d9b4 adfcec4e4cae19a6159741b7cffdddced27e95ec M	Tools
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
From https://git.webkit.org/git/WebKit
   3e82a3cc5f3..6e9734c7a4b  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 257504 = 3e82a3cc5f3052c3efd94f1fcd7e5a415cff6081
r257505 = a637395bea617d4b228aee28c27901a985d367d9
r257506 = 527e95c4d5abfe1debc954754e724863585b06b0
r257507 = c79f943807fc8c0263328fe23f54573a3f130024
r257508 = 6e9734c7a4b54261fe14c29ef4c46c599eb2f656
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
Total errors found: 0 in 1 files

Full output: https://webkit-queues.webkit.org/results/13329457</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623166</commentid>
    <comment_count>44</comment_count>
      <attachid>391776</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2020-02-26 13:57:59 -0800</bug_when>
    <thetext>Created attachment 391776
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623188</commentid>
    <comment_count>45</comment_count>
      <attachid>391776</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 14:41:45 -0800</bug_when>
    <thetext>Comment on attachment 391776
Patch for landing

Clearing flags on attachment: 391776

Committed r257518: &lt;https://trac.webkit.org/changeset/257518&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623189</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 14:41:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389293</attachid>
            <date>2020-01-30 15:35:34 -0800</date>
            <delta_ts>2020-01-30 16:24:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>197684.diff</filename>
            <type>text/plain</type>
            <size>28046</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmJiY2E5NzdlNjIx
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCwxMiArODM4LDIyIEBAIHdlYmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxl
LVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGCiAKIGh0dHAvdGVz
dHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVzdHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAg
XQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50Zmls
dGVyaW5nIFsgU2tpcCBdCiAKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2No
IGJlaGF2aW9yIHNwZWNpZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rp
c2stY2FjaGUtbGFzdC1tb2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBp
bnZlc3RpZ2F0aW9uCitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMu
aHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxp
ZGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2Fj
aGUtaWZyYW1lLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQt
Y2FjaGUuaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3Qt
cmV0dXJucy1udWxsLWZvci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0
dHAvdGVzdHMvY29va2llcy9jb29raWUtd2l0aC1tdWx0aXBsZS1sZXZlbC1wYXRoLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9jb29raWVzL2RvdWJsZS1xdW90ZWQtdmFsdWUtd2l0
aC1zZW1pLWNvbG9uLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvY29va2llcy9odHRwLWdl
dC1jb29raWUtc2V0LWluLWpzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmY2U5NjI2NmIx
ZC4uNDk2OWVmYjNjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9w
aGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVu
dCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIEFkZGVk
IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHNvIG9wZW5GaWxlIHdpdGggUmVhZFdyaXRlIG1hcHBp
bmdzLgorICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBSZWFkV3JpdGUgbWFwcGluZ3MK
KworICAgICAgICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgU3VwcG9ydCBvcGVuaW5nIGZpbGVz
IHdpdGggUmVhZFdyaXRlIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwOgorICAgICAgICBJbXBsZW1lbnQgZ2V0Vm9sdW1lRnJlZVNwYWNlIHNpbmNlIHNv
bWUgb2YgdGhlIHRlc3RzIHVzZSBpdCB3aGVuIHRvZ2dsaW5nIGNhY2hlLgorICAgICAgICAKKwor
ICAgICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisgICAgICAgIFRyZWF0IFN0cmluZygp
IGZpbHRlciBhcyAiKiIgdG8gbWF0Y2ggUE9TSVggYmVoYXZpb3IuCisKIDIwMjAtMDEtMTMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBldmVuIG1vcmUgInNo
b3J0ZXN0IGZvcm0iIGZvcm1hdHRpbmcsIGFuZCBsZXNzICJmaXhlZCBwcmVjaXNpb24iIGFuZCAi
Zml4ZWQgd2lkdGgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcyZjk1M2VhYjNmLi5jNDY2NTQy
MjExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAgLTI4NywxNyArMjg3LDE3IEBAIE1hcHBlZEZp
bGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogICAgIHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRh
LCBtX2ZpbGVTaXplKTsKIH0KIAotI2lmIEhBVkUoTU1BUCkKLQotTWFwcGVkRmlsZURhdGE6Ok1h
cHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUs
IGJvb2wmIHN1Y2Nlc3MpCitNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsK
LSAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVPcGVuTW9kZTo6UmVhZCk7Cisg
ICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OlJlYWQpOwogCi0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIG1vZGUpOworICAgIHN1
Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOwogICAgIGNsb3NlRmlsZShmZCk7CiB9CiAKLWJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUg
bW9kZSkKKyNpZiBIQVZFKE1NQVApCisKK2Jvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBw
ZWRGaWxlTW9kZSBtYXBNb2RlKQogewogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQsNyArMzI0LDIyIEBAIGJvb2wgTWFwcGVkRmls
ZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbW9kCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQqIGRhdGEg
PSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCwgTUFQX0ZJTEUgfCAobW9kZSA9PSBNYXBwZWRGaWxl
TW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOworICAgIGlu
dCBwYWdlUHJvdGVjdGlvbjsKKyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxl
T3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CisgICAgICAgIHBhZ2VQ
cm90ZWN0aW9uID0gUFJPVF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Bl
bk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBw
YWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hh
cmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAgICAgaWYgKGRhdGEg
PT0gTUFQX0ZBSUxFRCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5k
ZXggODA1YTBlNGIxNmYuLjg1ZWRjNGNmZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCkBAIC03OSw2ICs3
OSw3IEBAIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
ID0gLTE7CiBlbnVtIGNsYXNzIEZpbGVPcGVuTW9kZSB7CiAgICAgUmVhZCwKICAgICBXcml0ZSwK
KyAgICBSZWFkV3JpdGUsCiAjaWYgT1MoREFSV0lOKQogICAgIEV2ZW50c09ubHksCiAjZW5kaWYK
QEAgLTIwNiw2ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgTWFwcGVkRmlsZURhdGEoTWFwcGVkRmls
ZURhdGEmJik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0
cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBNYXBwZWRG
aWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZp
bGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRG
aWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBwZWRG
aWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURhdGEm
Jik7CiAKQEAgLTIxNiwxNSArMjE4LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBsZWFrSGFuZGxl
KCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQogCiBwcml2
YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZvcm1G
aWxlSGFuZGxlLCBNYXBwZWRGaWxlTW9kZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVkRmls
ZU1vZGUpOwogCiAgICAgdm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25l
ZCBtX2ZpbGVTaXplIHsgMCB9OwogfTsKIAotaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRG
aWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBi
b29sJiBzdWNjZXNzKQoraW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNj
ZXNzKQogewotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgbW9kZSk7CisgICAg
c3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1v
ZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUg
bWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZSho
YW5kbGUsIG9wZW5Nb2RlLCBtYXBNb2RlKTsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpN
YXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0Zp
bGVTeXN0ZW1HbGliLmNwcAppbmRleCA4NmMwNGY5ZDVlMS4uOGNhOTRkMTIyYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0zNDgsNyArMzQ4LDcgQEAgUGxhdGZv
cm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1v
ZGUpCiAgICAgR1JlZlB0cjxHRmlsZUlPU3RyZWFtPiBpb1N0cmVhbTsKICAgICBpZiAobW9kZSA9
PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmls
ZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgZWxz
ZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAobW9kZSA9
PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUp
IHsKICAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGljX2Nhc3Q8
R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkp
CiAgICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3JpdGUo
ZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgICAgICBlbHNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93
dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCAyNzgzOTg4M2ExYS4uMTRhMjM1ZWZi
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtOTEsNiAr
OTEsOCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBG
aWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwogICAg
IGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKICAgICAgICAgcGxhdGZvcm1G
bGFnIHw9IChPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKKyAgICBlbHNlIGlmIChtb2Rl
ID09IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlKQorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9f
UkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKICNpZiBPUyhEQVJXSU4pCiAgICAgZWxzZSBpZiAo
bW9kZSA9PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHkpCiAgICAgICAgIHBsYXRmb3JtRmxhZyB8
PSBPX0VWVE9OTFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdp
bi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggNTg1NDBk
Yjc4YzguLjA3ZTE4NGU0ZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5
c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBA
IC00MzQsNiArNDM0LDEwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VO
RVJJQ19XUklURTsKICAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAg
ICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRFIHwgR0VORVJJQ19SRUFEOworICAgICAg
ICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX0FMV0FZUzsKKyAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtNTQ3
LDkgKzU1MSwxNyBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICByZXR1cm4gZW50cmllczsKIH0K
IAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiwgdWludDY0X3QmKQorYm9v
bCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNw
YWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0ZXNB
dmFpbGFibGVUb0NhbGxlciwgdG90YWxOdW1iZXJPZkJ5dGVzLCB0b3RhbE51bWJlck9mRnJlZUJ5
dGVzOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRoLndpZGVDaGFyYWN0ZXJzKCku
ZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsICZ0b3RhbE51bWJlck9mQnl0ZXMs
ICZ0b3RhbE51bWJlck9mRnJlZUJ5dGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0ID4gc3RhdGljX2Nhc3Q8VUxP
TkdMT05HPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBmcmVlU3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxl
ci5RdWFkUGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0
RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKQEAgLTYwMSwxNSArNjEzLDcgQEAg
Ym9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJuIFVu
bWFwVmlld09mRmlsZShidWZmZXIpOwogfQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURh
dGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3Vj
Y2VzcykKLXsKLSAgICBhdXRvIGZpbGUgPSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcsIEZJ
TEVfQVRUUklCVVRFX05PUk1BTCwgbnVsbHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmlsZUhh
bmRsZShmaWxlLCBtb2RlKTsKLSAgICBjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFwcGVk
RmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVk
RmlsZU1vZGUpCitib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCiB7
CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTYyMywxMSArNjI3LDI3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUo
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhh
bmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFET05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdPUkQg
cGFnZVByb3RlY3Rpb247CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzczsKKyAgICBzd2l0Y2ggKG9w
ZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBhZ2VQcm90
ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQ
X1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9
IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfV1JJVEU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRs
ZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAsIG51bGxwdHIpOwogICAgIGlmICghbWFw
cGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdP
ZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwgMCwgc2l6ZSk7CisgICAgbV9maWxlRGF0
YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgc2l6ZSk7CiAg
ICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYgKCFtX2ZpbGVEYXRhKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKaW5kZXggOGQ3ZDdhYzY4Mzgu
LmFjZTQ4OWE1MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCkBAIC0zMiw3ICszMiwx
MSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6UGF0aFdhbGtlcihjb25zdCBTdHJp
bmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIFN0cmluZyBwYXRo
ID0gZGlyZWN0b3J5ICsgIlxcIiArIHBhdHRlcm47CisgICAgU3RyaW5nIHBhdGg7CisgICAgaWYg
KHBhdHRlcm4uaXNFbXB0eSgpKQorICAgICAgICBwYXRoID0gbWFrZVN0cmluZyhkaXJlY3Rvcnks
ICJcXCoiX3MpOworICAgIGVsc2UKKyAgICAgICAgcGF0aCA9IG1ha2VTdHJpbmcoZGlyZWN0b3J5
LCAiXFwiX3MsIHBhdHRlcm4pOwogICAgIG1faGFuZGxlID0gOjpGaW5kRmlyc3RGaWxlVyhwYXRo
LndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmbV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMGE3
NGMwZDkxNy4uZTBkNzc2MjMwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDEt
MzAgIENocmlzdG9waGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtX
aW5dIEltcGxlbWVudCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NzY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhU291cC5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIFVzZSBtb3JlIEZpbGVTeXN0ZW0gZnVu
Y3Rpb25hbGl0eSB0byBzaGFyZSBjb2RlIGFjcm9zcyBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHA6CisgICAgICAgIFVz
ZSBPcHRpb25hbDxWZWN0b3I+IGZvciBtX2J1ZmZlciBzaW5jZSB3ZSBuZWVkIHRvIGRpZmZlcmVu
dGlhdGUgaXNFbXB0eSBhbmQgaXNOdWxsLgorCiAyMDIwLTAxLTE0ICBSb3NzIEtpcnNsaW5nICA8
cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBXZWJQYXN0ZWJvYXJkUHJveHlXUEUg
c2hvdWxkIGJlIFdlYlBhc3RlYm9hcmRQcm94eUxpYldQRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVh
YTkwNWFiNjguLmIzNDllM2EzYTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFu
ZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmICFPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CkBAIC0zOSwyNiArMzgsMjcgQEAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykK
IERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBp
bnQgZmQgPSBvcGVuKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCksIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0g
ICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIGhhbmRsZSA9IEZp
bGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdy
aXRlKTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBBU1NFUlQoZmNobW9kKGhhbmRsZSwgU19JUlVT
UiB8IFNfSVdVU1IpKTsKKyNlbmRpZgogCi0gICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8
IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGlmICghRmlsZVN5c3RlbTo6dHJ1bmNhdGVG
aWxlKGhhbmRsZSwgbV9zaXplKSkgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFu
ZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgRmlsZVN5c3RlbTo6
bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgocGF0aCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBt
bWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwg
ZmQsIDApOwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7
CisgICAgYm9vbCBzdWNjZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBl
ZEZpbGUoaGFuZGxlLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNz
KSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAorICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgp
OwogICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFwKTsKICAg
ICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXpl
KSB7CiAgICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsKQEAgLTY2LDUy
ICs2NiwyMyBAQCBEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCisjaWYgT1MoV0lORE9XUykKKyAgICBE
V09SRCBvbGRQcm90ZWN0aW9uOworICAgIFZpcnR1YWxQcm90ZWN0KG1hcCwgbV9zaXplLCBGSUxF
X01BUF9SRUFELCAmb2xkUHJvdGVjdGlvbik7CisgICAgRmx1c2hWaWV3T2ZGaWxlKG1hcCwgbV9z
aXplKTsKKyNlbHNlCiAgICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lvbi4KICAgICBtcHJv
dGVjdChtYXAsIG1fc2l6ZSwgUFJPVF9SRUFEKTsKIAogICAgIC8vIEZsdXNoIChhc3luY2hyb25v
dXNseSkgdG8gZmlsZSwgdHVybmluZyB0aGlzIGludG8gY2xlYW4gbWVtb3J5LgogICAgIG1zeW5j
KG1hcCwgbV9zaXplLCBNU19BU1lOQyk7Ci0KLSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFw
LCBtX3NpemUsIGZkKTsKLX0KLSNlbHNlCi1EYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgpIGNvbnN0Ci17Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUo
cGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAgaWYgKCFGaWxlU3lz
dGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGlmIChG
aWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihkYXRhKCkpLCBzaXplKCkpIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4g
RGF0YShWZWN0b3I8dWludDhfdD4obV9idWZmZXIpKTsKLX0KICNlbmRpZgogCi0jaWYgIU9TKFdJ
TkRPV1MpCi1EYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBpbnQgZmQgPSBv
cGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4g
eyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0KGZkLCAmc3RhdCkgPCAw
KSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAg
c2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIGNs
b3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgMCwgc2l6ZSk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0
TWFwKG1hcCwgbV9zaXplLCBoYW5kbGUpOwogfQotI2VuZGlmCiAKLURhdGEgbWFwRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCitEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKIHsKLSNpZiAh
T1MoV0lORE9XUykKLSAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0byBmaWxlID0gRmlsZVN5
c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAg
ICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAgICAgICAgIHJldHVybiB7
IH07CkBAIC0xMTksMzEgKzkwLDI4IEBAIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBzaXplKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZpbGUsIDAsIHNpemUpOwot
I2VuZGlmCiB9CiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCBm
ZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworfQorCitEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxl
U3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qg
c2l6ZSkKIHsKICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5
KCk7CiAgICAgfQotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JF
QUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQp
IHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5N
b2RlOjpSZWFkLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJpdmF0ZSwgc3VjY2Vzcyk7
CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5k
bGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBEYXRhOjphZG9w
dE1hcChtYXAsIHNpemUsIGZkKTsKLX0KLSNlbHNlCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxl
U3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNp
emUpCi17Ci0gICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zmc2V0LCBzaXplKTsKKyAgICByZXR1cm4g
RGF0YTo6YWRvcHRNYXAobWFwcGVkRmlsZS5sZWFrSGFuZGxlKCksIHNpemUsIGhhbmRsZSk7CiB9
Ci0jZW5kaWYKIAogU0hBMTo6RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNv
bnN0IFNhbHQmIHNhbHQpCiB7CkBAIC0xNzksMjQgKzE0Nyw2IEBAIHN0YXRpYyBTYWx0IG1ha2VT
YWx0KCkKIAogT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRo
KQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIGF1dG8gY3BhdGggPSBGaWxlU3lzdGVtOjpmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgYXV0byBmZCA9IG9wZW4oY3BhdGguZGF0
YSgpLCBPX1JET05MWSwgMCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0g
cmVhZChmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7Ci0gICAg
aWYgKGJ5dGVzUmVhZCAhPSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0LnNpemUoKSkpIHsKLSAg
ICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7Ci0KLSAgICAgICAgdW5saW5rKGNwYXRoLmRhdGEoKSk7
Ci0gICAgICAgIGZkID0gb3BlbihjcGF0aC5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9f
VFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gd3JpdGUo
ZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSkgPT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4oc2Fs
dC5zaXplKCkpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiBzYWx0OwotI2Vsc2UKICAg
ICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxl
T3Blbk1vZGU6OlJlYWQpOwogICAgIFNhbHQgc2FsdDsKICAgICBhdXRvIGJ5dGVzUmVhZCA9IEZp
bGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0
LmRhdGEoKSksIHNhbHQuc2l6ZSgpKTsKQEAgLTIwNiwxMyArMTU2LDE1IEBAIE9wdGlvbmFsPFNh
bHQ+IHJlYWRPck1ha2VTYWx0KGNvbnN0IFN0cmluZyYgcGF0aCkKIAogICAgICAgICBGaWxlU3lz
dGVtOjpkZWxldGVGaWxlKHBhdGgpOwogICAgICAgICBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZp
bGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7CisjaWYgIU9TKFdJTkRP
V1MpCisgICAgICAgIEFTU0VSVChmY2htb2QoaGFuZGxlLCBTX0lSVVNSIHwgU19JV1VTUikpOwor
I2VuZGlmCiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZp
bGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpID09
IHNhbHQuc2l6ZSgpOwogICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CiAgICAg
ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIHJl
dHVybiBzYWx0OwotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuaAppbmRleCBkNzhkOThiNjE3NS4uZjY4MjNkYzg5NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCkBAIC01Myw5
ICs1Myw3IEBAIHB1YmxpYzoKICAgICB+RGF0YSgpIHsgfQogCiAgICAgc3RhdGljIERhdGEgZW1w
dHkoKTsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBt
YXAsIHNpemVfdCwgaW50IGZkKTsKLSNlbmRpZgorICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZv
aWQqIG1hcCwgc2l6ZV90LCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsK
QEAgLTYzLDkgKzYxLDggQEAgcHVibGljOgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAgRGF0
YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYsIGludCBmZCA9IC0xKTsKLSNlbGlmIE9TKFdJTkRPV1Mp
Ci0gICAgZXhwbGljaXQgRGF0YShWZWN0b3I8dWludDhfdD4mJik7Ci0gICAgRGF0YShGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CisjZWxpZiBV
U0UoQ1VSTCkKKyAgICBleHBsaWNpdCBEYXRhKE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4mJik7
CiAjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFtX3NpemU7IH0KQEAgLTk2LDggKzkzLDggQEAgcHJpdmF0ZToKICAgICBt
dXRhYmxlIEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7CiAgICAgaW50IG1fZmlsZURlc2Ny
aXB0b3IgeyAtMSB9OwogI2VuZGlmCi0jaWYgT1MoV0lORE9XUykKLSAgICBWZWN0b3I8dWludDhf
dD4gbV9idWZmZXI7CisjaWYgVVNFKENVUkwpCisgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9kYXRhIHsg
bnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CkBAIC0xMDYsMTcgKzEwMywxMSBA
QCBwcml2YXRlOgogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7
CiBib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYsIGNvbnN0IERhdGEmKTsKLSNpZiAhT1MoV0lO
RE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsK
LSNlbHNlCiBEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5k
bGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKICNpZiBVU0UoR0xJQikgJiYgIVBM
QVRGT1JNKFdJTikKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0qLCBzaXplX3Qg
b2Zmc2V0LCBzaXplX3QpOwogI2VuZGlmCi0jaWYgIU9TKFdJTkRPV1MpCiBEYXRhIG1hcEZpbGUo
Y29uc3QgY2hhciogcGF0aCk7Ci0jZW5kaWYKIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgpOwogCiB1c2luZyBTYWx0ID0gc3RkOjphcnJheTx1aW50OF90LCA4PjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q29jb2EubW0KaW5kZXggNmEzOWY4ODcwMDguLjAzM2NkZTMwZTJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFD
b2NvYS5tbQpAQCAtOTIsMTEgKzkyLDExIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYg
YSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2Rh
dGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsK
IH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQp
CitEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIEZpbGVTeXN0ZW06
OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAgICBBU1NFUlQobWFwKTsKICAgICBBU1NFUlQo
bWFwICE9IE1BUF9GQUlMRUQpOwotICAgIGNsb3NlKGZkKTsKKyAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUoZmQpOwogICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0
YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FV
RVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBbbWFwLCBzaXplXSB7CiAgICAgICAgIG11bm1hcCht
YXAsIHNpemUpOwogICAgIH0pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKaW5kZXggY2Y0MzE1NmM1
YTAuLjAwMzA1ZmZiMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcApAQCAtMzAsNDAgKzMwLDMx
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIERhdGE6
OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgOiBtX2J1ZmZlcihW
ZWN0b3I8dWludDhfdD4oc2l6ZSkpCisgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBtX2J1ZmZl
ci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtZW1jcHkobV9idWZmZXIu
ZGF0YSgpLCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkobV9idWZmZXItPmRhdGEoKSwgZGF0YSwg
c2l6ZSk7CiB9CiAKLURhdGE6OkRhdGEoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZp
bGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIG1fYnVmZmVyLnJlc2l6ZShz
aXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxlKGZpbGUs
IG9mZnNldCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7Ci0gICAgRmls
ZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVm
ZmVyLmRhdGEoKSksIHNpemUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLX0K
LQotRGF0YTo6RGF0YShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCitEYXRhOjpEYXRhKE9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4mJiBidWZmZXIpCiAgICAgOiBtX2J1ZmZlcihXVEZNb3ZlKGJ1
ZmZlcikpCisgICAgLCBtX3NpemUobV9idWZmZXIgPyBtX2J1ZmZlci0+c2l6ZSgpIDogMCkKIHsK
LSAgICBtX3NpemUgPSBtX2J1ZmZlci5zaXplKCk7CiB9CiAKIERhdGEgRGF0YTo6ZW1wdHkoKQog
ewotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIERhdGEoV1RGOjpudWxsb3B0KTsKIH0KIAog
Y29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYnVmZmVy
LmRhdGEoKTsKKyAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+ZGF0YSgpIDogbnVsbHB0
cjsKIH0KIAogYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZl
ci5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2J1ZmZlcjsKIH0KIAogYm9vbCBEYXRhOjphcHBs
eShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikg
Y29uc3QKQEAgLTcxLDIxICs2Miw0MSBAQCBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9u
PGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAogICAgIGlmIChp
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVy
LnNpemUoKSk7CisgICAgcmV0dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4obV9idWZmZXItPmRhdGEoKSksIG1fYnVmZmVyLT5zaXplKCkpOwogfQogCiBEYXRhIERh
dGE6OnN1YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAogewotICAgIHJl
dHVybiB7IG1fYnVmZmVyLmRhdGEoKSArIG9mZnNldCwgc2l6ZSB9OworICAgIGlmICghbV9idWZm
ZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBtX2J1ZmZlci0+ZGF0YSgp
ICsgb2Zmc2V0LCBzaXplIH07CiB9CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwg
Y29uc3QgRGF0YSYgYikKIHsKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGI7
CisgICAgaWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhOworCiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGJ1ZmZlcihhLnNpemUoKSArIGIuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRh
dGEoKSwgYS5kYXRhKCksIGEuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSArIGEu
c2l6ZSgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOwogICAgIHJldHVybiBEYXRhKFdURk1vdmUoYnVm
ZmVyKSk7CiB9CiAKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwg
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQoreworICAgIEFTU0VSVChtYXApOwor
ICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gYnVm
ZmVyKHNpemUpOworICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBtYXAsIHNpemUpOworICAgIEFT
U0VSVChGaWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobWFwLCBzaXplKSk7CisKKyAgICByZXR1
cm4gRGF0YShXVEZNb3ZlKGJ1ZmZlcikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAppbmRleCA1MTVj
MDllYmJmZC4uMjhkOGUwNDQwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCkBAIC0xMjEsNyAr
MTIxLDcgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVy
KQogICAgIGRlbGV0ZSB3cmFwcGVyOwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1h
cCwgc2l6ZV90IHNpemUsIGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBz
aXplX3Qgc2l6ZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIEFT
U0VSVChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0u
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtLmNwcAppbmRleCBiZTg0MzcxYTg2My4uMjhhZjRmZWEyMGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMgRGlyZWN0
b3J5RW50cnlUeXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewotICAgIHN3
aXRjaCAoZHR5cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9y
eUVudHJ5VHlwZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICByZXR1cm4g
RGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwot
ICAgIH0KLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2VuZGlmCi0K
IHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGdW5jdGlv
bjx2b2lkIChjb25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rpb24pCiB7
Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0ZW06OmZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAg
ICAgICByZXR1cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihk
aXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRfdHlwZSAh
PSBEVF9SRUcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFt
ZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNt
cChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIG5hbWVT
dHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0cmluZy5p
c051bGwoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihuYW1lU3Ry
aW5nLCBkaXJlY3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBjbG9zZWRp
cihkaXIpOwotI2Vsc2UKICAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0
b3J5KHBhdGgpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAgIGF1
dG8gdHlwZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmlsZVN5c3RlbTo6
U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJl
Y3RvcnkgOiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0aW9uKGVudHJ5
LCB0eXBlKTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKGVu
dHJ5KSwgdHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGlyZWN0b3J5UmVj
dXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGE4YmU4YTA4NjRiLi5kZTgxMDVkZWFkNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDIwLTAxLTMwICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4K
KworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgdGVzdCBmb3IgbGlzdERpcmVjdG9yeSB3aXRoIGEgZW1wdHkg
U3RyaW5nIGZpbHRlciB3aGljaAorICAgICAgICB3YXMgZmFpbGluZyBvbiBXaW5kb3dzIGJ1dCBw
YXNzaW5nIG9uIG90aGVyIHBsYXRmb3Jtcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorCiAyMDIwLTAxLTE0ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gU3VwcG9ydCB0aGUg
ZmVhdHVyZSBmbGFnIGluIER1bXBSZW5kZXJUcmVlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGQwZTUxNTFhOTk5Li5iYzc4MWY1MTI2YSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKQEAgLTE0NSw0
ICsxNDUsMTEgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBVbmljb2RlRGlyZWN0b3J5TmFtZSkK
ICAgICBFWFBFQ1RfVFJVRShleHBlY3RlZERpcmVjdG9yeU5hbWUgPT0gZGlyZWN0b3J5TmFtZSk7
CiB9CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbGlzdERpcmVjdG9yeVdpdGhOdWxsRmlsdGVy
KQoreworICAgIGF1dG8gZGlyZWN0b3J5RW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3Rv
cnkoRmlsZVN5c3RlbTo6ZGlyZWN0b3J5TmFtZSh0ZW1wRmlsZVBhdGgoKSksIFN0cmluZygpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoZGlyZWN0b3J5RW50cmllcy5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9UUlVFKGRpcmVjdG9yeUVudHJpZXMuY29udGFpbnModGVtcEZpbGVQYXRoKCkpKTsKK30KKwog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389299</attachid>
            <date>2020-01-30 16:24:03 -0800</date>
            <delta_ts>2020-01-31 13:56:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>30096</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmJiY2E5NzdlNjIx
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCwxMiArODM4LDIyIEBAIHdlYmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxl
LVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGCiAKIGh0dHAvdGVz
dHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVzdHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAg
XQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50Zmls
dGVyaW5nIFsgU2tpcCBdCiAKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2No
IGJlaGF2aW9yIHNwZWNpZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rp
c2stY2FjaGUtbGFzdC1tb2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBp
bnZlc3RpZ2F0aW9uCitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMu
aHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxp
ZGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2Fj
aGUtaWZyYW1lLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQt
Y2FjaGUuaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3Qt
cmV0dXJucy1udWxsLWZvci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0
dHAvdGVzdHMvY29va2llcy9jb29raWUtd2l0aC1tdWx0aXBsZS1sZXZlbC1wYXRoLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9jb29raWVzL2RvdWJsZS1xdW90ZWQtdmFsdWUtd2l0
aC1zZW1pLWNvbG9uLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvY29va2llcy9odHRwLWdl
dC1jb29raWUtc2V0LWluLWpzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmY2U5NjI2NmIx
ZC4uNDk2OWVmYjNjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9w
aGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVu
dCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIEFkZGVk
IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHNvIG9wZW5GaWxlIHdpdGggUmVhZFdyaXRlIG1hcHBp
bmdzLgorICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBSZWFkV3JpdGUgbWFwcGluZ3MK
KworICAgICAgICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgU3VwcG9ydCBvcGVuaW5nIGZpbGVz
IHdpdGggUmVhZFdyaXRlIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwOgorICAgICAgICBJbXBsZW1lbnQgZ2V0Vm9sdW1lRnJlZVNwYWNlIHNpbmNlIHNv
bWUgb2YgdGhlIHRlc3RzIHVzZSBpdCB3aGVuIHRvZ2dsaW5nIGNhY2hlLgorICAgICAgICAKKwor
ICAgICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisgICAgICAgIFRyZWF0IFN0cmluZygp
IGZpbHRlciBhcyAiKiIgdG8gbWF0Y2ggUE9TSVggYmVoYXZpb3IuCisKIDIwMjAtMDEtMTMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBldmVuIG1vcmUgInNo
b3J0ZXN0IGZvcm0iIGZvcm1hdHRpbmcsIGFuZCBsZXNzICJmaXhlZCBwcmVjaXNpb24iIGFuZCAi
Zml4ZWQgd2lkdGgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcyZjk1M2VhYjNmLi5mZjFiNDI3
MWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAgLTI4NywxNyArMjg3LDE3IEBAIE1hcHBlZEZp
bGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogICAgIHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRh
LCBtX2ZpbGVTaXplKTsKIH0KIAotI2lmIEhBVkUoTU1BUCkKLQotTWFwcGVkRmlsZURhdGE6Ok1h
cHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUs
IGJvb2wmIHN1Y2Nlc3MpCitNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsK
LSAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVPcGVuTW9kZTo6UmVhZCk7Cisg
ICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OlJlYWQpOwogCi0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIG1vZGUpOworICAgIHN1
Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOwogICAgIGNsb3NlRmlsZShmZCk7CiB9CiAKLWJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUg
bW9kZSkKKyNpZiBIQVZFKE1NQVApCisKK2Jvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBw
ZWRGaWxlTW9kZSBtYXBNb2RlKQogewogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQsNyArMzI0LDIyIEBAIGJvb2wgTWFwcGVkRmls
ZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbW9kCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQqIGRhdGEg
PSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCwgTUFQX0ZJTEUgfCAobW9kZSA9PSBNYXBwZWRGaWxl
TW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOworICAgIGlu
dCBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7Cisg
ICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJP
VF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6Cisg
ICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1h
cCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRG
aWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAg
ICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxl
U3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmYuLmU1OTcwZjNlMDI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5o
CkBAIC03OSw2ICs3OSw3IEBAIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlID0gLTE7CiBlbnVtIGNsYXNzIEZpbGVPcGVuTW9kZSB7CiAgICAgUmVhZCwK
ICAgICBXcml0ZSwKKyAgICBSZWFkV3JpdGUsCiAjaWYgT1MoREFSV0lOKQogICAgIEV2ZW50c09u
bHksCiAjZW5kaWYKQEAgLTIwNiw2ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgTWFwcGVkRmlsZURh
dGEoTWFwcGVkRmlsZURhdGEmJik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVE
YXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNz
KTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBw
ZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBw
ZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURh
dGEmJik7CiAKQEAgLTIxNiwxNSArMjE4LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBsZWFrSGFu
ZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQogCiBw
cml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBNYXBwZWRGaWxlTW9kZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVk
RmlsZU1vZGUpOwogCiAgICAgdm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKICAgICB1bnNp
Z25lZCBtX2ZpbGVTaXplIHsgMCB9OwogfTsKIAotaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBw
ZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2Rl
LCBib29sJiBzdWNjZXNzKQoraW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBz
dWNjZXNzKQogewotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgbW9kZSk7Cisg
ICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1h
cE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1v
ZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRs
ZShoYW5kbGUsIG9wZW5Nb2RlLCBtYXBNb2RlKTsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRh
OjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRleCA4NmMwNGY5ZDVlMS4uOGNhOTRkMTIyYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0zNDgsNyArMzQ4LDcgQEAgUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
IG1vZGUpCiAgICAgR1JlZlB0cjxHRmlsZUlPU3RyZWFtPiBpb1N0cmVhbTsKICAgICBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdf
ZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAg
ZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkV3Jp
dGUpIHsKICAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFS
KSkpCiAgICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3Jp
dGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgICAgICBlbHNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dU
Ri93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCAyNzgzOTg4M2ExYS4uMTRhMjM1
ZWZiNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtOTEs
NiArOTEsOCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwog
ICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKICAgICAgICAgcGxhdGZv
cm1GbGFnIHw9IChPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKKyAgICBlbHNlIGlmICht
b2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlKQorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0g
KE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKICNpZiBPUyhEQVJXSU4pCiAgICAgZWxzZSBp
ZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHkpCiAgICAgICAgIHBsYXRmb3JtRmxh
ZyB8PSBPX0VWVE9OTFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3Rl
bVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggNTg1
NDBkYjc4YzguLjA3ZTE4NGU0ZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmls
ZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3Bw
CkBAIC00MzQsNiArNDM0LDEwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0g
R0VORVJJQ19XUklURTsKICAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdB
WVM7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6Cisg
ICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRFIHwgR0VORVJJQ19SRUFEOworICAg
ICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX0FMV0FZUzsKKyAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAt
NTQ3LDkgKzU1MSwxNyBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICByZXR1cm4gZW50cmllczsK
IH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiwgdWludDY0X3QmKQor
Ym9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJl
ZVNwYWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0
ZXNBdmFpbGFibGVUb0NhbGxlciwgdG90YWxOdW1iZXJPZkJ5dGVzLCB0b3RhbE51bWJlck9mRnJl
ZUJ5dGVzOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRoLndpZGVDaGFyYWN0ZXJz
KCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsICZ0b3RhbE51bWJlck9mQnl0
ZXMsICZ0b3RhbE51bWJlck9mRnJlZUJ5dGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0ID4gc3RhdGljX2Nhc3Q8
VUxPTkdMT05HPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVlU3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0Nh
bGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4g
Z2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKQEAgLTYwMSwxNSArNjEzLDcg
QEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJu
IFVubWFwVmlld09mRmlsZShidWZmZXIpOwogfQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmls
ZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYg
c3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUgPSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcs
IEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVsbHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmls
ZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFw
cGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFw
cGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUp
CiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTYyMywxMSArNjI3LDI3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5n
KGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFET05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdP
UkQgcGFnZVByb3RlY3Rpb247CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzczsKKyAgICBzd2l0Y2gg
KG9wZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBhZ2VQ
cm90ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEZJTEVf
TUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToK
KyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlv
biA9IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfV1JJ
VEU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhh
bmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAsIG51bGxwdHIpOwogICAgIGlmICgh
bWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxlRGF0YSA9IE1hcFZp
ZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwgMCwgc2l6ZSk7CisgICAgbV9maWxl
RGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2VzcywgMCwgMCwgc2l6ZSk7
CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYgKCFtX2ZpbGVEYXRhKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtl
ci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKaW5kZXggOGQ3ZDdhYzY4
MzguLmFjZTQ4OWE1MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtl
ci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCkBAIC0zMiw3ICsz
MiwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6UGF0aFdhbGtlcihjb25zdCBT
dHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIFN0cmluZyBw
YXRoID0gZGlyZWN0b3J5ICsgIlxcIiArIHBhdHRlcm47CisgICAgU3RyaW5nIHBhdGg7CisgICAg
aWYgKHBhdHRlcm4uaXNFbXB0eSgpKQorICAgICAgICBwYXRoID0gbWFrZVN0cmluZyhkaXJlY3Rv
cnksICJcXCoiX3MpOworICAgIGVsc2UKKyAgICAgICAgcGF0aCA9IG1ha2VTdHJpbmcoZGlyZWN0
b3J5LCAiXFwiX3MsIHBhdHRlcm4pOwogICAgIG1faGFuZGxlID0gOjpGaW5kRmlyc3RGaWxlVyhw
YXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmbV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAz
MGE3NGMwZDkxNy4uNDFhNTZjYmRhZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAt
MDEtMzAgIENocmlzdG9waGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAg
IFtXaW5dIEltcGxlbWVudCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NzY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHA6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA6CisgICAg
ICAgIFVzZSBtb3JlIEZpbGVTeXN0ZW0gZnVuY3Rpb25hbGl0eSB0byBzaGFyZSBjb2RlIGFjcm9z
cyBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhQ3VybC5jcHA6CisgICAgICAgIFVzZSBPcHRpb25hbDxWZWN0b3I+IGZvciBtX2J1ZmZl
ciBzaW5jZSB3ZSBuZWVkIHRvIGRpZmZlcmVudGlhdGUgaXNFbXB0eSBhbmQgaXNOdWxsLgorCiAy
MDIwLTAxLTE0ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAg
ICAgICBXZWJQYXN0ZWJvYXJkUHJveHlXUEUgc2hvdWxkIGJlIFdlYlBhc3RlYm9hcmRQcm94eUxp
YldQRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVhYTkwNWFiNjguLmJmZjUwYzhhNmY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVk
ZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KIAogI2lmICFPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CkBA
IC0zOSwyNiArMzgsMjcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtD
YWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBpbnQgZmQgPSBvcGVuKEZpbGVTeXN0ZW06OmZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JE
V1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlKTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBm
Y2htb2QoaGFuZGxlLCBTX0lSVVNSIHwgU19JV1VTUik7CisjZW5kaWYKIAotICAgIGlmIChmdHJ1
bmNhdGUoZmQsIG1fc2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBpZiAoIUZp
bGVTeXN0ZW06OnRydW5jYXRlRmlsZShoYW5kbGUsIG1fc2l6ZSkpIHsKKyAgICAgICAgRmlsZVN5
c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAg
IAogICAgIEZpbGVTeXN0ZW06Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHBhdGgpOwot
Ci0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1Rf
V1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsK
LSAgICAgICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2Rl
OjpSZWFkV3JpdGUsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3Mp
OworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFu
ZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICB2b2lkKiBtYXAgPSBtYXBw
ZWRGaWxlLmxlYWtIYW5kbGUoKTsKICAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1hcCk7CiAgICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGJ5dGVzU2l6ZSkgewogICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5
dGVzU2l6ZSk7CkBAIC02Niw1MiArNjYsMjMgQEAgRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIAorI2lm
IE9TKFdJTkRPV1MpCisgICAgRFdPUkQgb2xkUHJvdGVjdGlvbjsKKyAgICBWaXJ0dWFsUHJvdGVj
dChtYXAsIG1fc2l6ZSwgRklMRV9NQVBfUkVBRCwgJm9sZFByb3RlY3Rpb24pOworICAgIEZsdXNo
Vmlld09mRmlsZShtYXAsIG1fc2l6ZSk7CisjZWxzZQogICAgIC8vIERyb3AgdGhlIHdyaXRlIHBl
cm1pc3Npb24uCiAgICAgbXByb3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CiAKICAgICAv
LyBGbHVzaCAoYXN5bmNocm9ub3VzbHkpIHRvIGZpbGUsIHR1cm5pbmcgdGhpcyBpbnRvIGNsZWFu
IG1lbW9yeS4KICAgICBtc3luYyhtYXAsIG1fc2l6ZSwgTVNfQVNZTkMpOwotCi0gICAgcmV0dXJu
IERhdGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBmZCk7Ci19Ci0jZWxzZQotRGF0YSBEYXRhOjpt
YXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAotewotICAgIGF1dG8gZmlsZSA9IEZp
bGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUp
OwotICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSwgc2l6ZSgpKSA8IDApCi0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgcmV0dXJuIERhdGEoVmVjdG9yPHVpbnQ4X3Q+KG1fYnVmZmVyKSk7Ci19CiAj
ZW5kaWYKIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgp
Ci17Ci0gICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwg
MCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChm
c3RhdChmZCwgJnN0YXQpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGlmICgh
c2l6ZSkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgp
OwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOworICAg
IHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIG1fc2l6ZSwgaGFuZGxlKTsKIH0KLSNlbmRpZgog
Ci1EYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorRGF0YSBtYXBGaWxlKGNvbnN0IGNo
YXIqIHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIG1hcEZpbGUoRmlsZVN5
c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0jZWxzZQogICAg
IGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCk7CiAgICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUp
KQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTE5LDMxICs5MCwyOCBAQCBEYXRhIG1hcEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQogICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoZmls
ZSwgc2l6ZSkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIGFkb3B0QW5kTWFwRmls
ZShmaWxlLCAwLCBzaXplKTsKLSNlbmRpZgogfQogCi0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIGFk
b3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQorRGF0YSBt
YXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lz
dGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKK30KKworRGF0YSBh
ZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgc2l6
ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIGNs
b3NlKGZkKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAg
IHJldHVybiBEYXRhOjplbXB0eSgpOwogICAgIH0KLQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVs
bHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7Ci0gICAgaWYg
KG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBib29sIHN1Y2Nl
c3M7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZShoYW5kbGUsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZU1vZGU6
OlByaXZhdGUsIHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBGaWxlU3lz
dGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAg
ICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBzaXplLCBmZCk7Ci19Ci0jZWxzZQotRGF0YSBh
ZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVf
dCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBEYXRhKGZpbGUsIG9mZnNldCwg
c2l6ZSk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcHBlZEZpbGUubGVha0hhbmRsZSgp
LCBzaXplLCBoYW5kbGUpOwogfQotI2VuZGlmCiAKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShj
b25zdCBEYXRhJiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQogewpAQCAtMTc5LDI0ICsxNDcsNiBA
QCBzdGF0aWMgU2FsdCBtYWtlU2FsdCgpCiAKIE9wdGlvbmFsPFNhbHQ+IHJlYWRPck1ha2VTYWx0
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBhdXRvIGNwYXRo
ID0gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGF1dG8g
ZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19SRE9OTFksIDApOwotICAgIFNhbHQgc2FsdDsKLSAg
ICBhdXRvIGJ5dGVzUmVhZCA9IHJlYWQoZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSk7Ci0g
ICAgY2xvc2UoZmQpOwotICAgIGlmIChieXRlc1JlYWQgIT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4o
c2FsdC5zaXplKCkpKSB7Ci0gICAgICAgIHNhbHQgPSBtYWtlU2FsdCgpOwotCi0gICAgICAgIHVu
bGluayhjcGF0aC5kYXRhKCkpOwotICAgICAgICBmZCA9IG9wZW4oY3BhdGguZGF0YSgpLCBPX1dS
T05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAgICAgIGJv
b2wgc3VjY2VzcyA9IHdyaXRlKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpID09IHN0YXRp
Y19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKTsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1
cm4gc2FsdDsKLSNlbHNlCiAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0
aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAgICBTYWx0IHNhbHQ7CiAgICAg
YXV0byBieXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CkBAIC0yMDYsMTMgKzE1
NiwxNSBAQCBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBTdHJpbmcmIHBhdGgp
CiAKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKICAgICAgICAgZmlsZSA9
IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3Jp
dGUpOworI2lmICFPUyhXSU5ET1dTKQorICAgICAgICBmY2htb2QoaGFuZGxlLCBTX0lSVVNSIHwg
U19JV1VTUik7CisjZW5kaWYKICAgICAgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5c3RlbTo6d3Jp
dGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0
LnNpemUoKSkgPT0gc2FsdC5zaXplKCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShm
aWxlKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAgICAgcmV0dXJuIHNhbHQ7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29y
a0NhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oCmluZGV4IGQ3OGQ5OGI2MTc1Li5hMGNhMjRiNTUyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmgKQEAgLTUzLDE5ICs1MywxNiBAQCBwdWJsaWM6CiAgICAgfkRhdGEoKSB7IH0KIAogICAgIHN0
YXRpYyBEYXRhIGVtcHR5KCk7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgc3RhdGljIERhdGEgYWRv
cHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGludCBmZCk7Ci0jZW5kaWYKKyAgICBzdGF0aWMgRGF0
YSBhZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFu
ZGxlKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1
ZmZlciwgTWFwIH07CiAgICAgRGF0YShPU09iamVjdFB0cjxkaXNwYXRjaF9kYXRhX3Q+JiYsIEJh
Y2tpbmcgPSBCYWNraW5nOjpCdWZmZXIpOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgRGF0
YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYsIGludCBmZCA9IC0xKTsKLSNlbGlmIE9TKFdJTkRPV1Mp
Ci0gICAgZXhwbGljaXQgRGF0YShWZWN0b3I8dWludDhfdD4mJik7Ci0gICAgRGF0YShGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CisgICAgRGF0
YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBm
ZCA9IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpOworI2VsaWYgVVNFKENV
UkwpCisgICAgZXhwbGljaXQgRGF0YShPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+JiYpOwogI2Vu
ZGlmCiAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiAhbV9zaXplOyB9CkBAIC05NCwxMCArOTEsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgog
I2lmIFVTRShTT1VQKQogICAgIG11dGFibGUgR1JlZlB0cjxTb3VwQnVmZmVyPiBtX2J1ZmZlcjsK
LSAgICBpbnQgbV9maWxlRGVzY3JpcHRvciB7IC0xIH07CisgICAgRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlIG1fZmlsZURlc2NyaXB0b3IgeyBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlIH07CiAjZW5kaWYKLSNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3Rvcjx1aW50
OF90PiBtX2J1ZmZlcjsKKyNpZiBVU0UoQ1VSTCkKKyAgICBPcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IG1fYnVmZmVyOwogI2VuZGlmCiAgICAgbXV0YWJsZSBjb25zdCB1aW50OF90KiBtX2RhdGEg
eyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKQEAgLTEwNiwxNyArMTAzLDgg
QEAgcHJpdmF0ZToKIAogRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYp
OwogYm9vbCBieXRlc0VxdWFsKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7Ci0jaWYgIU9TKFdJ
TkRPV1MpCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7
Ci0jZWxzZQogRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFu
ZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlmCi0jaWYgVVNFKEdMSUIpICYmICFQ
TEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgotI2lmICFPUyhXSU5ET1dTKQogRGF0YSBtYXBGaWxl
KGNvbnN0IGNoYXIqIHBhdGgpOwotI2VuZGlmCiBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKTsKIAogdXNpbmcgU2FsdCA9IHN0ZDo6YXJyYXk8dWludDhfdCwgOD47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tCmluZGV4IDZhMzlmODg3MDA4Li4wMzNjZGUzMGUyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q29jb2EubW0KQEAgLTkyLDExICs5MiwxMSBAQCBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEm
IGEsIGNvbnN0IERhdGEmIGIpCiAgICAgcmV0dXJuIHsgYWRvcHRPU09iamVjdChkaXNwYXRjaF9k
YXRhX2NyZWF0ZV9jb25jYXQoYS5kaXNwYXRjaERhdGEoKSwgYi5kaXNwYXRjaERhdGEoKSkpIH07
CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZk
KQorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBGaWxlU3lzdGVt
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJU
KG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3RlbTo6Y2xv
c2VGaWxlKGZkKTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2Rh
dGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9R
VUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAgICBtdW5tYXAo
bWFwLCBzaXplKTsKICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNmNDMxNTZj
NWEwLi4wMDMwNWZmYjJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKQEAgLTMwLDQwICszMCwz
MSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBEYXRh
OjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorICAgIDogbV9idWZmZXIo
VmVjdG9yPHVpbnQ4X3Q+KHNpemUpKQorICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgbV9idWZm
ZXIucmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgbWVtY3B5KG1fYnVmZmVy
LmRhdGEoKSwgZGF0YSwgc2l6ZSk7CisgICAgbWVtY3B5KG1fYnVmZmVyLT5kYXRhKCksIGRhdGEs
IHNpemUpOwogfQogCi1EYXRhOjpEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBtX2J1ZmZlci5yZXNpemUo
c2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBGaWxlU3lzdGVtOjpzZWVrRmlsZShmaWxl
LCBvZmZzZXQsIEZpbGVTeXN0ZW06OkZpbGVTZWVrT3JpZ2luOjpCZWdpbm5pbmcpOwotICAgIEZp
bGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2J1
ZmZlci5kYXRhKCkpLCBzaXplKTsKLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci19
Ci0KLURhdGE6OkRhdGEoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKQorRGF0YTo6RGF0YShPcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+JiYgYnVmZmVyKQogICAgIDogbV9idWZmZXIoV1RGTW92ZShi
dWZmZXIpKQorICAgICwgbV9zaXplKG1fYnVmZmVyID8gbV9idWZmZXItPnNpemUoKSA6IDApCiB7
Ci0gICAgbV9zaXplID0gbV9idWZmZXIuc2l6ZSgpOwogfQogCiBEYXRhIERhdGE6OmVtcHR5KCkK
IHsKLSAgICByZXR1cm4geyB9OworICAgIHJldHVybiBEYXRhKFdURjo6bnVsbG9wdCk7CiB9CiAK
IGNvbnN0IHVpbnQ4X3QqIERhdGE6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZl
ci5kYXRhKCk7CisgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmRhdGEoKSA6IG51bGxw
dHI7CiB9CiAKIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9idWZm
ZXIuaXNFbXB0eSgpOworICAgIHJldHVybiAhbV9idWZmZXI7CiB9CiAKIGJvb2wgRGF0YTo6YXBw
bHkoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIp
IGNvbnN0CkBAIC03MSwyMSArNjIsNDEgQEAgYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlv
bjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKICAgICBpZiAo
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gYXBwbGllcihy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci5kYXRhKCkpLCBtX2J1ZmZl
ci5zaXplKCkpOworICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KG1fYnVmZmVyLT5kYXRhKCkpLCBtX2J1ZmZlci0+c2l6ZSgpKTsKIH0KIAogRGF0YSBE
YXRhOjpzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKIHsKLSAgICBy
ZXR1cm4geyBtX2J1ZmZlci5kYXRhKCkgKyBvZmZzZXQsIHNpemUgfTsKKyAgICBpZiAoIW1fYnVm
ZmVyKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgbV9idWZmZXItPmRhdGEo
KSArIG9mZnNldCwgc2l6ZSB9OwogfQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEs
IGNvbnN0IERhdGEmIGIpCiB7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBi
OworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rvcjx1
aW50OF90PiBidWZmZXIoYS5zaXplKCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5k
YXRhKCksIGEuZGF0YSgpLCBhLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBh
LnNpemUoKSwgYi5kYXRhKCksIGIuc2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3ZlKGJ1
ZmZlcikpOwogfQogCitEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUs
IEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKK3sKKyAgICBBU1NFUlQobWFwKTsK
KyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1
ZmZlcihzaXplKTsKKyAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgbWFwLCBzaXplKTsKKyAgICBB
U1NFUlQoRmlsZVN5c3RlbTo6dW5tYXBWaWV3T2ZGaWxlKG1hcCwgc2l6ZSkpOworCisgICAgcmV0
dXJuIERhdGEoV1RGTW92ZShidWZmZXIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0Nh
Y2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKaW5kZXggNTE1
YzA5ZWJiZmQuLjZlMmZjNDkwZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApAQCAtNDgsMTEg
KzQ4LDExIEBAIERhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiAg
ICAgbV9idWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoY29waWVk
RGF0YSwgc2l6ZSwgY29waWVkRGF0YSwgZmFzdEZyZWUpKTsKIH0KIAotRGF0YTo6RGF0YShHUmVm
UHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBpbnQgZmQpCitEYXRhOjpEYXRhKEdSZWZQdHI8U291
cEJ1ZmZlcj4mJiBidWZmZXIsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKICAg
ICA6IG1fYnVmZmVyKGJ1ZmZlcikKICAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmQpCiAgICAgLCBt
X3NpemUoYnVmZmVyID8gYnVmZmVyLT5sZW5ndGggOiAwKQotICAgICwgbV9pc01hcChtX3NpemUg
JiYgZmQgIT0gLTEpCisgICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBGaWxlU3lzdGVtOjppc0hhbmRs
ZVZhbGlkKGZkKSkKIHsKIH0KIApAQCAtMTA4LDEyICsxMDgsMTIgQEAgc3RydWN0IE1hcFdyYXBw
ZXIgewogICAgIH5NYXBXcmFwcGVyKCkKICAgICB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUp
OwotICAgICAgICBjbG9zZShmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIEZpbGVTeXN0ZW06OmNs
b3NlRmlsZShmaWxlRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgdm9pZCogbWFwOwogICAgIHNp
emVfdCBzaXplOwotICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICBGaWxlU3lzdGVtOjpQbGF0
Zm9ybUZpbGVIYW5kbGUgZmlsZURlc2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxldGVN
YXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGlj
IHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQogICAgIGRlbGV0ZSB3
cmFwcGVyOwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUs
IGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIEFTU0VSVChtYXApOwogICAg
IEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CkBAIC0xMzAsMjEgKzEzMCwxNCBAQCBEYXRhIERh
dGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKICAgICByZXR1cm4g
eyBXVEZNb3ZlKGJ1ZmZlciksIGZkIH07CiB9CiAKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JN
KFdJTikKLURhdGEgYWRvcHRBbmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0qIHN0cmVhbSwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9
IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oc3RyZWFtKSk7Ci0gICAg
aW50IGZkID0gZ19maWxlX2Rlc2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9S
X0JBU0VEKGlucHV0U3RyZWFtKSk7Ci0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgb2Zm
c2V0LCBzaXplKTsKLX0KLSNlbmRpZgotCiBSZWZQdHI8U2hhcmVkTWVtb3J5PiBEYXRhOjp0cnlD
cmVhdGVTaGFyZWRNZW1vcnkoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3
cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0
aCwgbV9maWxlRGVzY3JpcHRvcik7CisgICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdf
aW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9maWxlRGVzY3JpcHRvcikp
OworICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVT
Q1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOworICAgIHJldHVybiBTaGFyZWRNZW1vcnk6Ondy
YXBNYXAoY29uc3RfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3Ro
LCBmZCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5jcHAKaW5kZXggYmU4NDM3MWE4NjMuLjI4YWY0ZmVhMjBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmls
ZVN5c3RlbS5jcHAKQEAgLTUzLDQ4ICs1MywxMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFPUyhXSU5ET1dTKQotc3RhdGljIERpcmVjdG9y
eUVudHJ5VHlwZSBkaXJlY3RvcnlFbnRyeVR5cGUodWludDhfdCBkdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKGR0eXBlKSB7Ci0gICAgY2FzZSBEVF9ESVI6Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlF
bnRyeVR5cGU6OkRpcmVjdG9yeTsKLSAgICBjYXNlIERUX1JFRzoKLSAgICAgICAgcmV0dXJuIERp
cmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLX0KLSNlbmRpZgotCiB2
b2lkIHRyYXZlcnNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRnVuY3Rpb248
dm9pZCAoY29uc3QgU3RyaW5nJiwgRGlyZWN0b3J5RW50cnlUeXBlKT4mIGZ1bmN0aW9uKQogewot
I2lmICFPUyhXSU5ET1dTKQotICAgIERJUiogZGlyID0gb3BlbmRpcihGaWxlU3lzdGVtOjpmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRpcmVudCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGly
KSkpIHsKLSAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gRFRfRElSICYmIGRwLT5kX3R5cGUgIT0g
RFRfUkVHKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUg
PSBkcC0+ZF9uYW1lOwotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAo
bmFtZSwgIi4uIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBuYW1lU3Ry
aW5nID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICAgICAgaWYgKG5hbWVTdHJpbmcuaXNO
dWxsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24obmFtZVN0cmlu
ZywgZGlyZWN0b3J5RW50cnlUeXBlKGRwLT5kX3R5cGUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIo
ZGlyKTsKLSNlbHNlCiAgICAgYXV0byBlbnRyaWVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eShwYXRoKTsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogZW50cmllcykgewogICAgICAgICBhdXRv
IHR5cGUgPSBGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZW50cnksIEZpbGVTeXN0ZW06OlNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSA/IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0
b3J5IDogRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgICAgICBmdW5jdGlvbihlbnRyeSwg
dHlwZSk7CisgICAgICAgIGZ1bmN0aW9uKEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShlbnRy
eSksIHR5cGUpOwogICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIGRlbGV0ZURpcmVjdG9yeVJlY3Vy
c2l2ZWx5KGNvbnN0IFN0cmluZyYgcGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhOGJlOGEwODY0Yi4uZGU4MTA1ZGVhZDcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisK
KyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIGxpc3REaXJlY3Rvcnkgd2l0aCBhIGVtcHR5IFN0
cmluZyBmaWx0ZXIgd2hpY2gKKyAgICAgICAgd2FzIGZhaWxpbmcgb24gV2luZG93cyBidXQgcGFz
c2luZyBvbiBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9GaWxlU3lzdGVtLmNwcDoKKwogMjAyMC0wMS0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIFN1cHBvcnQgdGhlIGZl
YXR1cmUgZmxhZyBpbiBEdW1wUmVuZGVyVHJlZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCBkMGU1MTUxYTk5OS4uYmM3ODFmNTEyNmEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCkBAIC0xNDUsNCAr
MTQ1LDExIEBAIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgVW5pY29kZURpcmVjdG9yeU5hbWUpCiAg
ICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWREaXJlY3RvcnlOYW1lID09IGRpcmVjdG9yeU5hbWUpOwog
fQogCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGxpc3REaXJlY3RvcnlXaXRoTnVsbEZpbHRlcikK
K3sKKyAgICBhdXRvIGRpcmVjdG9yeUVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5
KEZpbGVTeXN0ZW06OmRpcmVjdG9yeU5hbWUodGVtcEZpbGVQYXRoKCkpLCBTdHJpbmcoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGRpcmVjdG9yeUVudHJpZXMuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShkaXJlY3RvcnlFbnRyaWVzLmNvbnRhaW5zKHRlbXBGaWxlUGF0aCgpKSk7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389410</attachid>
            <date>2020-01-31 13:56:08 -0800</date>
            <delta_ts>2020-01-31 13:59:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>31101</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmJiY2E5NzdlNjIx
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCwxMiArODM4LDIyIEBAIHdlYmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxl
LVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGCiAKIGh0dHAvdGVz
dHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVzdHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAg
XQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50Zmls
dGVyaW5nIFsgU2tpcCBdCiAKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2No
IGJlaGF2aW9yIHNwZWNpZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rp
c2stY2FjaGUtbGFzdC1tb2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBp
bnZlc3RpZ2F0aW9uCitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMu
aHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxp
ZGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2Fj
aGUtaWZyYW1lLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQt
Y2FjaGUuaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3Qt
cmV0dXJucy1udWxsLWZvci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0
dHAvdGVzdHMvY29va2llcy9jb29raWUtd2l0aC1tdWx0aXBsZS1sZXZlbC1wYXRoLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9jb29raWVzL2RvdWJsZS1xdW90ZWQtdmFsdWUtd2l0
aC1zZW1pLWNvbG9uLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvY29va2llcy9odHRwLWdl
dC1jb29raWUtc2V0LWluLWpzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmY2U5NjI2NmIx
ZC4uNDk2OWVmYjNjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9w
aGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVu
dCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIEFkZGVk
IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHNvIG9wZW5GaWxlIHdpdGggUmVhZFdyaXRlIG1hcHBp
bmdzLgorICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBSZWFkV3JpdGUgbWFwcGluZ3MK
KworICAgICAgICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgU3VwcG9ydCBvcGVuaW5nIGZpbGVz
IHdpdGggUmVhZFdyaXRlIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwOgorICAgICAgICBJbXBsZW1lbnQgZ2V0Vm9sdW1lRnJlZVNwYWNlIHNpbmNlIHNv
bWUgb2YgdGhlIHRlc3RzIHVzZSBpdCB3aGVuIHRvZ2dsaW5nIGNhY2hlLgorICAgICAgICAKKwor
ICAgICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisgICAgICAgIFRyZWF0IFN0cmluZygp
IGZpbHRlciBhcyAiKiIgdG8gbWF0Y2ggUE9TSVggYmVoYXZpb3IuCisKIDIwMjAtMDEtMTMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBldmVuIG1vcmUgInNo
b3J0ZXN0IGZvcm0iIGZvcm1hdHRpbmcsIGFuZCBsZXNzICJmaXhlZCBwcmVjaXNpb24iIGFuZCAi
Zml4ZWQgd2lkdGgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcyZjk1M2VhYjNmLi5mZjFiNDI3
MWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAgLTI4NywxNyArMjg3LDE3IEBAIE1hcHBlZEZp
bGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogICAgIHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRh
LCBtX2ZpbGVTaXplKTsKIH0KIAotI2lmIEhBVkUoTU1BUCkKLQotTWFwcGVkRmlsZURhdGE6Ok1h
cHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUs
IGJvb2wmIHN1Y2Nlc3MpCitNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsK
LSAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVPcGVuTW9kZTo6UmVhZCk7Cisg
ICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OlJlYWQpOwogCi0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIG1vZGUpOworICAgIHN1
Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOwogICAgIGNsb3NlRmlsZShmZCk7CiB9CiAKLWJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUg
bW9kZSkKKyNpZiBIQVZFKE1NQVApCisKK2Jvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBw
ZWRGaWxlTW9kZSBtYXBNb2RlKQogewogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQsNyArMzI0LDIyIEBAIGJvb2wgTWFwcGVkRmls
ZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbW9kCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQqIGRhdGEg
PSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCwgTUFQX0ZJTEUgfCAobW9kZSA9PSBNYXBwZWRGaWxl
TW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOworICAgIGlu
dCBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7Cisg
ICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJP
VF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6Cisg
ICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1h
cCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRG
aWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAg
ICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxl
U3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmYuLmU1OTcwZjNlMDI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5o
CkBAIC03OSw2ICs3OSw3IEBAIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlID0gLTE7CiBlbnVtIGNsYXNzIEZpbGVPcGVuTW9kZSB7CiAgICAgUmVhZCwK
ICAgICBXcml0ZSwKKyAgICBSZWFkV3JpdGUsCiAjaWYgT1MoREFSV0lOKQogICAgIEV2ZW50c09u
bHksCiAjZW5kaWYKQEAgLTIwNiw2ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgTWFwcGVkRmlsZURh
dGEoTWFwcGVkRmlsZURhdGEmJik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVE
YXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNz
KTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBw
ZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBw
ZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURh
dGEmJik7CiAKQEAgLTIxNiwxNSArMjE4LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBsZWFrSGFu
ZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQogCiBw
cml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBNYXBwZWRGaWxlTW9kZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVk
RmlsZU1vZGUpOwogCiAgICAgdm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKICAgICB1bnNp
Z25lZCBtX2ZpbGVTaXplIHsgMCB9OwogfTsKIAotaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBw
ZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2Rl
LCBib29sJiBzdWNjZXNzKQoraW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBz
dWNjZXNzKQogewotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgbW9kZSk7Cisg
ICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1h
cE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1v
ZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRs
ZShoYW5kbGUsIG9wZW5Nb2RlLCBtYXBNb2RlKTsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRh
OjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRleCA4NmMwNGY5ZDVlMS4uOGNhOTRkMTIyYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0zNDgsNyArMzQ4LDcgQEAgUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
IG1vZGUpCiAgICAgR1JlZlB0cjxHRmlsZUlPU3RyZWFtPiBpb1N0cmVhbTsKICAgICBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdf
ZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAg
ZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkV3Jp
dGUpIHsKICAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFS
KSkpCiAgICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3Jp
dGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgICAgICBlbHNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dU
Ri93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCAyNzgzOTg4M2ExYS4uMTRhMjM1
ZWZiNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtOTEs
NiArOTEsOCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwog
ICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKICAgICAgICAgcGxhdGZv
cm1GbGFnIHw9IChPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKKyAgICBlbHNlIGlmICht
b2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlKQorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0g
KE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKICNpZiBPUyhEQVJXSU4pCiAgICAgZWxzZSBp
ZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHkpCiAgICAgICAgIHBsYXRmb3JtRmxh
ZyB8PSBPX0VWVE9OTFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3Rl
bVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggNTg1
NDBkYjc4YzguLjBmMWUzYzcwYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmls
ZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3Bw
CkBAIC00MzQsNiArNDM0LDEwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0g
R0VORVJJQ19XUklURTsKICAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdB
WVM7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6Cisg
ICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRFIHwgR0VORVJJQ19SRUFEOworICAg
ICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX0FMV0FZUzsKKyAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAt
NTQ3LDkgKzU1MSwxNyBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICByZXR1cm4gZW50cmllczsK
IH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiwgdWludDY0X3QmKQor
Ym9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJl
ZVNwYWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0
ZXNBdmFpbGFibGVUb0NhbGxlciwgdG90YWxOdW1iZXJPZkJ5dGVzLCB0b3RhbE51bWJlck9mRnJl
ZUJ5dGVzOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRoLndpZGVDaGFyYWN0ZXJz
KCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsICZ0b3RhbE51bWJlck9mQnl0
ZXMsICZ0b3RhbE51bWJlck9mRnJlZUJ5dGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0ID4gc3RhdGljX2Nhc3Q8
VUxPTkdMT05HPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVlU3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0Nh
bGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4g
Z2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKQEAgLTYwMSwxNSArNjEzLDcg
QEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJu
IFVubWFwVmlld09mRmlsZShidWZmZXIpOwogfQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmls
ZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYg
c3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUgPSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcs
IEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVsbHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmls
ZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFw
cGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFw
cGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUp
CiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTYyMywxMSArNjI3LDI3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5n
KGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFET05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdP
UkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgIERXT1JEIGRlc2lyZWRBY2Nl
c3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZp
bGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZ
OworICAgICAgICBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgorICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpS
ZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFEV1JJVEU7CisgICAg
ICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYXV0
byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBwYWdlUHJvdGVj
dGlvbiwgMCwgMCwgbnVsbHB0cik7CiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBGSUxFX01B
UF9SRUFELCAwLCAwLCBzaXplKTsKKyAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBw
aW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCBzaXplKTsKICAgICBDbG9zZUhhbmRsZShtYXBwaW5n
KTsKICAgICBpZiAoIW1fZmlsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dp
bi9QYXRoV2Fsa2VyLmNwcAppbmRleCA4ZDdkN2FjNjgzOC4uYWNlNDg5YTUxZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi93aW4vUGF0aFdhbGtlci5jcHAKQEAgLTMyLDcgKzMyLDExIEBAIG5hbWVzcGFjZSBXVEYgewog
CiBQYXRoV2Fsa2VyOjpQYXRoV2Fsa2VyKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBT
dHJpbmcmIHBhdHRlcm4pCiB7Ci0gICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnkgKyAiXFwiICsg
cGF0dGVybjsKKyAgICBTdHJpbmcgcGF0aDsKKyAgICBpZiAocGF0dGVybi5pc0VtcHR5KCkpCisg
ICAgICAgIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9yeSwgIlxcKiJfcyk7CisgICAgZWxzZQor
ICAgICAgICBwYXRoID0gbWFrZVN0cmluZyhkaXJlY3RvcnksICJcXCJfcywgcGF0dGVybik7CiAg
ICAgbV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRh
KCksICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwYTc0YzBkOTE3Li40MWE1NmNiZGFlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAg
PGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtD
YWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFTb3VwLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgVXNlIG1vcmUgRmlsZVN5c3RlbSBm
dW5jdGlvbmFsaXR5IHRvIHNoYXJlIGNvZGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcDoKKyAgICAgICAg
VXNlIE9wdGlvbmFsPFZlY3Rvcj4gZm9yIG1fYnVmZmVyIHNpbmNlIHdlIG5lZWQgdG8gZGlmZmVy
ZW50aWF0ZSBpc0VtcHR5IGFuZCBpc051bGwuCisKIDIwMjAtMDEtMTQgIFJvc3MgS2lyc2xpbmcg
IDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFdlYlBhc3RlYm9hcmRQcm94eVdQ
RSBzaG91bGQgYmUgV2ViUGFzdGVib2FyZFByb3h5TGliV1BFCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAppbmRleCA3
NWFhOTA1YWI2OC4uODBjOTg2NWY4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcApAQCAtMjgsNyArMjgsNiBA
QAogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlS
YW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgIU9TKFdJ
TkRPV1MpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTM5LDI2ICszOCwzMSBAQAogbmFtZXNw
YWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFPUyhXSU5ET1dT
KQogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAg
IGludCBmZCA9IG9wZW4oRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJVU1IgfCBTX0lXVVNSKTsK
LSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gaGFuZGxlID0g
RmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
V3JpdGUpOworI2lmIFVTRShHTElCKQorICAgIGF1dG8qIG91dHB1dFN0cmVhbSA9IGdfaW9fc3Ry
ZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpOworICAgIGludCBmZCA9
IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChv
dXRwdXRTdHJlYW0pKTsKKyAgICBmY2htb2QoZmQsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKyNlbGlm
ICFPUyhXSU5ET1dTKQorICAgIGZjaG1vZChoYW5kbGUsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKyNl
bmRpZgogCi0gICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8IDApIHsKLSAgICAgICAgY2xv
c2UoZmQpOworICAgIGlmICghRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgbV9zaXpl
KSkgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9y
eU1hcEZvclBhdGgocGF0aCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIG1fc2l6
ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwotICAgIGlmICht
YXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNjZXNz
OworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBGaWxl
U3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZU1v
ZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVT
eXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAor
ICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIHVpbnQ4X3QqIG1h
cERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFwKTsKICAgICBhcHBseShbJm1hcERhdGFd
KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplKSB7CiAgICAgICAgIG1lbWNw
eShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsKQEAgLTY2LDUyICs3MCwyMyBAQCBEYXRhIERh
dGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0pOwogCisjaWYgT1MoV0lORE9XUykKKyAgICBEV09SRCBvbGRQcm90ZWN0aW9u
OworICAgIFZpcnR1YWxQcm90ZWN0KG1hcCwgbV9zaXplLCBGSUxFX01BUF9SRUFELCAmb2xkUHJv
dGVjdGlvbik7CisgICAgRmx1c2hWaWV3T2ZGaWxlKG1hcCwgbV9zaXplKTsKKyNlbHNlCiAgICAg
Ly8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lvbi4KICAgICBtcHJvdGVjdChtYXAsIG1fc2l6ZSwg
UFJPVF9SRUFEKTsKIAogICAgIC8vIEZsdXNoIChhc3luY2hyb25vdXNseSkgdG8gZmlsZSwgdHVy
bmluZyB0aGlzIGludG8gY2xlYW4gbWVtb3J5LgogICAgIG1zeW5jKG1hcCwgbV9zaXplLCBNU19B
U1lOQyk7Ci0KLSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBtX3NpemUsIGZkKTsKLX0K
LSNlbHNlCi1EYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0Ci17
Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlk
KGZpbGUpKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGlmIChGaWxlU3lzdGVtOjp3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpLCBzaXplKCkp
IDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gRGF0YShWZWN0b3I8dWludDhf
dD4obV9idWZmZXIpKTsKLX0KICNlbmRpZgogCi0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIG1hcEZp
bGUoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZ
LCAwKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBz
dGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0KGZkLCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3Nl
KGZkKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0
LnN0X3NpemU7Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAg
cmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmls
ZShmZCwgMCwgc2l6ZSk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBo
YW5kbGUpOwogfQotI2VuZGlmCiAKLURhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCitE
YXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBy
ZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0
aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAgICBpZiAoIUZpbGVTeXN0ZW06
OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMTksMzEgKzk0
LDI4IEBAIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFGaWxlU3lz
dGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBzaXplKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBy
ZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZpbGUsIDAsIHNpemUpOwotI2VuZGlmCiB9CiAKLSNpZiAh
T1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90IHNpemUpCitEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJl
dHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCkpOworfQorCitEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAo
IXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CiAgICAgfQotCi0gICAg
dm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBm
ZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2Uo
ZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBt
YXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJpdmF0ZSwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNz
KSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZk
KTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwcGVkRmlsZS5sZWFrSGFuZGxlKCksIHNp
emUsIGhhbmRsZSk7CiB9Ci0jZWxzZQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6
UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewot
ICAgIHJldHVybiBEYXRhKGZpbGUsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKIAogU0hBMTo6
RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7
CkBAIC0xNzksNDAgKzE1MSwzMyBAQCBzdGF0aWMgU2FsdCBtYWtlU2FsdCgpCiAKIE9wdGlvbmFs
PFNhbHQ+IHJlYWRPck1ha2VTYWx0KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSNpZiAhT1MoV0lO
RE9XUykKLSAgICBhdXRvIGNwYXRoID0gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOwotICAgIGF1dG8gZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19SRE9OTFksIDAp
OwotICAgIFNhbHQgc2FsdDsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9IHJlYWQoZmQsIHNhbHQuZGF0
YSgpLCBzYWx0LnNpemUoKSk7Ci0gICAgY2xvc2UoZmQpOwotICAgIGlmIChieXRlc1JlYWQgIT0g
c3RhdGljX2Nhc3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpKSB7Ci0gICAgICAgIHNhbHQgPSBtYWtl
U2FsdCgpOwotCi0gICAgICAgIHVubGluayhjcGF0aC5kYXRhKCkpOwotICAgICAgICBmZCA9IG9w
ZW4oY3BhdGguZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCBTX0lSVVNSIHwg
U19JV1VTUik7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHdyaXRlKGZkLCBzYWx0LmRhdGEoKSwg
c2FsdC5zaXplKCkpID09IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKTsKLSAgICAg
ICAgY2xvc2UoZmQpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKGZpbGVFeGlzdHMo
cGF0aCkpIHsKKyAgICAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwg
RmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICAgICAgU2FsdCBzYWx0OworICAg
ICAgICBhdXRvIGJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKTsKKyAgICAgICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOworICAgICAgICBpZiAoYnl0ZXNSZWFkICE9IHNh
bHQuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHNh
bHQ7Ci0jZWxzZQotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8g
Ynl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOwotICAgIEZpbGVTeXN0ZW06OmNs
b3NlRmlsZShmaWxlKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQuc2l6ZSgpKSB7Ci0gICAg
ICAgIHNhbHQgPSBtYWtlU2FsdCgpOwogCi0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
cGF0aCk7Ci0gICAgICAgIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lz
dGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKKyAgICAgICAgcmV0dXJuIHNhbHQ7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgU2FsdCBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICAgICAgYXV0byBmaWxl
ID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpX
cml0ZSk7CisgICAgI2lmIFVTRShHTElCKQorICAgICAgICBhdXRvKiBvdXRwdXRTdHJlYW0gPSBn
X2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShmaWxlKSk7CisgICAgICAg
IGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRP
Ul9CQVNFRChvdXRwdXRTdHJlYW0pKTsKKyAgICAgICAgZmNobW9kKGZkLCBTX0lSVVNSIHwgU19J
V1VTUik7CisgICAgI2VsaWYgIU9TKFdJTkRPV1MpCisgICAgICAgIGZjaG1vZChmaWxlLCBTX0lS
VVNSIHwgU19JV1VTUik7CisgICAgI2VuZGlmCiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IEZpbGVT
eXN0ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0
YSgpKSwgc2FsdC5zaXplKCkpID09IHNhbHQuc2l6ZSgpOwogICAgICAgICBGaWxlU3lzdGVtOjpj
bG9zZUZpbGUoZmlsZSk7CiAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVy
biB7IH07CisKKyAgICAgICAgcmV0dXJuIHNhbHQ7CiAgICAgfQotICAgIHJldHVybiBzYWx0Owot
I2VuZGlmCisKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCmluZGV4
IGQ3OGQ5OGI2MTc1Li5hMGNhMjRiNTUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKQEAgLTUzLDE5ICs1MywxNiBA
QCBwdWJsaWM6CiAgICAgfkRhdGEoKSB7IH0KIAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7Ci0j
aWYgIU9TKFdJTkRPV1MpCi0gICAgc3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXpl
X3QsIGludCBmZCk7Ci0jZW5kaWYKKyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlKTsKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAgICAgRGF0
YShPU09iamVjdFB0cjxkaXNwYXRjaF9kYXRhX3Q+JiYsIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZm
ZXIpOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+
JiYsIGludCBmZCA9IC0xKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgZXhwbGljaXQgRGF0YShW
ZWN0b3I8dWludDhfdD4mJik7Ci0gICAgRGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5k
bGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CisgICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+
JiYsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCA9IEZpbGVTeXN0ZW06OmludmFs
aWRQbGF0Zm9ybUZpbGVIYW5kbGUpOworI2VsaWYgVVNFKENVUkwpCisgICAgZXhwbGljaXQgRGF0
YShPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+JiYpOwogI2VuZGlmCiAgICAgYm9vbCBpc051bGwo
KSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9CkBA
IC05NCwxMCArOTEsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogI2lmIFVTRShTT1VQKQogICAgIG11
dGFibGUgR1JlZlB0cjxTb3VwQnVmZmVyPiBtX2J1ZmZlcjsKLSAgICBpbnQgbV9maWxlRGVzY3Jp
cHRvciB7IC0xIH07CisgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZmlsZURl
c2NyaXB0b3IgeyBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlIH07CiAjZW5k
aWYKLSNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3Rvcjx1aW50OF90PiBtX2J1ZmZlcjsKKyNpZiBV
U0UoQ1VSTCkKKyAgICBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IG1fYnVmZmVyOwogI2VuZGlm
CiAgICAgbXV0YWJsZSBjb25zdCB1aW50OF90KiBtX2RhdGEgeyBudWxscHRyIH07CiAgICAgc2l6
ZV90IG1fc2l6ZSB7IDAgfTsKQEAgLTEwNiwxNyArMTAzLDggQEAgcHJpdmF0ZToKIAogRGF0YSBj
b25jYXRlbmF0ZShjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYpOwogYm9vbCBieXRlc0VxdWFsKGNv
bnN0IERhdGEmLCBjb25zdCBEYXRhJik7Ci0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIGFkb3B0QW5k
TWFwRmlsZShpbnQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZWxzZQogRGF0YSBhZG9wdEFu
ZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBz
aXplX3QpOwotI2VuZGlmCi0jaWYgVVNFKEdMSUIpICYmICFQTEFURk9STShXSU4pCi1EYXRhIGFk
b3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNl
bmRpZgotI2lmICFPUyhXSU5ET1dTKQogRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpOwot
I2VuZGlmCiBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogdXNpbmcgU2FsdCA9
IHN0ZDo6YXJyYXk8dWludDhfdCwgOD47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCmluZGV4IDZhMzlm
ODg3MDA4Li4wMzNjZGUzMGUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KQEAgLTkyLDExICs5
MiwxMSBAQCBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCiAg
ICAgcmV0dXJuIHsgYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZV9jb25jYXQoYS5k
aXNwYXRjaERhdGEoKSwgYi5kaXNwYXRjaERhdGEoKSkpIH07CiB9CiAKLURhdGEgRGF0YTo6YWRv
cHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1h
cCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
ZmQpCiB7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsK
LSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKICAgICBhdXRv
IGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwg
ZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxU
LCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKICAgICB9KSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNmNDMxNTZjNWEwLi4wMDMwNWZmYjJjYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhQ3VybC5jcHAKQEAgLTMwLDQwICszMCwzMSBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQorICAgIDogbV9idWZmZXIoVmVjdG9yPHVpbnQ4X3Q+KHNpemUp
KQorICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgbV9idWZmZXIucmVzaXplKHNpemUpOwotICAg
IG1fc2l6ZSA9IHNpemU7Ci0gICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSwgZGF0YSwgc2l6ZSk7
CisgICAgbWVtY3B5KG1fYnVmZmVyLT5kYXRhKCksIGRhdGEsIHNpemUpOwogfQogCi1EYXRhOjpE
YXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBzaXplX3Qgb2Zmc2V0LCBz
aXplX3Qgc2l6ZSkKLXsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0g
c2l6ZTsKLSAgICBGaWxlU3lzdGVtOjpzZWVrRmlsZShmaWxlLCBvZmZzZXQsIEZpbGVTeXN0ZW06
OkZpbGVTZWVrT3JpZ2luOjpCZWdpbm5pbmcpOwotICAgIEZpbGVTeXN0ZW06OnJlYWRGcm9tRmls
ZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2J1ZmZlci5kYXRhKCkpLCBzaXplKTsK
LSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLURhdGE6OkRhdGEoVmVjdG9y
PHVpbnQ4X3Q+JiYgYnVmZmVyKQorRGF0YTo6RGF0YShPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
JiYgYnVmZmVyKQogICAgIDogbV9idWZmZXIoV1RGTW92ZShidWZmZXIpKQorICAgICwgbV9zaXpl
KG1fYnVmZmVyID8gbV9idWZmZXItPnNpemUoKSA6IDApCiB7Ci0gICAgbV9zaXplID0gbV9idWZm
ZXIuc2l6ZSgpOwogfQogCiBEYXRhIERhdGE6OmVtcHR5KCkKIHsKLSAgICByZXR1cm4geyB9Owor
ICAgIHJldHVybiBEYXRhKFdURjo6bnVsbG9wdCk7CiB9CiAKIGNvbnN0IHVpbnQ4X3QqIERhdGE6
OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCk7CisgICAgcmV0dXJu
IG1fYnVmZmVyID8gbV9idWZmZXItPmRhdGEoKSA6IG51bGxwdHI7CiB9CiAKIGJvb2wgRGF0YTo6
aXNOdWxsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOworICAgIHJl
dHVybiAhbV9idWZmZXI7CiB9CiAKIGJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9v
bChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CkBAIC03MSwyMSArNjIs
NDEgQEAgYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihtX2J1ZmZlci5kYXRhKCkpLCBtX2J1ZmZlci5zaXplKCkpOworICAgIHJldHVy
biBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLT5kYXRh
KCkpLCBtX2J1ZmZlci0+c2l6ZSgpKTsKIH0KIAogRGF0YSBEYXRhOjpzdWJyYW5nZShzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKIHsKLSAgICByZXR1cm4geyBtX2J1ZmZlci5kYXRh
KCkgKyBvZmZzZXQsIHNpemUgfTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgcmV0dXJuIHsgbV9idWZmZXItPmRhdGEoKSArIG9mZnNldCwgc2l6ZSB9Owog
fQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCiB7Cisg
ICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBiOworICAgIGlmIChiLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoYS5zaXpl
KCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGEuZGF0YSgpLCBhLnNp
emUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBhLnNpemUoKSwgYi5kYXRhKCksIGIu
c2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3ZlKGJ1ZmZlcikpOwogfQogCitEYXRhIERh
dGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSBmZCkKK3sKKyAgICBBU1NFUlQobWFwKTsKKyAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUoZmQpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihzaXplKTsKKyAgICBtZW1j
cHkoYnVmZmVyLmRhdGEoKSwgbWFwLCBzaXplKTsKKyAgICBBU1NFUlQoRmlsZVN5c3RlbTo6dW5t
YXBWaWV3T2ZGaWxlKG1hcCwgc2l6ZSkpOworCisgICAgcmV0dXJuIERhdGEoV1RGTW92ZShidWZm
ZXIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKaW5kZXggNTE1YzA5ZWJiZmQuLjZlMmZjNDkwZWIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApAQCAtNDgsMTEgKzQ4LDExIEBAIERhdGE6OkRhdGEo
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiAgICAgbV9idWZmZXIgPSBhZG9wdEdS
ZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoY29waWVkRGF0YSwgc2l6ZSwgY29waWVkRGF0
YSwgZmFzdEZyZWUpKTsKIH0KIAotRGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVm
ZmVyLCBpbnQgZmQpCitEYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikK
ICAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmQpCiAgICAgLCBtX3NpemUoYnVmZmVyID8gYnVmZmVy
LT5sZW5ndGggOiAwKQotICAgICwgbV9pc01hcChtX3NpemUgJiYgZmQgIT0gLTEpCisgICAgLCBt
X2lzTWFwKG1fc2l6ZSAmJiBGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZkKSkKIHsKIH0KIApA
QCAtMTA4LDEyICsxMDgsMTIgQEAgc3RydWN0IE1hcFdyYXBwZXIgewogICAgIH5NYXBXcmFwcGVy
KCkKICAgICB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAgICAgICBjbG9zZShmaWxl
RGVzY3JpcHRvcik7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlRGVzY3JpcHRv
cik7CiAgICAgfQogCiAgICAgdm9pZCogbWFwOwogICAgIHNpemVfdCBzaXplOwotICAgIGludCBm
aWxlRGVzY3JpcHRvcjsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZURl
c2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIq
IHdyYXBwZXIpCkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBl
cihNYXBXcmFwcGVyKiB3cmFwcGVyKQogICAgIGRlbGV0ZSB3cmFwcGVyOwogfQogCi1EYXRhIERh
dGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKK0RhdGEgRGF0YTo6
YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxl
SGFuZGxlIGZkKQogewogICAgIEFTU0VSVChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZB
SUxFRCk7CkBAIC0xMzAsMjEgKzEzMCwxNCBAQCBEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1h
cCwgc2l6ZV90IHNpemUsIGludCBmZCkKICAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlciksIGZk
IH07CiB9CiAKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURhdGEgYWRvcHRBbmRN
YXBGaWxlKEdGaWxlSU9TdHJlYW0qIHN0cmVhbSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUp
Ci17Ci0gICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1
dF9zdHJlYW0oR19JT19TVFJFQU0oc3RyZWFtKSk7Ci0gICAgaW50IGZkID0gZ19maWxlX2Rlc2Ny
aXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKGlucHV0U3RyZWFtKSk7
Ci0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgb2Zmc2V0LCBzaXplKTsKLX0KLSNlbmRp
ZgotCiBSZWZQdHI8U2hhcmVkTWVtb3J5PiBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSBj
b25zdAogewogICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hh
cio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgbV9maWxlRGVzY3JpcHRvcik7
CisgICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9z
dHJlYW0oR19JT19TVFJFQU0obV9maWxlRGVzY3JpcHRvcikpOworICAgIGludCBmZCA9IGdfZmls
ZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChpbnB1dFN0
cmVhbSkpOworICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OndyYXBNYXAoY29uc3RfY2FzdDxjaGFy
Kj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3RoLCBmZCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKaW5kZXggYmU4NDM3
MWE4NjMuLjI4YWY0ZmVhMjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKQEAgLTUzLDQ4
ICs1MywxMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
IAotI2lmICFPUyhXSU5ET1dTKQotc3RhdGljIERpcmVjdG9yeUVudHJ5VHlwZSBkaXJlY3RvcnlF
bnRyeVR5cGUodWludDhfdCBkdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGR0eXBlKSB7Ci0gICAgY2Fz
ZSBEVF9ESVI6Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeTsK
LSAgICBjYXNlIERUX1JFRzoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6Rmls
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICB9Ci0gICAgcmV0dXJuIERpcmVj
dG9yeUVudHJ5VHlwZTo6RmlsZTsKLX0KLSNlbmRpZgotCiB2b2lkIHRyYXZlcnNlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwg
RGlyZWN0b3J5RW50cnlUeXBlKT4mIGZ1bmN0aW9uKQogewotI2lmICFPUyhXSU5ET1dTKQotICAg
IERJUiogZGlyID0gb3BlbmRpcihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIGRpcmVu
dCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKLSAgICAgICAgaWYgKGRw
LT5kX3R5cGUgIT0gRFRfRElSICYmIGRwLT5kX3R5cGUgIT0gRFRfUkVHKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAg
ICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBuYW1lU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChuYW1lKTsKLSAgICAgICAgaWYgKG5hbWVTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24obmFtZVN0cmluZywgZGlyZWN0b3J5RW50cnlUeXBl
KGRwLT5kX3R5cGUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLSNlbHNlCiAgICAgYXV0
byBlbnRyaWVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoKTsKICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogZW50cmllcykgewogICAgICAgICBhdXRvIHR5cGUgPSBGaWxlU3lzdGVtOjpm
aWxlSXNEaXJlY3RvcnkoZW50cnksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3M6Ok5vKSA/IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5IDogRGlyZWN0b3J5RW50cnlU
eXBlOjpGaWxlOwotICAgICAgICBmdW5jdGlvbihlbnRyeSwgdHlwZSk7CisgICAgICAgIGZ1bmN0
aW9uKEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShlbnRyeSksIHR5cGUpOwogICAgIH0KLSNl
bmRpZgogfQogCiB2b2lkIGRlbGV0ZURpcmVjdG9yeVJlY3Vyc2l2ZWx5KGNvbnN0IFN0cmluZyYg
cGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBhOGJlOGEwODY0Yi4uZGU4MTA1ZGVhZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wMS0zMCAgQ2hyaXN0
b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVt
ZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRl
c3QgZm9yIGxpc3REaXJlY3Rvcnkgd2l0aCBhIGVtcHR5IFN0cmluZyBmaWx0ZXIgd2hpY2gKKyAg
ICAgICAgd2FzIGZhaWxpbmcgb24gV2luZG93cyBidXQgcGFzc2luZyBvbiBvdGhlciBwbGF0Zm9y
bXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoK
KwogMjAyMC0wMS0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0xGQ11bSW50ZWdyYXRpb25dIFN1cHBvcnQgdGhlIGZlYXR1cmUgZmxhZyBpbiBEdW1wUmVu
ZGVyVHJlZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5
c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcApp
bmRleCBkMGU1MTUxYTk5OS4uYmM3ODFmNTEyNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCkBAIC0xNDUsNCArMTQ1LDExIEBAIFRFU1RfRihGaWxl
U3lzdGVtVGVzdCwgVW5pY29kZURpcmVjdG9yeU5hbWUpCiAgICAgRVhQRUNUX1RSVUUoZXhwZWN0
ZWREaXJlY3RvcnlOYW1lID09IGRpcmVjdG9yeU5hbWUpOwogfQogCitURVNUX0YoRmlsZVN5c3Rl
bVRlc3QsIGxpc3REaXJlY3RvcnlXaXRoTnVsbEZpbHRlcikKK3sKKyAgICBhdXRvIGRpcmVjdG9y
eUVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KEZpbGVTeXN0ZW06OmRpcmVjdG9y
eU5hbWUodGVtcEZpbGVQYXRoKCkpLCBTdHJpbmcoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGRpcmVj
dG9yeUVudHJpZXMuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShkaXJlY3RvcnlFbnRyaWVz
LmNvbnRhaW5zKHRlbXBGaWxlUGF0aCgpKSk7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389411</attachid>
            <date>2020-01-31 13:59:41 -0800</date>
            <delta_ts>2020-01-31 16:11:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>31186</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmJiY2E5NzdlNjIx
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCwxMiArODM4LDIyIEBAIHdlYmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxl
LVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGCiAKIGh0dHAvdGVz
dHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVzdHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAg
XQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50Zmls
dGVyaW5nIFsgU2tpcCBdCiAKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2No
IGJlaGF2aW9yIHNwZWNpZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rp
c2stY2FjaGUtbGFzdC1tb2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBp
bnZlc3RpZ2F0aW9uCitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMu
aHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxp
ZGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2Fj
aGUtaWZyYW1lLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQt
Y2FjaGUuaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3Qt
cmV0dXJucy1udWxsLWZvci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0
dHAvdGVzdHMvY29va2llcy9jb29raWUtd2l0aC1tdWx0aXBsZS1sZXZlbC1wYXRoLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9jb29raWVzL2RvdWJsZS1xdW90ZWQtdmFsdWUtd2l0
aC1zZW1pLWNvbG9uLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvY29va2llcy9odHRwLWdl
dC1jb29raWUtc2V0LWluLWpzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmY2U5NjI2NmIx
ZC4uNDk2OWVmYjNjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9w
aGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVu
dCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIEFkZGVk
IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHNvIG9wZW5GaWxlIHdpdGggUmVhZFdyaXRlIG1hcHBp
bmdzLgorICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBSZWFkV3JpdGUgbWFwcGluZ3MK
KworICAgICAgICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgU3VwcG9ydCBvcGVuaW5nIGZpbGVz
IHdpdGggUmVhZFdyaXRlIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwOgorICAgICAgICBJbXBsZW1lbnQgZ2V0Vm9sdW1lRnJlZVNwYWNlIHNpbmNlIHNv
bWUgb2YgdGhlIHRlc3RzIHVzZSBpdCB3aGVuIHRvZ2dsaW5nIGNhY2hlLgorICAgICAgICAKKwor
ICAgICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisgICAgICAgIFRyZWF0IFN0cmluZygp
IGZpbHRlciBhcyAiKiIgdG8gbWF0Y2ggUE9TSVggYmVoYXZpb3IuCisKIDIwMjAtMDEtMTMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBldmVuIG1vcmUgInNo
b3J0ZXN0IGZvcm0iIGZvcm1hdHRpbmcsIGFuZCBsZXNzICJmaXhlZCBwcmVjaXNpb24iIGFuZCAi
Zml4ZWQgd2lkdGgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcyZjk1M2VhYjNmLi5mZjFiNDI3
MWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAgLTI4NywxNyArMjg3LDE3IEBAIE1hcHBlZEZp
bGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogICAgIHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRh
LCBtX2ZpbGVTaXplKTsKIH0KIAotI2lmIEhBVkUoTU1BUCkKLQotTWFwcGVkRmlsZURhdGE6Ok1h
cHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUs
IGJvb2wmIHN1Y2Nlc3MpCitNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsK
LSAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVPcGVuTW9kZTo6UmVhZCk7Cisg
ICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OlJlYWQpOwogCi0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIG1vZGUpOworICAgIHN1
Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOwogICAgIGNsb3NlRmlsZShmZCk7CiB9CiAKLWJvb2wgTWFwcGVkRmlsZURhdGE6
Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUg
bW9kZSkKKyNpZiBIQVZFKE1NQVApCisKK2Jvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBw
ZWRGaWxlTW9kZSBtYXBNb2RlKQogewogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQsNyArMzI0LDIyIEBAIGJvb2wgTWFwcGVkRmls
ZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbW9kCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQqIGRhdGEg
PSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCwgTUFQX0ZJTEUgfCAobW9kZSA9PSBNYXBwZWRGaWxl
TW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOworICAgIGlu
dCBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7Cisg
ICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJP
VF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6Cisg
ICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1h
cCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRG
aWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAg
ICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxl
U3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmYuLmU1OTcwZjNlMDI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5o
CkBAIC03OSw2ICs3OSw3IEBAIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlID0gLTE7CiBlbnVtIGNsYXNzIEZpbGVPcGVuTW9kZSB7CiAgICAgUmVhZCwK
ICAgICBXcml0ZSwKKyAgICBSZWFkV3JpdGUsCiAjaWYgT1MoREFSV0lOKQogICAgIEV2ZW50c09u
bHksCiAjZW5kaWYKQEAgLTIwNiw2ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgTWFwcGVkRmlsZURh
dGEoTWFwcGVkRmlsZURhdGEmJik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVE
YXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNz
KTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBw
ZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBw
ZWRGaWxlRGF0YSgpOwogICAgIE1hcHBlZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURh
dGEmJik7CiAKQEAgLTIxNiwxNSArMjE4LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBsZWFrSGFu
ZGxlKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQogCiBw
cml2YXRlOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBNYXBwZWRGaWxlTW9kZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVk
RmlsZU1vZGUpOwogCiAgICAgdm9pZCogbV9maWxlRGF0YSB7IG51bGxwdHIgfTsKICAgICB1bnNp
Z25lZCBtX2ZpbGVTaXplIHsgMCB9OwogfTsKIAotaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBw
ZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2Rl
LCBib29sJiBzdWNjZXNzKQoraW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBz
dWNjZXNzKQogewotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgbW9kZSk7Cisg
ICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1h
cE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1v
ZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRs
ZShoYW5kbGUsIG9wZW5Nb2RlLCBtYXBNb2RlKTsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRh
OjpNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRleCA4NmMwNGY5ZDVlMS4uOGNhOTRkMTIyYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0zNDgsNyArMzQ4LDcgQEAgUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
IG1vZGUpCiAgICAgR1JlZlB0cjxHRmlsZUlPU3RyZWFtPiBpb1N0cmVhbTsKICAgICBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdf
ZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAg
ZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkV3Jp
dGUpIHsKICAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFS
KSkpCiAgICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3Jp
dGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgICAgICBlbHNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dU
Ri93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCAyNzgzOTg4M2ExYS4uMTRhMjM1
ZWZiNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtOTEs
NiArOTEsOCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwog
ICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKICAgICAgICAgcGxhdGZv
cm1GbGFnIHw9IChPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKKyAgICBlbHNlIGlmICht
b2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlKQorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0g
KE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKICNpZiBPUyhEQVJXSU4pCiAgICAgZWxzZSBp
ZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHkpCiAgICAgICAgIHBsYXRmb3JtRmxh
ZyB8PSBPX0VWVE9OTFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3Rl
bVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggNTg1
NDBkYjc4YzguLjBmMWUzYzcwYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmls
ZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3Bw
CkBAIC00MzQsNiArNDM0LDEwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0g
R0VORVJJQ19XUklURTsKICAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdB
WVM7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6Cisg
ICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRFIHwgR0VORVJJQ19SRUFEOworICAg
ICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX0FMV0FZUzsKKyAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAt
NTQ3LDkgKzU1MSwxNyBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICByZXR1cm4gZW50cmllczsK
IH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiwgdWludDY0X3QmKQor
Ym9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJl
ZVNwYWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0
ZXNBdmFpbGFibGVUb0NhbGxlciwgdG90YWxOdW1iZXJPZkJ5dGVzLCB0b3RhbE51bWJlck9mRnJl
ZUJ5dGVzOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRoLndpZGVDaGFyYWN0ZXJz
KCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsICZ0b3RhbE51bWJlck9mQnl0
ZXMsICZ0b3RhbE51bWJlck9mRnJlZUJ5dGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0ID4gc3RhdGljX2Nhc3Q8
VUxPTkdMT05HPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVlU3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0Nh
bGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4g
Z2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKQEAgLTYwMSwxNSArNjEzLDcg
QEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJu
IFVubWFwVmlld09mRmlsZShidWZmZXIpOwogfQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmls
ZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYg
c3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUgPSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcs
IEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVsbHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmls
ZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFw
cGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFw
cGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUp
CiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTYyMywxMSArNjI3LDI3IEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5n
KGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFET05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdP
UkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgIERXT1JEIGRlc2lyZWRBY2Nl
c3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZp
bGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZ
OworICAgICAgICBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgorICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpS
ZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFEV1JJVEU7CisgICAg
ICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYXV0
byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBwYWdlUHJvdGVj
dGlvbiwgMCwgMCwgbnVsbHB0cik7CiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBGSUxFX01B
UF9SRUFELCAwLCAwLCBzaXplKTsKKyAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBw
aW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCBzaXplKTsKICAgICBDbG9zZUhhbmRsZShtYXBwaW5n
KTsKICAgICBpZiAoIW1fZmlsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dp
bi9QYXRoV2Fsa2VyLmNwcAppbmRleCA4ZDdkN2FjNjgzOC4uYWNlNDg5YTUxZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi93aW4vUGF0aFdhbGtlci5jcHAKQEAgLTMyLDcgKzMyLDExIEBAIG5hbWVzcGFjZSBXVEYgewog
CiBQYXRoV2Fsa2VyOjpQYXRoV2Fsa2VyKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBT
dHJpbmcmIHBhdHRlcm4pCiB7Ci0gICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnkgKyAiXFwiICsg
cGF0dGVybjsKKyAgICBTdHJpbmcgcGF0aDsKKyAgICBpZiAocGF0dGVybi5pc0VtcHR5KCkpCisg
ICAgICAgIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9yeSwgIlxcKiJfcyk7CisgICAgZWxzZQor
ICAgICAgICBwYXRoID0gbWFrZVN0cmluZyhkaXJlY3RvcnksICJcXCJfcywgcGF0dGVybik7CiAg
ICAgbV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRh
KCksICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwYTc0YzBkOTE3Li40MWE1NmNiZGFlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAg
PGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtD
YWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFTb3VwLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgVXNlIG1vcmUgRmlsZVN5c3RlbSBm
dW5jdGlvbmFsaXR5IHRvIHNoYXJlIGNvZGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcDoKKyAgICAgICAg
VXNlIE9wdGlvbmFsPFZlY3Rvcj4gZm9yIG1fYnVmZmVyIHNpbmNlIHdlIG5lZWQgdG8gZGlmZmVy
ZW50aWF0ZSBpc0VtcHR5IGFuZCBpc051bGwuCisKIDIwMjAtMDEtMTQgIFJvc3MgS2lyc2xpbmcg
IDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFdlYlBhc3RlYm9hcmRQcm94eVdQ
RSBzaG91bGQgYmUgV2ViUGFzdGVib2FyZFByb3h5TGliV1BFCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAppbmRleCA3
NWFhOTA1YWI2OC4uN2I3NTc0NGIzY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcApAQCAtMjgsNyArMjgsNiBA
QAogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlS
YW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgIU9TKFdJ
TkRPV1MpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTM5LDI2ICszOCwzMSBAQAogbmFtZXNw
YWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFPUyhXSU5ET1dT
KQogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAg
IGludCBmZCA9IG9wZW4oRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJVU1IgfCBTX0lXVVNSKTsK
LSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gaGFuZGxlID0g
RmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
V3JpdGUpOworI2lmIFVTRShHTElCKQorICAgIGF1dG8qIG91dHB1dFN0cmVhbSA9IGdfaW9fc3Ry
ZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpOworICAgIGludCBmZCA9
IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChv
dXRwdXRTdHJlYW0pKTsKKyAgICBmY2htb2QoZmQsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKyNlbGlm
ICFPUyhXSU5ET1dTKQorICAgIGZjaG1vZChoYW5kbGUsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKyNl
bmRpZgogCi0gICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8IDApIHsKLSAgICAgICAgY2xv
c2UoZmQpOworICAgIGlmICghRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgbV9zaXpl
KSkgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9y
eU1hcEZvclBhdGgocGF0aCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIG1fc2l6
ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwotICAgIGlmICht
YXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNjZXNz
OworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBGaWxl
U3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZU1v
ZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVT
eXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAor
ICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIHVpbnQ4X3QqIG1h
cERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFwKTsKICAgICBhcHBseShbJm1hcERhdGFd
KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplKSB7CiAgICAgICAgIG1lbWNw
eShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsKQEAgLTY2LDUyICs3MCwyMyBAQCBEYXRhIERh
dGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0pOwogCisjaWYgT1MoV0lORE9XUykKKyAgICBEV09SRCBvbGRQcm90ZWN0aW9u
OworICAgIFZpcnR1YWxQcm90ZWN0KG1hcCwgbV9zaXplLCBGSUxFX01BUF9SRUFELCAmb2xkUHJv
dGVjdGlvbik7CisgICAgRmx1c2hWaWV3T2ZGaWxlKG1hcCwgbV9zaXplKTsKKyNlbHNlCiAgICAg
Ly8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lvbi4KICAgICBtcHJvdGVjdChtYXAsIG1fc2l6ZSwg
UFJPVF9SRUFEKTsKIAogICAgIC8vIEZsdXNoIChhc3luY2hyb25vdXNseSkgdG8gZmlsZSwgdHVy
bmluZyB0aGlzIGludG8gY2xlYW4gbWVtb3J5LgogICAgIG1zeW5jKG1hcCwgbV9zaXplLCBNU19B
U1lOQyk7Ci0KLSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBtX3NpemUsIGZkKTsKLX0K
LSNlbHNlCi1EYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0Ci17
Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlk
KGZpbGUpKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGlmIChGaWxlU3lzdGVtOjp3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpLCBzaXplKCkp
IDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gRGF0YShWZWN0b3I8dWludDhf
dD4obV9idWZmZXIpKTsKLX0KICNlbmRpZgogCi0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIG1hcEZp
bGUoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZ
LCAwKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBz
dGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0KGZkLCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3Nl
KGZkKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0
LnN0X3NpemU7Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAg
cmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmls
ZShmZCwgMCwgc2l6ZSk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBo
YW5kbGUpOwogfQotI2VuZGlmCiAKLURhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCitE
YXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBy
ZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0
aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAgICBpZiAoIUZpbGVTeXN0ZW06
OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMTksMzEgKzk0
LDI4IEBAIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFGaWxlU3lz
dGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBzaXplKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBy
ZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZpbGUsIDAsIHNpemUpOwotI2VuZGlmCiB9CiAKLSNpZiAh
T1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90IHNpemUpCitEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJl
dHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCkpOworfQorCitEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAo
IXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CiAgICAgfQotCi0gICAg
dm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBm
ZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2Uo
ZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBt
YXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJpdmF0ZSwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNz
KSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZk
KTsKLX0KLSNlbHNlCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJu
IERhdGEoZmlsZSwgb2Zmc2V0LCBzaXplKTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFw
cGVkRmlsZS5sZWFrSGFuZGxlKCksIHNpemUsIGhhbmRsZSk7CiB9Ci0jZW5kaWYKIAogU0hBMTo6
RGlnZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7
CkBAIC0xNzksNDAgKzE1MSwzMiBAQCBzdGF0aWMgU2FsdCBtYWtlU2FsdCgpCiAKIE9wdGlvbmFs
PFNhbHQ+IHJlYWRPck1ha2VTYWx0KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSNpZiAhT1MoV0lO
RE9XUykKLSAgICBhdXRvIGNwYXRoID0gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOwotICAgIGF1dG8gZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19SRE9OTFksIDAp
OwotICAgIFNhbHQgc2FsdDsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9IHJlYWQoZmQsIHNhbHQuZGF0
YSgpLCBzYWx0LnNpemUoKSk7Ci0gICAgY2xvc2UoZmQpOwotICAgIGlmIChieXRlc1JlYWQgIT0g
c3RhdGljX2Nhc3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpKSB7Ci0gICAgICAgIHNhbHQgPSBtYWtl
U2FsdCgpOwotCi0gICAgICAgIHVubGluayhjcGF0aC5kYXRhKCkpOwotICAgICAgICBmZCA9IG9w
ZW4oY3BhdGguZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCBTX0lSVVNSIHwg
U19JV1VTUik7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHdyaXRlKGZkLCBzYWx0LmRhdGEoKSwg
c2FsdC5zaXplKCkpID09IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKTsKLSAgICAg
ICAgY2xvc2UoZmQpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKGZpbGVFeGlzdHMo
cGF0aCkpIHsKKyAgICAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwg
RmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICAgICAgU2FsdCBzYWx0OworICAg
ICAgICBhdXRvIGJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKTsKKyAgICAgICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOworICAgICAgICBpZiAoYnl0ZXNSZWFkICE9IHNh
bHQuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICByZXR1cm4gc2Fs
dDsKICAgICB9Ci0gICAgcmV0dXJuIHNhbHQ7Ci0jZWxzZQotICAgIGF1dG8gZmlsZSA9IEZpbGVT
eXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0g
ICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21G
aWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXpl
KCkpOworCisgICAgU2FsdCBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBhdXRvIGZpbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsK
KyNpZiBVU0UoR0xJQikKKyAgICBhdXRvKiBvdXRwdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRf
b3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShmaWxlKSk7CisgICAgaW50IGZkID0gZ19maWxlX2Rl
c2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKG91dHB1dFN0cmVh
bSkpOworICAgIGZjaG1vZChmZCwgU19JUlVTUiB8IFNfSVdVU1IpOworI2VsaWYgIU9TKFdJTkRP
V1MpCisgICAgZmNobW9kKGZpbGUsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKyNlbmRpZgorICAgIGJv
b2wgc3VjY2VzcyA9IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpID09IHNhbHQuc2l6ZSgpOwogICAg
IEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQu
c2l6ZSgpKSB7Ci0gICAgICAgIHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGlmICghc3VjY2VzcykK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHBh
dGgpOwotICAgICAgICBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3Rl
bTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IEZpbGVTeXN0
ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgp
KSwgc2FsdC5zaXplKCkpID09IHNhbHQuc2l6ZSgpOwotICAgICAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUoZmlsZSk7Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQogICAgIHJldHVybiBzYWx0OwotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuaAppbmRleCBkNzhkOThiNjE3NS4uYTBjYTI0YjU1MjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCkBAIC01MywxOSArNTMsMTYgQEAgcHVibGljOgogICAgIH5EYXRhKCkgeyB9CiAK
ICAgICBzdGF0aWMgRGF0YSBlbXB0eSgpOwotI2lmICFPUyhXSU5ET1dTKQotICAgIHN0YXRpYyBE
YXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90LCBpbnQgZmQpOwotI2VuZGlmCisgICAgc3Rh
dGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBlbnVtIGNsYXNzIEJhY2tp
bmcgeyBCdWZmZXIsIE1hcCB9OwogICAgIERhdGEoT1NPYmplY3RQdHI8ZGlzcGF0Y2hfZGF0YV90
PiYmLCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgogI2lmIFVTRShTT1VQKQot
ICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBpbnQgZmQgPSAtMSk7Ci0jZWxpZiBPUyhX
SU5ET1dTKQotICAgIGV4cGxpY2l0IERhdGEoVmVjdG9yPHVpbnQ4X3Q+JiYpOwotICAgIERhdGEo
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwor
ICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmQgPSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKTsKKyNlbGlm
IFVTRShDVVJMKQorICAgIGV4cGxpY2l0IERhdGEoT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiYm
KTsKICNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQpAQCAtOTQsMTAgKzkxLDEwIEBAIHByaXZhdGU6CiAj
ZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQdHI8U291cEJ1ZmZlcj4gbV9i
dWZmZXI7Ci0gICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9OworICAgIEZpbGVTeXN0ZW06
OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVEZXNjcmlwdG9yIHsgRmlsZVN5c3RlbTo6aW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZSB9OwogI2VuZGlmCi0jaWYgT1MoV0lORE9XUykKLSAgICBWZWN0
b3I8dWludDhfdD4gbV9idWZmZXI7CisjaWYgVVNFKENVUkwpCisgICAgT3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhfdCog
bV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CkBAIC0xMDYsMTcg
KzEwMyw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYsIGNvbnN0
IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYpOwotI2lm
ICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50LCBzaXplX3Qgb2Zmc2V0LCBz
aXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgotI2lmIFVTRShHTElC
KSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVhbSos
IHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiAhT1MoV0lORE9XUykKIERhdGEg
bWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNlbmRpZgogRGF0YSBtYXBGaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDg+OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4NzAwOC4uMDMzY2RlMzBlMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YUNvY29hLm1tCkBAIC05MiwxMSArOTIsMTEgQEAgRGF0YSBjb25jYXRlbmF0ZShjb25z
dCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQogICAgIHJldHVybiB7IGFkb3B0T1NPYmplY3QoZGlz
cGF0Y2hfZGF0YV9jcmVhdGVfY29uY2F0KGEuZGlzcGF0Y2hEYXRhKCksIGIuZGlzcGF0Y2hEYXRh
KCkpKSB9OwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUs
IGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIEFTU0VSVChtYXApOwogICAg
IEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7Ci0gICAgY2xvc2UoZmQpOworICAgIEZpbGVTeXN0
ZW06OmNsb3NlRmlsZShmZCk7CiAgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNw
YXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNpemUsIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElT
UEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIFttYXAsIHNpemVdIHsKICAgICAgICAg
bXVubWFwKG1hcCwgc2l6ZSk7CiAgICAgfSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcAppbmRleCBj
ZjQzMTU2YzVhMC4uMDAzMDVmZmIyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCkBAIC0zMCw0
MCArMzAsMzEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
IAogRGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1f
YnVmZmVyKFZlY3Rvcjx1aW50OF90PihzaXplKSkKKyAgICAsIG1fc2l6ZShzaXplKQogewotICAg
IG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIG1lbWNweSht
X2J1ZmZlci5kYXRhKCksIGRhdGEsIHNpemUpOworICAgIG1lbWNweShtX2J1ZmZlci0+ZGF0YSgp
LCBkYXRhLCBzaXplKTsKIH0KIAotRGF0YTo6RGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgbV9idWZmZXIu
cmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgRmlsZVN5c3RlbTo6c2Vla0Zp
bGUoZmlsZSwgb2Zmc2V0LCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdpbjo6QmVnaW5uaW5nKTsK
LSAgICBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obV9idWZmZXIuZGF0YSgpKSwgc2l6ZSk7Ci0gICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZp
bGUpOwotfQotCi1EYXRhOjpEYXRhKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKK0RhdGE6OkRh
dGEoT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiYmIGJ1ZmZlcikKICAgICA6IG1fYnVmZmVyKFdU
Rk1vdmUoYnVmZmVyKSkKKyAgICAsIG1fc2l6ZShtX2J1ZmZlciA/IG1fYnVmZmVyLT5zaXplKCkg
OiAwKQogewotICAgIG1fc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKIH0KIAogRGF0YSBEYXRhOjpl
bXB0eSgpCiB7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gRGF0YShXVEY6Om51bGxvcHQp
OwogfQogCiBjb25zdCB1aW50OF90KiBEYXRhOjpkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9idWZmZXIuZGF0YSgpOworICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5kYXRhKCkg
OiBudWxscHRyOwogfQogCiBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fYnVmZmVyLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1fYnVmZmVyOwogfQogCiBib29sIERh
dGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBh
cHBsaWVyKSBjb25zdApAQCAtNzEsMjEgKzYyLDQxIEBAIGJvb2wgRGF0YTo6YXBwbHkoY29uc3Qg
RnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CiAg
ICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGFw
cGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9idWZmZXIuZGF0YSgpKSwg
bV9idWZmZXIuc2l6ZSgpKTsKKyAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihtX2J1ZmZlci0+ZGF0YSgpKSwgbV9idWZmZXItPnNpemUoKSk7CiB9CiAK
IERhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHsgbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CisgICAgaWYg
KCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IG1fYnVmZmVy
LT5kYXRhKCkgKyBvZmZzZXQsIHNpemUgfTsKIH0KIAogRGF0YSBjb25jYXRlbmF0ZShjb25zdCBE
YXRhJiBhLCBjb25zdCBEYXRhJiBiKQogeworICAgIGlmIChhLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gYjsKKyAgICBpZiAoYi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGE7CisKICAgICBW
ZWN0b3I8dWludDhfdD4gYnVmZmVyKGEuc2l6ZSgpICsgYi5zaXplKCkpOwogICAgIG1lbWNweShi
dWZmZXIuZGF0YSgpLCBhLmRhdGEoKSwgYS5zaXplKCkpOwogICAgIG1lbWNweShidWZmZXIuZGF0
YSgpICsgYS5zaXplKCksIGIuZGF0YSgpLCBiLnNpemUoKSk7CiAgICAgcmV0dXJuIERhdGEoV1RG
TW92ZShidWZmZXIpKTsKIH0KIAorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVf
dCBzaXplLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCit7CisgICAgQVNTRVJU
KG1hcCk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKKworICAgIFZlY3Rvcjx1aW50
OF90PiBidWZmZXIoc2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIG1hcCwgc2l6ZSk7
CisgICAgQVNTRVJUKEZpbGVTeXN0ZW06OnVubWFwVmlld09mRmlsZShtYXAsIHNpemUpKTsKKwor
ICAgIHJldHVybiBEYXRhKFdURk1vdmUoYnVmZmVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCmlu
ZGV4IDUxNWMwOWViYmZkLi42ZTJmYzQ5MGViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKQEAg
LTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVy
KGNvcGllZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9CiAKLURhdGE6OkRh
dGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQorRGF0YTo6RGF0YShHUmVm
UHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
ZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZkKQog
ICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKLSAgICAsIG1faXNNYXAo
bV9zaXplICYmIGZkICE9IC0xKQorICAgICwgbV9pc01hcChtX3NpemUgJiYgRmlsZVN5c3RlbTo6
aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHN0cnVjdCBN
YXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewogICAgICAgICBtdW5tYXAobWFw
LCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAgICAgICBGaWxlU3lz
dGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIHZvaWQqIG1hcDsK
ICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgICAgRmlsZVN5c3Rl
bTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIAogc3RhdGljIHZvaWQg
ZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTIxLDcgKzEyMSw3IEBA
IHN0YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKICAgICBk
ZWxldGUgd3JhcHBlcjsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVf
dCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNp
emUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAgICBBU1NFUlQobWFw
KTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwpAQCAtMTMwLDIxICsxMzAsMTQgQEAg
RGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAg
cmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0jaWYgVVNFKEdMSUIpICYmICFQ
TEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiBzdHJlYW0s
IHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJbnB1dFN0cmVhbSogaW5wdXRT
dHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKHN0cmVhbSkp
OwotICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVT
Q1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUo
ZmQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0
YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwg
IWlzTWFwKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFNoYXJlZE1l
bW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVy
LT5sZW5ndGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fZmlsZURlc2Ny
aXB0b3IpKTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19G
SUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAgICByZXR1cm4gU2hhcmVkTWVt
b3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXIt
Pmxlbmd0aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzLi4yOGFmNGZlYTIwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUZpbGVTeXN0ZW0uY3BwCkBAIC01Myw0OCArNTMsMTMgQEAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKLXN0YXRpYyBE
aXJlY3RvcnlFbnRyeVR5cGUgZGlyZWN0b3J5RW50cnlUeXBlKHVpbnQ4X3QgZHR5cGUpCi17Ci0g
ICAgc3dpdGNoIChkdHlwZSkgewotICAgIGNhc2UgRFRfRElSOgotICAgICAgICByZXR1cm4gRGly
ZWN0b3J5RW50cnlUeXBlOjpEaXJlY3Rvcnk7Ci0gICAgY2FzZSBEVF9SRUc6Ci0gICAgICAgIHJl
dHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZp
bGU7Ci0gICAgfQotICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci19Ci0jZW5k
aWYKLQogdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIERpcmVjdG9yeUVudHJ5VHlwZSk+JiBmdW5jdGlv
bikKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoRmlsZVN5c3Rl
bTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFkaXIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBkaXJlbnQqIGRwOwotICAgIHdoaWxlICgoZHAgPSByZWFk
ZGlyKGRpcikpKSB7Ci0gICAgICAgIGlmIChkcC0+ZF90eXBlICE9IERUX0RJUiAmJiBkcC0+ZF90
eXBlICE9IERUX1JFRykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb25zdCBjaGFy
KiBuYW1lID0gZHAtPmRfbmFtZTsKLSAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIi4iKSB8fCAh
c3RyY21wKG5hbWUsICIuLiIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8g
bmFtZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobmFtZSk7Ci0gICAgICAgIGlmIChuYW1lU3Ry
aW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZ1bmN0aW9uKG5h
bWVTdHJpbmcsIGRpcmVjdG9yeUVudHJ5VHlwZShkcC0+ZF90eXBlKSk7Ci0gICAgfQotICAgIGNs
b3NlZGlyKGRpcik7Ci0jZWxzZQogICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCk7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpIHsKICAgICAg
ICAgYXV0byB0eXBlID0gRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGVudHJ5LCBGaWxlU3lz
dGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykgPyBEaXJlY3RvcnlFbnRyeVR5cGU6
OkRpcmVjdG9yeSA6IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICAgICAgZnVuY3Rpb24o
ZW50cnksIHR5cGUpOworICAgICAgICBmdW5jdGlvbihGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5h
bWUoZW50cnkpLCB0eXBlKTsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBkZWxldGVEaXJlY3Rv
cnlSZWN1cnNpdmVseShjb25zdCBTdHJpbmcmIHBhdGgpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYThiZThhMDg2NGIuLmRlODEwNWRlYWQ3IDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9waGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnku
Y29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNp
bmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGZvciBsaXN0RGlyZWN0b3J5IHdpdGggYSBl
bXB0eSBTdHJpbmcgZmlsdGVyIHdoaWNoCisgICAgICAgIHdhcyBmYWlsaW5nIG9uIFdpbmRvd3Mg
YnV0IHBhc3Npbmcgb24gb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHA6CisKIDIwMjAtMDEtMTQgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVncmF0aW9uXSBTdXBwb3J0
IHRoZSBmZWF0dXJlIGZsYWcgaW4gRHVtcFJlbmRlclRyZWUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKaW5kZXggZDBlNTE1MWE5OTkuLmJjNzgxZjUxMjZh
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcApAQCAt
MTQ1LDQgKzE0NSwxMSBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIFVuaWNvZGVEaXJlY3RvcnlO
YW1lKQogICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkRGlyZWN0b3J5TmFtZSA9PSBkaXJlY3RvcnlO
YW1lKTsKIH0KIAorVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBsaXN0RGlyZWN0b3J5V2l0aE51bGxG
aWx0ZXIpCit7CisgICAgYXV0byBkaXJlY3RvcnlFbnRyaWVzID0gRmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeShGaWxlU3lzdGVtOjpkaXJlY3RvcnlOYW1lKHRlbXBGaWxlUGF0aCgpKSwgU3RyaW5n
KCkpOworICAgIEVYUEVDVF9GQUxTRShkaXJlY3RvcnlFbnRyaWVzLmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX1RSVUUoZGlyZWN0b3J5RW50cmllcy5jb250YWlucyh0ZW1wRmlsZVBhdGgoKSkpOwor
fQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389437</attachid>
            <date>2020-01-31 16:11:06 -0800</date>
            <delta_ts>2020-01-31 16:20:43 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>32710</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmJiY2E5NzdlNjIx
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCwxMiArODM4LDIyIEBAIHdlYmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxl
LVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGCiAKIGh0dHAvdGVz
dHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVzdHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAg
XQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50Zmls
dGVyaW5nIFsgU2tpcCBdCiAKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2No
IGJlaGF2aW9yIHNwZWNpZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rp
c2stY2FjaGUtbGFzdC1tb2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBp
bnZlc3RpZ2F0aW9uCitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMu
aHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxp
ZGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2Fj
aGUtaWZyYW1lLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQt
Y2FjaGUuaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3Qt
cmV0dXJucy1udWxsLWZvci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0
dHAvdGVzdHMvY29va2llcy9jb29raWUtd2l0aC1tdWx0aXBsZS1sZXZlbC1wYXRoLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9jb29raWVzL2RvdWJsZS1xdW90ZWQtdmFsdWUtd2l0
aC1zZW1pLWNvbG9uLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvY29va2llcy9odHRwLWdl
dC1jb29raWUtc2V0LWluLWpzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmY2U5NjI2NmIx
ZC4uM2QzZTY1OThhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9w
aGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVu
dCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIEFkZGVk
IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHNvIG9wZW5GaWxlIHdpdGggUmVhZFdyaXRlIG1hcHBp
bmdzLgorICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBSZWFkV3JpdGUgbWFwcGluZ3Mu
CisgICAgICAgIFJlbW92ZSBkZWZhdWx0IGFyZ3VtZW50IGZvciB0aGUgbGlzdERpcmVjdG9yeSBm
aWx0ZXIgc2luY2UgdGhlIGRlZmF1dAorICAgICAgICBTdHJpbmcoKSBmaWx0ZXIgZG9lc24ndCBt
YXRjaCBhbGwgZmlsZXMgb24gTWFjIGFuZCBXaW5kb3dzLgorCisgICAgICAgICogd3RmL2dsaWIv
RmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVgu
Y3BwOgorICAgICAgICBTdXBwb3J0IG9wZW5pbmcgZmlsZXMgd2l0aCBSZWFkV3JpdGUgYXR0cmli
dXRlcy4KKworICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIElt
cGxlbWVudCBnZXRWb2x1bWVGcmVlU3BhY2Ugc2luY2Ugc29tZSBvZiB0aGUgdGVzdHMgdXNlIGl0
IHdoZW4gdG9nZ2xpbmcgY2FjaGUuCisgICAgICAgIAorICAgICAgICAqIHd0Zi93aW4vUGF0aFdh
bGtlci5jcHA6CisKIDIwMjAtMDEtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSBldmVuIG1vcmUgInNob3J0ZXN0IGZvcm0iIGZvcm1hdHRpbmcsIGFuZCBs
ZXNzICJmaXhlZCBwcmVjaXNpb24iIGFuZCAiZml4ZWQgd2lkdGgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IDcyZjk1M2VhYjNmLi5mZjFiNDI3MWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAg
LTI4NywxNyArMjg3LDE3IEBAIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogICAg
IHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRhLCBtX2ZpbGVTaXplKTsKIH0KIAotI2lmIEhBVkUo
TU1BUCkKLQotTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCitNYXBwZWRGaWxlRGF0
YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUg
bWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBh
dGgsIEZpbGVPcGVuTW9kZTo6UmVhZCk7CisgICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRo
LCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwogCi0gICAgc3VjY2VzcyA9IG1hcEZp
bGVIYW5kbGUoZmQsIG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBGaWxl
U3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1vZGUpOwogICAgIGNsb3NlRmlsZShmZCk7
CiB9CiAKLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbW9kZSkKKyNpZiBIQVZFKE1NQVApCisKK2Jvb2wg
TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwg
RmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlKQogewogICAgIGlm
ICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQs
NyArMzI0LDIyIEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbW9kCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCwgTUFQ
X0ZJTEUgfCAobW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1B
UF9QUklWQVRFKSwgZmQsIDApOworICAgIGludCBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsK
KyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6Cisg
ICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9X
UklURTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToK
KyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQ
X0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6
IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewog
ICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lz
dGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmYuLmNi
ODFkOWY2YjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIv
U291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCkBAIC03OSwxMSArNzksMTcgQEAgY29uc3QgUGxh
dGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSAtMTsKIGVudW0gY2xh
c3MgRmlsZU9wZW5Nb2RlIHsKICAgICBSZWFkLAogICAgIFdyaXRlLAorICAgIFJlYWRXcml0ZSwK
ICNpZiBPUyhEQVJXSU4pCiAgICAgRXZlbnRzT25seSwKICNlbmRpZgogfTsKIAorZW51bSBjbGFz
cyBGaWxlQWNjZXNzUGVybWlzc2lvbiB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0g
Y2xhc3MgRmlsZVNlZWtPcmlnaW4gewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAt
MTMxLDcgKzEzNyw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVG
cm9tQmFja3VwKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNs
dWRlZCBmcm9tIGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7
IC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgZmlsdGVyID0gU3RyaW5nKCkpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+
IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7
CiAKIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmKTsKIFN0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGNvbnN0IGNoYXIqKTsKQEAgLTE0MCw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZh
bGlkKGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0g
aQogCiAvLyBQcmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdp
dGgsIG5vdCB0aGUgZnVsbCBwYXRoLgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVt
cG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVI
YW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nl
c3NQZXJtaXNzaW9uID0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRo
ZSByZXN1bHRpbmcgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNj
ZXNzZnVsLCAtMSBvdGhlcndpc2UuCiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4p
OwpAQCAtMjA2LDYgKzIxMiw3IEBAIHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRG
aWxlRGF0YSYmKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVk
RmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2Rl
LCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRh
KCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApA
QCAtMjE2LDE1ICsyMjMsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIE1hcHBlZEZpbGVNb2RlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7
CiAKICAgICB2b2lkKiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmls
ZVNpemUgeyAwIH07CiB9OwogCi1pbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRh
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1
Y2Nlc3MpCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7
CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBs
YXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmls
ZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhh
bmRsZShoYW5kbGUsIG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwg
b3Blbk1vZGUsIG1hcE1vZGUpOwogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZp
bGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwCmluZGV4IDg2YzA0ZjlkNWUxLi44ZGMwY2JkOGUzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRl
bXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAot
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsK
ICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAg
IGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCkBAIC0zNDgsMTEgKzM0OCwxMyBA
QCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSkKICAgICBHUmVmUHRyPEdGaWxlSU9TdHJlYW0+IGlvU3RyZWFtOwogICAgIGlm
IChtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZCkKICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdS
ZWYoZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICBlbHNlIGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUpIHsKKyAgICBlbHNlIGlm
IChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUgfHwgbW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJl
YWRXcml0ZSkgewogICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0
aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JF
R1VMQVIpKSkKICAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3Jl
YWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZp
bGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAo
cGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklMRV9DUkVBVEVf
Tk9ORSA6IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRv
cHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFn
LCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gaW9T
dHJlYW0ubGVha1JlZigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAK
aW5kZXggMjc4Mzk4ODNhMWEuLjE2NDBhOTgwOTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0Zp
bGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhh
bmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
IG1vZGUsIEZpbGVBY2Nlc3NNb2RlIHBlcm1pc3Npb24pCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIApAQCAtOTEsMTIgKzkxLDIwIEBAIFBs
YXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9k
ZSBtb2RlKQogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gT19SRE9OTFk7CiAgICAgZWxzZSBpZiAo
bW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKQogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9f
V1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMpOworICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9w
ZW5Nb2RlOjpSZWFkV3JpdGUpCisgICAgICAgIHBsYXRmb3JtRmxhZyB8PSAoT19SRFdSIHwgT19D
UkVBVCB8IE9fVFJVTkMpOwogI2lmIE9TKERBUldJTikKICAgICBlbHNlIGlmIChtb2RlID09IEZp
bGVPcGVuTW9kZTo6RXZlbnRzT25seSkKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fRVZUT05M
WTsKICNlbmRpZgogCi0gICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcs
IDA2NjYpOworICAgIGludCBwZXJtaXNzaW9uRmxhZyA9IDA7CisgICAgaWYgKHBlcm1pc3Npb24g
PT0gRmlsZU9wZW5Nb2RlOjpVc2VyKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAoU19JUlVT
UiB8IFNfSVdVU1IpOworICAgIGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gRmlsZU9wZW5Nb2RlOjpB
bGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IDA2NjY7CisKKyAgICByZXR1cm4gb3Blbihm
c1JlcC5kYXRhKCksIHBsYXRmb3JtRmxhZywgcGVybWlzc2lvbkZsYWcpOwogfQogCiB2b2lkIGNs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAppbmRleCA1ODU0MGRiNzhjOC4uMzFhYzY4YjY1M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93
aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTQxOSw3ICs0MTksNyBAQCBTdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiAgICAg
cmV0dXJuIHByb3Bvc2VkUGF0aDsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUg
b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vz
c1Blcm1pc3Npb24pCiB7CiAgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9IDA7CiAgICAgRFdPUkQg
Y3JlYXRpb25EaXNwb3NpdGlvbiA9IDA7CkBAIC00MzQsNiArNDM0LDEwIEBAIFBsYXRmb3JtRmls
ZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQog
ICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19XUklURTsKICAgICAgICAgY3JlYXRpb25E
aXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmls
ZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dS
SVRFIHwgR0VORVJJQ19SRUFEOworICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRF
X0FMV0FZUzsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtNTQ3LDkgKzU1MSwxNyBAQCBWZWN0b3I8U3RyaW5nPiBs
aXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRl
cikKICAgICByZXR1cm4gZW50cmllczsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29u
c3QgU3RyaW5nJiwgdWludDY0X3QmKQorYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3Ry
aW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlciwgdG90YWxOdW1iZXJP
ZkJ5dGVzLCB0b3RhbE51bWJlck9mRnJlZUJ5dGVzOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFj
ZUV4VyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9D
YWxsZXIsICZ0b3RhbE51bWJlck9mQnl0ZXMsICZ0b3RhbE51bWJlck9mRnJlZUJ5dGVzKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVy
LlF1YWRQYXJ0ID4gc3RhdGljX2Nhc3Q8VUxPTkdMT05HPihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVlU3BhY2Ug
PSBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZz
RmlsZSkKQEAgLTYwMSwxNSArNjEzLDcgQEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVm
ZmVyLCBzaXplX3QpCiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwogfQogCi1N
YXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFw
cGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUgPSBDcmVh
dGVGaWxlKGZpbGVQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQsIDAs
IG51bGxwdHIsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVsbHB0cik7
Ci0KLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBjbG9zZUZp
bGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZpbGVEYXRh
OjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBv
cGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRs
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyMywxMSArNjI3LDI3IEBAIGJvb2wgTWFw
cGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFw
cGVkRmlsZU1vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gbWFw
cGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFET05MWSwg
MCwgMCwgbnVsbHB0cik7CisgICAgRFdPUkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZ
OworICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3aXRjaCAo
b3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVBy
b3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgICAgICBkZXNpcmVkQWNjZXNzID0gRklMRV9N
QVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgor
ICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9u
ID0gUEFHRV9SRUFEV1JJVEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklU
RTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgYXV0byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFu
ZGxlLCBudWxscHRyLCBwYWdlUHJvdGVjdGlvbiwgMCwgMCwgbnVsbHB0cik7CiAgICAgaWYgKCFt
YXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmll
d09mRmlsZShtYXBwaW5nLCBGSUxFX01BUF9SRUFELCAwLCAwLCBzaXplKTsKKyAgICBtX2ZpbGVE
YXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCBzaXplKTsK
ICAgICBDbG9zZUhhbmRsZShtYXBwaW5nKTsKICAgICBpZiAoIW1fZmlsZURhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2Vy
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcAppbmRleCA4ZDdkN2FjNjgz
OC4uMDYxNDRjZjg1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2Vy
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKQEAgLTMyLDcgKzMy
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIFBhdGhXYWxrZXI6OlBhdGhXYWxrZXIoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcGF0dGVybikKIHsKLSAgICBTdHJpbmcgcGF0
aCA9IGRpcmVjdG9yeSArICJcXCIgKyBwYXR0ZXJuOworICAgIFN0cmluZyBwYXRoID0gbWFrZVN0
cmluZyhkaXJlY3RvcnksICJcXCJfcywgcGF0dGVybik7CiAgICAgbV9oYW5kbGUgPSA6OkZpbmRG
aXJzdEZpbGVXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZtX2RhdGEpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDMwYTc0YzBkOTE3Li40MWE1NmNiZGFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MCBAQAorMjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+
CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1t
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNw
cDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
LmNwcDoKKyAgICAgICAgVXNlIG1vcmUgRmlsZVN5c3RlbSBmdW5jdGlvbmFsaXR5IHRvIHNoYXJl
IGNvZGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcDoKKyAgICAgICAgVXNlIE9wdGlvbmFsPFZlY3Rvcj4g
Zm9yIG1fYnVmZmVyIHNpbmNlIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBpc0VtcHR5IGFuZCBp
c051bGwuCisKIDIwMjAtMDEtMTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnku
Y29tPgogCiAgICAgICAgIFdlYlBhc3RlYm9hcmRQcm94eVdQRSBzaG91bGQgYmUgV2ViUGFzdGVi
b2FyZFByb3h5TGliV1BFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAppbmRleCA3NWFhOTA1YWI2OC4uZTE1YzEyNjMz
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSA8ZmNudGwu
aD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNs
dWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgIU9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8c3lz
L21tYW4uaD4KQEAgLTM5LDI2ICszOCwyMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3Bh
Y2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFPUyhXSU5ET1dTKQogRGF0YSBEYXRhOjptYXBUb0Zp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAgIGludCBmZCA9IG9wZW4oRmlsZVN5
c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgT19DUkVBVCB8IE9f
RVhDTCB8IE9fUkRXUiAsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICBpZiAoZmQgPCAwKQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8IDApIHsK
LSAgICAgICAgY2xvc2UoZmQpOworICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZp
bGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUsIEZpbGVTeXN0ZW06
OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBpZiAoIUZpbGVTeXN0ZW06OnRydW5j
YXRlRmlsZShoYW5kbGUsIG1fc2l6ZSkpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAogICAgIEZpbGVTeXN0
ZW06Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHBhdGgpOwotCi0gICAgdm9pZCogbWFw
ID0gbW1hcChudWxscHRyLCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFS
RUQsIGZkLCAwKTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2Uo
ZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBt
YXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUsIEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3MpOworICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICB2b2lkKiBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5k
bGUoKTsKICAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7
CiAgICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVz
U2l6ZSkgewogICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVzU2l6ZSk7CkBAIC02
Niw1MiArNjIsMjMgQEAgRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBj
b25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIAorI2lmIE9TKFdJTkRPV1MpCisg
ICAgRFdPUkQgb2xkUHJvdGVjdGlvbjsKKyAgICBWaXJ0dWFsUHJvdGVjdChtYXAsIG1fc2l6ZSwg
RklMRV9NQVBfUkVBRCwgJm9sZFByb3RlY3Rpb24pOworICAgIEZsdXNoVmlld09mRmlsZShtYXAs
IG1fc2l6ZSk7CisjZWxzZQogICAgIC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCiAgICAg
bXByb3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CiAKICAgICAvLyBGbHVzaCAoYXN5bmNo
cm9ub3VzbHkpIHRvIGZpbGUsIHR1cm5pbmcgdGhpcyBpbnRvIGNsZWFuIG1lbW9yeS4KICAgICBt
c3luYyhtYXAsIG1fc2l6ZSwgTVNfQVNZTkMpOwotCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFw
KG1hcCwgbV9zaXplLCBmZCk7Ci19Ci0jZWxzZQotRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKSBjb25zdAotewotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5G
aWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmICghRmls
ZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBp
ZiAoRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YSgpKSwgc2l6ZSgpKSA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0
dXJuIERhdGEoVmVjdG9yPHVpbnQ4X3Q+KG1fYnVmZmVyKSk7Ci19CiAjZW5kaWYKIAotI2lmICFP
UyhXSU5ET1dTKQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZk
ID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQp
IDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQot
ICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGlmICghc2l6ZSkgewotICAgICAg
ICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwotICAgIH0KLQotICAg
IHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOworICAgIHJldHVybiBEYXRhOjph
ZG9wdE1hcChtYXAsIG1fc2l6ZSwgaGFuZGxlKTsKIH0KLSNlbmRpZgogCi1EYXRhIG1hcEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQorRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0j
aWYgIU9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIG1hcEZpbGUoRmlsZVN5c3RlbTo6ZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0jZWxzZQogICAgIGF1dG8gZmlsZSA9IEZp
bGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7
CiAgICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQogICAgICAgICByZXR1
cm4geyB9OwpAQCAtMTE5LDMxICs4NiwyOCBAQCBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIGlmICghRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoZmlsZSwgc2l6ZSkpCiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmaWxlLCAwLCBzaXpl
KTsKLSNlbmRpZgogfQogCi0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShp
bnQgZmQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQorRGF0YSBtYXBGaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKK30KKworRGF0YSBhZG9wdEFuZE1hcEZpbGUo
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6
ZV90IHNpemUpCiB7CiAgICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICAg
ICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiBEYXRhOjpl
bXB0eSgpOwogICAgIH0KLQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJP
VF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIG9mZnNldCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJ
TEVEKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlByaXZhdGUsIHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUo
aGFuZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gRGF0YTo6
YWRvcHRNYXAobWFwLCBzaXplLCBmZCk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcHBl
ZEZpbGUubGVha0hhbmRsZSgpLCBzaXplLCBoYW5kbGUpOwogfQotI2Vsc2UKLURhdGEgYWRvcHRB
bmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBzaXplX3Qgb2Zm
c2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gRGF0YShmaWxlLCBvZmZzZXQsIHNpemUp
OwotfQotI2VuZGlmCiAKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRh
LCBjb25zdCBTYWx0JiBzYWx0KQogewpAQCAtMTc5LDQwICsxNDMsMjUgQEAgc3RhdGljIFNhbHQg
bWFrZVNhbHQoKQogCiBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBTdHJpbmcm
IHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgYXV0byBjcGF0aCA9IEZpbGVTeXN0ZW06
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBhdXRvIGZkID0gb3BlbihjcGF0
aC5kYXRhKCksIE9fUkRPTkxZLCAwKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBieXRlc1Jl
YWQgPSByZWFkKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGNsb3NlKGZkKTsK
LSAgICBpZiAoYnl0ZXNSZWFkICE9IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKSkg
ewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKLQotICAgICAgICB1bmxpbmsoY3BhdGguZGF0
YSgpKTsKLSAgICAgICAgZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFU
IHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSB3
cml0ZShmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKSA9PSBzdGF0aWNfY2FzdDxzc2l6ZV90
PihzYWx0LnNpemUoKSk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgIGlmIChmaWxlRXhpc3RzKHBhdGgpKSB7CisgICAgICAgIGF1dG8gZmlsZSA9IEZpbGVT
eXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Cisg
ICAgICAgIFNhbHQgc2FsdDsKKyAgICAgICAgYXV0byBieXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpy
ZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBz
YWx0LnNpemUoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKKyAgICAg
ICAgaWYgKGJ5dGVzUmVhZCAhPSBzYWx0LnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07
CisKKyAgICAgICAgcmV0dXJuIHNhbHQ7CiAgICAgfQotICAgIHJldHVybiBzYWx0OwotI2Vsc2UK
LSAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpG
aWxlT3Blbk1vZGU6OlJlYWQpOwotICAgIFNhbHQgc2FsdDsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9
IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihz
YWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKTsKKworICAgIFNhbHQgc2FsdCA9IG1ha2VTYWx0KCk7
CisgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpXcml0ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVz
ZXIpOworICAgIGJvb2wgc3VjY2VzcyA9IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpID09IHNhbHQu
c2l6ZSgpOwogICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLSAgICBpZiAoYnl0ZXNS
ZWFkICE9IHNhbHQuc2l6ZSgpKSB7Ci0gICAgICAgIHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGlm
ICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVGaWxlKHBhdGgpOwotICAgICAgICBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0
aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2Vz
cyA9IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpID09IHNhbHQuc2l6ZSgpOwotICAgICAgICBGaWxl
U3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQogICAgIHJldHVybiBzYWx0OwotI2VuZGlmCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAppbmRleCBkNzhkOThiNjE3NS4uYTBj
YTI0YjU1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5oCkBAIC01MywxOSArNTMsMTYgQEAgcHVibGljOgogICAgIH5E
YXRhKCkgeyB9CiAKICAgICBzdGF0aWMgRGF0YSBlbXB0eSgpOwotI2lmICFPUyhXSU5ET1dTKQot
ICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90LCBpbnQgZmQpOwotI2Vu
ZGlmCisgICAgc3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBlbnVt
IGNsYXNzIEJhY2tpbmcgeyBCdWZmZXIsIE1hcCB9OwogICAgIERhdGEoT1NPYmplY3RQdHI8ZGlz
cGF0Y2hfZGF0YV90PiYmLCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgogI2lm
IFVTRShTT1VQKQotICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBpbnQgZmQgPSAtMSk7
Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIGV4cGxpY2l0IERhdGEoVmVjdG9yPHVpbnQ4X3Q+JiYp
OwotICAgIERhdGEoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlLCBzaXplX3Qgb2Zmc2V0
LCBzaXplX3QpOworICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmQgPSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFu
ZGxlKTsKKyNlbGlmIFVTRShDVVJMKQorICAgIGV4cGxpY2l0IERhdGEoT3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiYmKTsKICNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQpAQCAtOTQsMTAgKzkxLDEwIEBA
IHByaXZhdGU6CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQdHI8U291
cEJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9OworICAg
IEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVEZXNjcmlwdG9yIHsgRmlsZVN5
c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OwogI2VuZGlmCi0jaWYgT1MoV0lORE9X
UykKLSAgICBWZWN0b3I8dWludDhfdD4gbV9idWZmZXI7CisjaWYgVVNFKENVUkwpCisgICAgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUgY29u
c3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07
CkBAIC0xMDYsMTcgKzEwMyw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3Qg
RGF0YSYsIGNvbnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiwgY29uc3Qg
RGF0YSYpOwotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50LCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgot
I2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0Zp
bGVJT1N0cmVhbSosIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiAhT1MoV0lO
RE9XUykKIERhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNlbmRpZgogRGF0YSBtYXBG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDg+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4NzAwOC4uMDMzY2RlMzBl
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tCkBAIC05MiwxMSArOTIsMTEgQEAgRGF0YSBjb25j
YXRlbmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQogICAgIHJldHVybiB7IGFkb3B0
T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGVfY29uY2F0KGEuZGlzcGF0Y2hEYXRhKCksIGIu
ZGlzcGF0Y2hEYXRhKCkpKSB9OwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwg
c2l6ZV90IHNpemUsIGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXpl
X3Qgc2l6ZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIEFTU0VS
VChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7Ci0gICAgY2xvc2UoZmQpOwor
ICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CiAgICAgYXV0byBib2R5TWFwID0gYWRvcHRP
U09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNpemUsIGRpc3BhdGNoX2dldF9nbG9i
YWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIFttYXAsIHNpemVd
IHsKICAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7CiAgICAgfSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJs
LmNwcAppbmRleCBjZjQzMTU2YzVhMC4uMDAzMDVmZmIyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwu
Y3BwCkBAIC0zMCw0MCArMzAsMzEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKIAogRGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkKKyAgICA6IG1fYnVmZmVyKFZlY3Rvcjx1aW50OF90PihzaXplKSkKKyAgICAsIG1fc2l6ZShz
aXplKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwot
ICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIGRhdGEsIHNpemUpOworICAgIG1lbWNweShtX2J1
ZmZlci0+ZGF0YSgpLCBkYXRhLCBzaXplKTsKIH0KIAotRGF0YTo6RGF0YShGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0g
ICAgbV9idWZmZXIucmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgRmlsZVN5
c3RlbTo6c2Vla0ZpbGUoZmlsZSwgb2Zmc2V0LCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdpbjo6
QmVnaW5uaW5nKTsKLSAgICBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obV9idWZmZXIuZGF0YSgpKSwgc2l6ZSk7Ci0gICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGZpbGUpOwotfQotCi1EYXRhOjpEYXRhKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZl
cikKK0RhdGE6OkRhdGEoT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiYmIGJ1ZmZlcikKICAgICA6
IG1fYnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKKyAgICAsIG1fc2l6ZShtX2J1ZmZlciA/IG1fYnVm
ZmVyLT5zaXplKCkgOiAwKQogewotICAgIG1fc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKIH0KIAog
RGF0YSBEYXRhOjplbXB0eSgpCiB7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gRGF0YShX
VEY6Om51bGxvcHQpOwogfQogCiBjb25zdCB1aW50OF90KiBEYXRhOjpkYXRhKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpOworICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVm
ZmVyLT5kYXRhKCkgOiBudWxscHRyOwogfQogCiBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fYnVmZmVyLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1fYnVmZmVyOwog
fQogCiBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCos
IHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdApAQCAtNzEsMjEgKzYyLDQxIEBAIGJvb2wgRGF0YTo6
YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxp
ZXIpIGNvbnN0CiAgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9idWZm
ZXIuZGF0YSgpKSwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICByZXR1cm4gYXBwbGllcihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci0+ZGF0YSgpKSwgbV9idWZmZXItPnNp
emUoKSk7CiB9CiAKIERhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNp
emUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXpl
IH07CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVy
biB7IG1fYnVmZmVyLT5kYXRhKCkgKyBvZmZzZXQsIHNpemUgfTsKIH0KIAogRGF0YSBjb25jYXRl
bmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQogeworICAgIGlmIChhLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gYjsKKyAgICBpZiAoYi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGE7CisKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKGEuc2l6ZSgpICsgYi5zaXplKCkpOwog
ICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBhLmRhdGEoKSwgYS5zaXplKCkpOwogICAgIG1lbWNw
eShidWZmZXIuZGF0YSgpICsgYS5zaXplKCksIGIuZGF0YSgpLCBiLnNpemUoKSk7CiAgICAgcmV0
dXJuIERhdGEoV1RGTW92ZShidWZmZXIpKTsKIH0KIAorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lk
KiBtYXAsIHNpemVfdCBzaXplLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCit7
CisgICAgQVNTRVJUKG1hcCk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKKworICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXIoc2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCks
IG1hcCwgc2l6ZSk7CisgICAgQVNTRVJUKEZpbGVTeXN0ZW06OnVubWFwVmlld09mRmlsZShtYXAs
IHNpemUpKTsKKworICAgIHJldHVybiBEYXRhKFdURk1vdmUoYnVmZmVyKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YVNvdXAuY3BwCmluZGV4IDUxNWMwOWViYmZkLi42ZTJmYzQ5MGViMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKQEAgLTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25l
d193aXRoX293bmVyKGNvcGllZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9
CiAKLURhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQorRGF0
YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2ZpbGVEZXNj
cmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKLSAg
ICAsIG1faXNNYXAobV9zaXplICYmIGZkICE9IC0xKQorICAgICwgbV9pc01hcChtX3NpemUgJiYg
RmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEy
IEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewogICAgICAg
ICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAg
ICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgIH0KIAogICAg
IHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQgZmlsZURlc2NyaXB0b3I7Cisg
ICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIAog
c3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTIx
LDcgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3Jh
cHBlcikKICAgICBkZWxldGUgd3JhcHBlcjsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lk
KiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1h
cCwgc2l6ZV90IHNpemUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAg
ICBBU1NFUlQobWFwKTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwpAQCAtMTMwLDIx
ICsxMzAsMTQgQEAgRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBp
bnQgZmQpCiAgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0jaWYgVVNF
KEdMSUIpICYmICFQTEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3Ry
ZWFtKiBzdHJlYW0sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJbnB1dFN0
cmVhbSogaW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RS
RUFNKHN0cmVhbSkpOwotICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9m
ZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVybiBhZG9w
dEFuZE1hcEZpbGUoZmQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gRGF0YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAgICBpZiAo
aXNOdWxsKCkgfHwgIWlzTWFwKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0
dXJuIFNoYXJlZE1lbW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0
YSksIG1fYnVmZmVyLT5sZW5ndGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1dFN0cmVh
bSogaW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFN
KG1fZmlsZURlc2NyaXB0b3IpKTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNl
ZF9nZXRfZmQoR19GSUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAgICByZXR1
cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRh
KSwgbV9idWZmZXItPmxlbmd0aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzLi43YTBlYzVlMTRm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVGaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCkBAIC01Myw0OCArNTMsMTMgQEAKIG5hbWVz
cGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9X
UykKLXN0YXRpYyBEaXJlY3RvcnlFbnRyeVR5cGUgZGlyZWN0b3J5RW50cnlUeXBlKHVpbnQ4X3Qg
ZHR5cGUpCi17Ci0gICAgc3dpdGNoIChkdHlwZSkgewotICAgIGNhc2UgRFRfRElSOgotICAgICAg
ICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3Rvcnk7Ci0gICAgY2FzZSBEVF9SRUc6
Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlF
bnRyeVR5cGU6OkZpbGU7Ci0gICAgfQotICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZp
bGU7Ci19Ci0jZW5kaWYKLQogdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IEZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIERpcmVjdG9yeUVudHJ5VHlw
ZSk+JiBmdW5jdGlvbikKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBESVIqIGRpciA9IG9wZW5k
aXIoRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0g
ICAgaWYgKCFkaXIpCi0gICAgICAgIHJldHVybjsKLSAgICBkaXJlbnQqIGRwOwotICAgIHdoaWxl
ICgoZHAgPSByZWFkZGlyKGRpcikpKSB7Ci0gICAgICAgIGlmIChkcC0+ZF90eXBlICE9IERUX0RJ
UiAmJiBkcC0+ZF90eXBlICE9IERUX1JFRykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKLSAgICAgICAgaWYgKCFzdHJjbXAobmFt
ZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGF1dG8gbmFtZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobmFtZSk7Ci0gICAgICAg
IGlmIChuYW1lU3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGZ1bmN0aW9uKG5hbWVTdHJpbmcsIGRpcmVjdG9yeUVudHJ5VHlwZShkcC0+ZF90eXBlKSk7Ci0g
ICAgfQotICAgIGNsb3NlZGlyKGRpcik7Ci0jZWxzZQotICAgIGF1dG8gZW50cmllcyA9IEZpbGVT
eXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCk7CisgICAgYXV0byBlbnRyaWVzID0gRmlsZVN5c3Rl
bTo6bGlzdERpcmVjdG9yeShwYXRoLCAiKiJfcyk7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVu
dHJpZXMpIHsKICAgICAgICAgYXV0byB0eXBlID0gRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5
KGVudHJ5LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykgPyBEaXJl
Y3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSA6IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAg
ICAgICAgZnVuY3Rpb24oZW50cnksIHR5cGUpOworICAgICAgICBmdW5jdGlvbihGaWxlU3lzdGVt
OjpwYXRoR2V0RmlsZU5hbWUoZW50cnkpLCB0eXBlKTsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9p
ZCBkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseShjb25zdCBTdHJpbmcmIHBhdGgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389438</attachid>
            <date>2020-01-31 16:20:43 -0800</date>
            <delta_ts>2020-02-04 15:10:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>32732</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmJiY2E5NzdlNjIx
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCwxMiArODM4LDIyIEBAIHdlYmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxl
LVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGCiAKIGh0dHAvdGVz
dHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVzdHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAg
XQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlIFsg
U2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250ZW50Zmls
dGVyaW5nIFsgU2tpcCBdCiAKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2No
IGJlaGF2aW9yIHNwZWNpZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rp
c2stY2FjaGUtbGFzdC1tb2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBp
bnZlc3RpZ2F0aW9uCitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMu
aHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxp
ZGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2Fj
aGUtaWZyYW1lLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQt
Y2FjaGUuaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3Qt
cmV0dXJucy1udWxsLWZvci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0
dHAvdGVzdHMvY29va2llcy9jb29raWUtd2l0aC1tdWx0aXBsZS1sZXZlbC1wYXRoLmh0bWwgWyBQ
YXNzIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9jb29raWVzL2RvdWJsZS1xdW90ZWQtdmFsdWUtd2l0
aC1zZW1pLWNvbG9uLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvY29va2llcy9odHRwLWdl
dC1jb29raWUtc2V0LWluLWpzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmY2U5NjI2NmIx
ZC4uM2QzZTY1OThhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9w
aGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVu
dCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgIEFkZGVk
IEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHNvIG9wZW5GaWxlIHdpdGggUmVhZFdyaXRlIG1hcHBp
bmdzLgorICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGNyZWF0ZSBSZWFkV3JpdGUgbWFwcGluZ3Mu
CisgICAgICAgIFJlbW92ZSBkZWZhdWx0IGFyZ3VtZW50IGZvciB0aGUgbGlzdERpcmVjdG9yeSBm
aWx0ZXIgc2luY2UgdGhlIGRlZmF1dAorICAgICAgICBTdHJpbmcoKSBmaWx0ZXIgZG9lc24ndCBt
YXRjaCBhbGwgZmlsZXMgb24gTWFjIGFuZCBXaW5kb3dzLgorCisgICAgICAgICogd3RmL2dsaWIv
RmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVgu
Y3BwOgorICAgICAgICBTdXBwb3J0IG9wZW5pbmcgZmlsZXMgd2l0aCBSZWFkV3JpdGUgYXR0cmli
dXRlcy4KKworICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIElt
cGxlbWVudCBnZXRWb2x1bWVGcmVlU3BhY2Ugc2luY2Ugc29tZSBvZiB0aGUgdGVzdHMgdXNlIGl0
IHdoZW4gdG9nZ2xpbmcgY2FjaGUuCisgICAgICAgIAorICAgICAgICAqIHd0Zi93aW4vUGF0aFdh
bGtlci5jcHA6CisKIDIwMjAtMDEtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSBldmVuIG1vcmUgInNob3J0ZXN0IGZvcm0iIGZvcm1hdHRpbmcsIGFuZCBs
ZXNzICJmaXhlZCBwcmVjaXNpb24iIGFuZCAiZml4ZWQgd2lkdGgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IDcyZjk1M2VhYjNmLi5mZjFiNDI3MWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAg
LTI4NywxNyArMjg3LDE3IEBAIE1hcHBlZEZpbGVEYXRhOjp+TWFwcGVkRmlsZURhdGEoKQogICAg
IHVubWFwVmlld09mRmlsZShtX2ZpbGVEYXRhLCBtX2ZpbGVTaXplKTsKIH0KIAotI2lmIEhBVkUo
TU1BUCkKLQotTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCitNYXBwZWRGaWxlRGF0
YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUg
bWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBh
dGgsIEZpbGVPcGVuTW9kZTo6UmVhZCk7CisgICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRo
LCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwogCi0gICAgc3VjY2VzcyA9IG1hcEZp
bGVIYW5kbGUoZmQsIG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBGaWxl
U3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1vZGUpOwogICAgIGNsb3NlRmlsZShmZCk7
CiB9CiAKLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbW9kZSkKKyNpZiBIQVZFKE1NQVApCisKK2Jvb2wg
TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwg
RmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlKQogewogICAgIGlm
ICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQs
NyArMzI0LDIyIEBAIGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbW9kCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCwgTUFQ
X0ZJTEUgfCAobW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1B
UF9QUklWQVRFKSwgZmQsIDApOworICAgIGludCBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsK
KyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6Cisg
ICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9X
UklURTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToK
KyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQ
X0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6
IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewog
ICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lz
dGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmYuLmNi
ODFkOWY2YjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIv
U291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCkBAIC03OSwxMSArNzksMTcgQEAgY29uc3QgUGxh
dGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSAtMTsKIGVudW0gY2xh
c3MgRmlsZU9wZW5Nb2RlIHsKICAgICBSZWFkLAogICAgIFdyaXRlLAorICAgIFJlYWRXcml0ZSwK
ICNpZiBPUyhEQVJXSU4pCiAgICAgRXZlbnRzT25seSwKICNlbmRpZgogfTsKIAorZW51bSBjbGFz
cyBGaWxlQWNjZXNzUGVybWlzc2lvbiB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0g
Y2xhc3MgRmlsZVNlZWtPcmlnaW4gewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAt
MTMxLDcgKzEzNyw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVG
cm9tQmFja3VwKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNs
dWRlZCBmcm9tIGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7
IC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgZmlsdGVyID0gU3RyaW5nKCkpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+
IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7
CiAKIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmKTsKIFN0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGNvbnN0IGNoYXIqKTsKQEAgLTE0MCw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZh
bGlkKGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0g
aQogCiAvLyBQcmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdp
dGgsIG5vdCB0aGUgZnVsbCBwYXRoLgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVt
cG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVI
YW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nl
c3NQZXJtaXNzaW9uID0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRo
ZSByZXN1bHRpbmcgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNj
ZXNzZnVsLCAtMSBvdGhlcndpc2UuCiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4p
OwpAQCAtMjA2LDYgKzIxMiw3IEBAIHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRG
aWxlRGF0YSYmKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVk
RmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2Rl
LCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRh
KCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApA
QCAtMjE2LDE1ICsyMjMsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIE1hcHBlZEZpbGVNb2RlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7
CiAKICAgICB2b2lkKiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmls
ZVNpemUgeyAwIH07CiB9OwogCi1pbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRh
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1
Y2Nlc3MpCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7
CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBs
YXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmls
ZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhh
bmRsZShoYW5kbGUsIG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwg
b3Blbk1vZGUsIG1hcE1vZGUpOwogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZp
bGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwCmluZGV4IDg2YzA0ZjlkNWUxLi44ZGMwY2JkOGUzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRl
bXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAot
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsK
ICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAg
IGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCkBAIC0zNDgsMTEgKzM0OCwxMyBA
QCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSkKICAgICBHUmVmUHRyPEdGaWxlSU9TdHJlYW0+IGlvU3RyZWFtOwogICAgIGlm
IChtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZCkKICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdS
ZWYoZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICBlbHNlIGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUpIHsKKyAgICBlbHNlIGlm
IChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUgfHwgbW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJl
YWRXcml0ZSkgewogICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0
aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JF
R1VMQVIpKSkKICAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3Jl
YWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZp
bGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAo
cGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklMRV9DUkVBVEVf
Tk9ORSA6IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRv
cHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFn
LCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gaW9T
dHJlYW0ubGVha1JlZigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAK
aW5kZXggMjc4Mzk4ODNhMWEuLmVjZDg0ZTEwNjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0Zp
bGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhh
bmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
IG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24pCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIApAQCAtOTEsMTIgKzkxLDIw
IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVP
cGVuTW9kZSBtb2RlKQogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gT19SRE9OTFk7CiAgICAgZWxz
ZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKQogICAgICAgICBwbGF0Zm9ybUZsYWcg
fD0gKE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMpOworICAgIGVsc2UgaWYgKG1vZGUgPT0g
RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUpCisgICAgICAgIHBsYXRmb3JtRmxhZyB8PSAoT19SRFdS
IHwgT19DUkVBVCB8IE9fVFJVTkMpOwogI2lmIE9TKERBUldJTikKICAgICBlbHNlIGlmIChtb2Rl
ID09IEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seSkKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9f
RVZUT05MWTsKICNlbmRpZgogCi0gICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9y
bUZsYWcsIDA2NjYpOworICAgIGludCBwZXJtaXNzaW9uRmxhZyA9IDA7CisgICAgaWYgKHBlcm1p
c3Npb24gPT0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIpCisgICAgICAgIHBlcm1pc3Npb25G
bGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUik7CisgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBG
aWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAwNjY2
OworCisgICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIHBlcm1pc3Np
b25GbGFnKTsKIH0KIAogdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggNTg1NDBkYjc4YzguLjMxYWM2
OGI2NTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC00MTksNyArNDE5
LDcgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmls
ZUhhbmRsZSYgaGFuZGxlKQogICAgIHJldHVybiBwcm9wb3NlZFBhdGg7CiB9CiAKLVBsYXRmb3Jt
RmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2Rl
KQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uKQogewogICAgIERXT1JEIGRlc2lyZWRB
Y2Nlc3MgPSAwOwogICAgIERXT1JEIGNyZWF0aW9uRGlzcG9zaXRpb24gPSAwOwpAQCAtNDM0LDYg
KzQzNCwxMCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfV1JJ
VEU7CiAgICAgICAgIGNyZWF0aW9uRGlzcG9zaXRpb24gPSBDUkVBVEVfQUxXQVlTOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBkZXNp
cmVkQWNjZXNzID0gR0VORVJJQ19XUklURSB8IEdFTkVSSUNfUkVBRDsKKyAgICAgICAgY3JlYXRp
b25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTU0Nyw5ICs1NTEs
MTcgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eSwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wg
Z2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90JikKK2Jvb2wgZ2V0Vm9s
dW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKIHsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgVUxBUkdFX0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxl
VG9DYWxsZXIsIHRvdGFsTnVtYmVyT2ZCeXRlcywgdG90YWxOdW1iZXJPZkZyZWVCeXRlczsKKyAg
ICBpZiAoIUdldERpc2tGcmVlU3BhY2VFeFcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwg
JmZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLCAmdG90YWxOdW1iZXJPZkJ5dGVzLCAmdG90YWxO
dW1iZXJPZkZyZWVCeXRlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmcmVl
Qnl0ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydCA+IHN0YXRpY19jYXN0PFVMT05HTE9ORz4o
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZnJlZVNwYWNlID0gZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIuUXVhZFBh
cnQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZp
Y2VJZChjb25zdCBDU3RyaW5nJiBmc0ZpbGUpCkBAIC02MDEsMTUgKzYxMyw3IEBAIGJvb2wgdW5t
YXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQogICAgIHJldHVybiBVbm1hcFZpZXdP
ZkZpbGUoYnVmZmVyKTsKIH0KIAotTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0
IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCi17
Ci0gICAgYXV0byBmaWxlID0gQ3JlYXRlRmlsZShmaWxlUGF0aC53aWRlQ2hhcmFjdGVycygpLmRh
dGEoKSwgR0VORVJJQ19SRUFELCAwLCBudWxscHRyLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJ
QlVURV9OT1JNQUwsIG51bGxwdHIpOwotCi0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmls
ZSwgbW9kZSk7Ci0gICAgY2xvc2VGaWxlKGZpbGUpOwotfQotCi1ib29sIE1hcHBlZEZpbGVEYXRh
OjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2Rl
KQorYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUg
aGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKQogewogICAgIGlm
ICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjMs
MTEgKzYyNywyNyBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICBhdXRvIG1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsIG51
bGxwdHIsIFBBR0VfUkVBRE9OTFksIDAsIDAsIG51bGxwdHIpOworICAgIERXT1JEIHBhZ2VQcm90
ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gRklMRV9N
QVBfUkVBRDsKKyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6
OlJlYWQ6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICAgICAg
ZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RmlsZU9wZW5Nb2RlOjpXcml0ZToKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgor
ICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBkZXNpcmVk
QWNjZXNzID0gRklMRV9NQVBfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9
IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAs
IG51bGxwdHIpOwogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwg
MCwgc2l6ZSk7CisgICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJl
ZEFjY2VzcywgMCwgMCwgc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYg
KCFtX2ZpbGVEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtl
ci5jcHAKaW5kZXggOGQ3ZDdhYzY4MzguLjA2MTQ0Y2Y4NThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL1BhdGhX
YWxrZXIuY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBQYXRoV2Fsa2Vy
OjpQYXRoV2Fsa2VyKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIHBhdHRl
cm4pCiB7Ci0gICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnkgKyAiXFwiICsgcGF0dGVybjsKKyAg
ICBTdHJpbmcgcGF0aCA9IG1ha2VTdHJpbmcoZGlyZWN0b3J5LCAiXFwiX3MsIHBhdHRlcm4pOwog
ICAgIG1faGFuZGxlID0gOjpGaW5kRmlyc3RGaWxlVyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0
YSgpLCAmbV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMGE3NGMwZDkxNy4uNDFhNTZjYmRhZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDEtMzAgIENocmlzdG9waGVyIFJlaWQg
IDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBOZXR3b3Jr
Q2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhU291cC5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIFVzZSBtb3JlIEZpbGVTeXN0ZW0g
ZnVuY3Rpb25hbGl0eSB0byBzaGFyZSBjb2RlIGFjcm9zcyBwbGF0Zm9ybXMuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHA6CisgICAgICAg
IFVzZSBPcHRpb25hbDxWZWN0b3I+IGZvciBtX2J1ZmZlciBzaW5jZSB3ZSBuZWVkIHRvIGRpZmZl
cmVudGlhdGUgaXNFbXB0eSBhbmQgaXNOdWxsLgorCiAyMDIwLTAxLTE0ICBSb3NzIEtpcnNsaW5n
ICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBXZWJQYXN0ZWJvYXJkUHJveHlX
UEUgc2hvdWxkIGJlIFdlYlBhc3RlYm9hcmRQcm94eUxpYldQRQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXgg
NzVhYTkwNWFiNjguLmUxNWMxMjYzM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYg
QEAKIAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmICFPUyhX
SU5ET1dTKQogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CkBAIC0zOSwyNiArMzgsMjMgQEAKIG5hbWVz
cGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9X
UykKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAg
ICBpbnQgZmQgPSBvcGVuKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KS5kYXRhKCksIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7
Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChmdHJ1bmNh
dGUoZmQsIG1fc2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBhdXRvIGhhbmRs
ZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcik7CisgICAg
aWYgKCFGaWxlU3lzdGVtOjp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBtX3NpemUpKSB7CisgICAgICAg
IEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KICAgICAKICAgICBGaWxlU3lzdGVtOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChw
YXRoKTsKLQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgbV9zaXplLCBQUk9UX1JFQUQg
fCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJ
TEVEKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBz
dWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgdm9pZCogbWFw
ID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgdWludDhfdCogbWFwRGF0YSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihtYXApOwogICAgIGFwcGx5KFsmbWFwRGF0YV0oY29uc3QgdWludDhf
dCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUpIHsKICAgICAgICAgbWVtY3B5KG1hcERhdGEsIGJ5
dGVzLCBieXRlc1NpemUpOwpAQCAtNjYsNTIgKzYyLDIzIEBAIERhdGEgRGF0YTo6bWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7
CiAKKyNpZiBPUyhXSU5ET1dTKQorICAgIERXT1JEIG9sZFByb3RlY3Rpb247CisgICAgVmlydHVh
bFByb3RlY3QobWFwLCBtX3NpemUsIEZJTEVfTUFQX1JFQUQsICZvbGRQcm90ZWN0aW9uKTsKKyAg
ICBGbHVzaFZpZXdPZkZpbGUobWFwLCBtX3NpemUpOworI2Vsc2UKICAgICAvLyBEcm9wIHRoZSB3
cml0ZSBwZXJtaXNzaW9uLgogICAgIG1wcm90ZWN0KG1hcCwgbV9zaXplLCBQUk9UX1JFQUQpOwog
CiAgICAgLy8gRmx1c2ggKGFzeW5jaHJvbm91c2x5KSB0byBmaWxlLCB0dXJuaW5nIHRoaXMgaW50
byBjbGVhbiBtZW1vcnkuCiAgICAgbXN5bmMobWFwLCBtX3NpemUsIE1TX0FTWU5DKTsKLQotICAg
IHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIG1fc2l6ZSwgZmQpOwotfQotI2Vsc2UKLURhdGEg
RGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKLXsKLSAgICBhdXRvIGZp
bGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OldyaXRlKTsKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgaWYgKEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSksIHNpemUoKSkgPCAwKQotICAgICAg
ICByZXR1cm4geyB9OwotICAgIHJldHVybiBEYXRhKFZlY3Rvcjx1aW50OF90PihtX2J1ZmZlcikp
OwotfQogI2VuZGlmCiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgbWFwRmlsZShjb25zdCBjaGFy
KiBwYXRoKQotewotICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOwotICAgIGlm
IChmZCA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgc3RydWN0IHN0YXQgc3RhdDsKLSAg
ICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAg
ICByZXR1cm4geyB9OwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKLSAg
ICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZXR1cm4gRGF0YTo6
ZW1wdHkoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCAwLCBzaXpl
KTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBtX3NpemUsIGhhbmRsZSk7CiB9Ci0j
ZW5kaWYKIAotRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK0RhdGEgbWFwRmlsZShj
b25zdCBjaGFyKiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIHJldHVybiBtYXBGaWxl
KEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotI2Vs
c2UKICAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVt
OjpGaWxlT3Blbk1vZGU6OlJlYWQpOwogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxp
ZChmaWxlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExOSwzMSArODYsMjggQEAgRGF0YSBt
YXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVT
aXplKGZpbGUsIHNpemUpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBhZG9wdEFu
ZE1hcEZpbGUoZmlsZSwgMCwgc2l6ZSk7Ci0jZW5kaWYKIH0KIAotI2lmICFPUyhXSU5ET1dTKQot
RGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkK
K0RhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1hcEZpbGUo
RmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Cit9CisK
K0RhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQogewogICAgIGlmICghc2l6ZSkgewotICAg
ICAgICBjbG9zZShmZCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwog
ICAgICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKICAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBt
bWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwot
ICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9v
bCBzdWNjZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFu
ZGxlLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVNb2RlOjpQcml2YXRlLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworICAgIHJldHVy
biBEYXRhOjphZG9wdE1hcChtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKSwgc2l6ZSwgaGFuZGxlKTsK
IH0KLSNlbHNlCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIERh
dGEoZmlsZSwgb2Zmc2V0LCBzaXplKTsKLX0KLSNlbmRpZgogCiBTSEExOjpEaWdlc3QgY29tcHV0
ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKQEAgLTE3OSw0MCAr
MTQzLDI1IEBAIHN0YXRpYyBTYWx0IG1ha2VTYWx0KCkKIAogT3B0aW9uYWw8U2FsdD4gcmVhZE9y
TWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIGF1
dG8gY3BhdGggPSBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0g
ICAgYXV0byBmZCA9IG9wZW4oY3BhdGguZGF0YSgpLCBPX1JET05MWSwgMCk7Ci0gICAgU2FsdCBz
YWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0gcmVhZChmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6
ZSgpKTsKLSAgICBjbG9zZShmZCk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBzdGF0aWNfY2FzdDxz
c2l6ZV90PihzYWx0LnNpemUoKSkpIHsKLSAgICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7Ci0KLSAg
ICAgICAgdW5saW5rKGNwYXRoLmRhdGEoKSk7Ci0gICAgICAgIGZkID0gb3BlbihjcGF0aC5kYXRh
KCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAg
ICAgICAgYm9vbCBzdWNjZXNzID0gd3JpdGUoZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSkg
PT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpOwotICAgICAgICBjbG9zZShmZCk7
Ci0gICAgICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAoZmlsZUV4aXN0cyhwYXRoKSkgeworICAg
ICAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpG
aWxlT3Blbk1vZGU6OlJlYWQpOworICAgICAgICBTYWx0IHNhbHQ7CisgICAgICAgIGF1dG8gYnl0
ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpj
bG9zZUZpbGUoZmlsZSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHJldHVybiBzYWx0OwogICAgIH0KLSAg
ICByZXR1cm4gc2FsdDsKLSNlbHNlCi0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZp
bGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLSAgICBTYWx0IHNhbHQ7
Ci0gICAgYXV0byBieXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisKKyAgICBT
YWx0IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5G
aWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZp
bGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVt
Ojp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSks
IHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUo
ZmlsZSk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBzYWx0LnNpemUoKSkgewotICAgICAgICBzYWx0
ID0gbWFrZVNhbHQoKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKLSAgICAgICAgZmlsZSA9IEZp
bGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUp
OwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0
LnNpemUoKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgIH0KICAgICByZXR1cm4g
c2FsdDsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgK
aW5kZXggZDc4ZDk4YjYxNzUuLmEwY2EyNGI1NTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaApAQCAtNTMsMTkgKzUz
LDE2IEBAIHB1YmxpYzoKICAgICB+RGF0YSgpIHsgfQogCiAgICAgc3RhdGljIERhdGEgZW1wdHko
KTsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCwgaW50IGZkKTsKLSNlbmRpZgorICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQq
IG1hcCwgc2l6ZV90LCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAg
ICBEYXRhKE9TT2JqZWN0UHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6
OkJ1ZmZlcik7CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1
ZmZlcj4mJiwgaW50IGZkID0gLTEpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBE
YXRhKFZlY3Rvcjx1aW50OF90PiYmKTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1
ZmZlcj4mJiwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6
aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBleHBsaWNp
dCBEYXRhKE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4mJik7CiAjZW5kaWYKICAgICBib29sIGlz
TnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7
IH0KQEAgLTk0LDEwICs5MSwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAg
ICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVyOwotICAgIGludCBtX2ZpbGVE
ZXNjcmlwdG9yIHsgLTEgfTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9m
aWxlRGVzY3JpcHRvciB7IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsK
ICNlbmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVyOwor
I2lmIFVTRShDVVJMKQorICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gbV9idWZmZXI7CiAj
ZW5kaWYKICAgICBtdXRhYmxlIGNvbnN0IHVpbnQ4X3QqIG1fZGF0YSB7IG51bGxwdHIgfTsKICAg
ICBzaXplX3QgbV9zaXplIHsgMCB9OwpAQCAtMTA2LDE3ICsxMDMsOCBAQCBwcml2YXRlOgogCiBE
YXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7CiBib29sIGJ5dGVzRXF1
YWwoY29uc3QgRGF0YSYsIGNvbnN0IERhdGEmKTsKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRv
cHRBbmRNYXBGaWxlKGludCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbHNlCiBEYXRhIGFk
b3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUsIHNpemVfdCBvZmZz
ZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURh
dGEgYWRvcHRBbmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0qLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qp
OwotI2VuZGlmCi0jaWYgIU9TKFdJTkRPV1MpCiBEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0
aCk7Ci0jZW5kaWYKIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogCiB1c2luZyBT
YWx0ID0gc3RkOjphcnJheTx1aW50OF90LCA4PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KaW5kZXgg
NmEzOWY4ODcwMDguLjAzM2NkZTMwZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIs
MTEgKzkyLDExIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYg
YikKICAgICByZXR1cm4geyBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNh
dChhLmRpc3BhdGNoRGF0YSgpLCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRh
OjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFk
b3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhh
bmRsZSBmZCkKIHsKICAgICBBU1NFUlQobWFwKTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlM
RUQpOwotICAgIGNsb3NlKGZkKTsKKyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwogICAg
IGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBz
aXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RF
RkFVTFQsIDApLCBbbWFwLCBzaXplXSB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOwogICAg
IH0pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YUN1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKaW5kZXggY2Y0MzE1NmM1YTAuLjAwMzA1ZmZiMmNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcApAQCAtMzAsNDAgKzMwLDMxIEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIERhdGE6OkRhdGEoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgOiBtX2J1ZmZlcihWZWN0b3I8dWludDhfdD4o
c2l6ZSkpCisgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7
Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBkYXRhLCBz
aXplKTsKKyAgICBtZW1jcHkobV9idWZmZXItPmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAKLURh
dGE6OkRhdGEoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBzaXplKQotewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3Np
emUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxlKGZpbGUsIG9mZnNldCwgRmlsZVN5
c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7Ci0gICAgRmlsZVN5c3RlbTo6cmVhZEZy
b21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLmRhdGEoKSksIHNp
emUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLX0KLQotRGF0YTo6RGF0YShW
ZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCitEYXRhOjpEYXRhKE9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4mJiBidWZmZXIpCiAgICAgOiBtX2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCisgICAgLCBt
X3NpemUobV9idWZmZXIgPyBtX2J1ZmZlci0+c2l6ZSgpIDogMCkKIHsKLSAgICBtX3NpemUgPSBt
X2J1ZmZlci5zaXplKCk7CiB9CiAKIERhdGEgRGF0YTo6ZW1wdHkoKQogewotICAgIHJldHVybiB7
IH07CisgICAgcmV0dXJuIERhdGEoV1RGOjpudWxsb3B0KTsKIH0KIAogY29uc3QgdWludDhfdCog
RGF0YTo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsKKyAgICBy
ZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+ZGF0YSgpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBE
YXRhOjppc051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5pc0VtcHR5KCk7Cisg
ICAgcmV0dXJuICFtX2J1ZmZlcjsKIH0KIAogYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlv
bjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKQEAgLTcxLDIx
ICs2Miw0MSBAQCBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWlu
dDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAogICAgIGlmIChpc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVyLnNpemUoKSk7CisgICAg
cmV0dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9idWZmZXIt
PmRhdGEoKSksIG1fYnVmZmVyLT5zaXplKCkpOwogfQogCiBEYXRhIERhdGE6OnN1YnJhbmdlKHNp
emVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAogewotICAgIHJldHVybiB7IG1fYnVmZmVy
LmRhdGEoKSArIG9mZnNldCwgc2l6ZSB9OworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICByZXR1cm4geyBtX2J1ZmZlci0+ZGF0YSgpICsgb2Zmc2V0LCBzaXpl
IH07CiB9CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikK
IHsKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGI7CisgICAgaWYgKGIuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBhOworCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihh
LnNpemUoKSArIGIuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYS5kYXRhKCks
IGEuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSArIGEuc2l6ZSgpLCBiLmRhdGEo
KSwgYi5zaXplKCkpOwogICAgIHJldHVybiBEYXRhKFdURk1vdmUoYnVmZmVyKSk7CiB9CiAKK0Rh
dGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGZkKQoreworICAgIEFTU0VSVChtYXApOworICAgIEZpbGVTeXN0ZW06
OmNsb3NlRmlsZShmZCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNpemUpOworICAg
IG1lbWNweShidWZmZXIuZGF0YSgpLCBtYXAsIHNpemUpOworICAgIEFTU0VSVChGaWxlU3lzdGVt
Ojp1bm1hcFZpZXdPZkZpbGUobWFwLCBzaXplKSk7CisKKyAgICByZXR1cm4gRGF0YShXVEZNb3Zl
KGJ1ZmZlcikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAppbmRleCA1MTVjMDllYmJmZC4uNmUyZmM0
OTBlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCkBAIC00OCwxMSArNDgsMTEgQEAgRGF0YTo6
RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtX2J1ZmZlciA9IGFk
b3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihjb3BpZWREYXRhLCBzaXplLCBjb3Bp
ZWREYXRhLCBmYXN0RnJlZSkpOwogfQogCi1EYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4m
JiBidWZmZXIsIGludCBmZCkKK0RhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZl
ciwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogICAgIDogbV9idWZmZXIoYnVm
ZmVyKQogICAgICwgbV9maWxlRGVzY3JpcHRvcihmZCkKICAgICAsIG1fc2l6ZShidWZmZXIgPyBi
dWZmZXItPmxlbmd0aCA6IDApCi0gICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBmZCAhPSAtMSkKKyAg
ICAsIG1faXNNYXAobV9zaXplICYmIEZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmQpKQogewog
fQogCkBAIC0xMDgsMTIgKzEwOCwxMiBAQCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAgICAgfk1hcFdy
YXBwZXIoKQogICAgIHsKICAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7Ci0gICAgICAgIGNsb3Nl
KGZpbGVEZXNjcmlwdG9yKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGVEZXNj
cmlwdG9yKTsKICAgICB9CiAKICAgICB2b2lkKiBtYXA7CiAgICAgc2l6ZV90IHNpemU7Ci0gICAg
aW50IGZpbGVEZXNjcmlwdG9yOworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlRGVzY3JpcHRvcjsKIH07CiAKIHN0YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3Jh
cHBlciogd3JhcHBlcikKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBX
cmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURh
dGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBE
YXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1hcCAhPSBN
QVBfRkFJTEVEKTsKQEAgLTEzMCwyMSArMTMwLDE0IEBAIERhdGEgRGF0YTo6YWRvcHRNYXAodm9p
ZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQogICAgIHJldHVybiB7IFdURk1vdmUoYnVmZmVy
KSwgZmQgfTsKIH0KIAotI2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9w
dEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVhbSogc3RyZWFtLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qg
c2l6ZSkKLXsKLSAgICBHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0
X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShzdHJlYW0pKTsKLSAgICBpbnQgZmQgPSBnX2ZpbGVf
ZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19GSUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJl
YW0pKTsKLSAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCBvZmZzZXQsIHNpemUpOwotfQot
I2VuZGlmCi0KIFJlZlB0cjxTaGFyZWRNZW1vcnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9y
eSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpIHx8ICFpc01hcCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OndyYXBNYXAoY29uc3RfY2Fz
dDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3RoLCBtX2ZpbGVEZXNjcmlw
dG9yKTsKKyAgICBHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lu
cHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX2ZpbGVEZXNjcmlwdG9yKSk7CisgICAgaW50IGZkID0g
Z19maWxlX2Rlc2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKGlu
cHV0U3RyZWFtKSk7CisgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6d3JhcE1hcChjb25zdF9jYXN0
PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVyLT5sZW5ndGgsIGZkKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcAppbmRleCBi
ZTg0MzcxYTg2My4uN2EwZWM1ZTE0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcApAQCAt
NTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMgRGlyZWN0b3J5RW50cnlUeXBlIGRpcmVj
dG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewotICAgIHN3aXRjaCAoZHR5cGUpIHsKLSAg
ICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0
b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBl
OjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIH0KLSAgICByZXR1cm4g
RGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2VuZGlmCi0KIHZvaWQgdHJhdmVyc2VEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJp
bmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rpb24pCiB7Ci0jaWYgIU9TKFdJTkRPV1Mp
Ci0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm47Ci0gICAg
ZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICBp
ZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRfdHlwZSAhPSBEVF9SRUcpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0g
ICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihuYW1lU3RyaW5nLCBkaXJlY3RvcnlFbnRy
eVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIpOwotI2Vsc2UKLSAg
ICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgpOworICAgIGF1
dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOwogICAg
IGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAgIGF1dG8gdHlwZSA9IEZpbGVT
eXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkgOiBEaXJlY3Rv
cnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0aW9uKGVudHJ5LCB0eXBlKTsKKyAgICAg
ICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKGVudHJ5KSwgdHlwZSk7CiAg
ICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkoY29uc3Qg
U3RyaW5nJiBwYXRoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389719</attachid>
            <date>2020-02-04 15:10:23 -0800</date>
            <delta_ts>2020-02-11 13:59:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>31316</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmNhNmNjMzRmNDI3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCw3ICs4MzgsMjAgQEAgd2Via2l0Lm9yZy9iLzIwNTQ4NSBmYXN0L3RleHQvc3RhbGUt
VGV4dExheW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBbIEltYWdlT25seUYKIAogaHR0cC90ZXN0
cy9hcHBjYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9ibGluay9zZW5kYmVhY29uIFsgU2tpcCBd
Ci1odHRwL3Rlc3RzL2NhY2hlIFsgU2tpcCBdCisKKyMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9u
CitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMuaHRtbCBbIEZhaWx1
cmUgXQorCisjIGZhaWxzIGJlY2F1c2Ugb2YgY29udmVyc2lvbiB0byBlcG9jaCBiZWhhdmlvciBz
cGVjaWZpYyB0byBNYWMKK2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLWxh
c3QtbW9kaWZpZWQuaHRtbCBbIEZhaWx1cmUgXQorCisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlv
bgoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KK2h0
dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxpZGF0aW9uLmh0bWwgWyBG
YWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUtaWZyYW1lLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUuaHRtbCBbIEZh
aWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3QtcmV0dXJucy1udWxsLWZv
ci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYW52YXMgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3ggWyBTa2lwIF0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZmNlOTYy
NjZiMWQuLjNkM2U2NTk4YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIwLTAxLTMwICBDaHJp
c3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBs
ZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5oOgorICAgICAgICBB
ZGRlZCBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSBzbyBvcGVuRmlsZSB3aXRoIFJlYWRXcml0ZSBt
YXBwaW5ncy4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjcmVhdGUgUmVhZFdyaXRlIG1hcHBp
bmdzLgorICAgICAgICBSZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgdGhlIGxpc3REaXJlY3Rv
cnkgZmlsdGVyIHNpbmNlIHRoZSBkZWZhdXQKKyAgICAgICAgU3RyaW5nKCkgZmlsdGVyIGRvZXNu
J3QgbWF0Y2ggYWxsIGZpbGVzIG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICAqIHd0Zi9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5c3RlbVBP
U0lYLmNwcDoKKyAgICAgICAgU3VwcG9ydCBvcGVuaW5nIGZpbGVzIHdpdGggUmVhZFdyaXRlIGF0
dHJpYnV0ZXMuCisKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAg
ICBJbXBsZW1lbnQgZ2V0Vm9sdW1lRnJlZVNwYWNlIHNpbmNlIHNvbWUgb2YgdGhlIHRlc3RzIHVz
ZSBpdCB3aGVuIHRvZ2dsaW5nIGNhY2hlLgorICAgICAgICAKKyAgICAgICAgKiB3dGYvd2luL1Bh
dGhXYWxrZXIuY3BwOgorCiAyMDIwLTAxLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBVc2UgZXZlbiBtb3JlICJzaG9ydGVzdCBmb3JtIiBmb3JtYXR0aW5nLCBh
bmQgbGVzcyAiZml4ZWQgcHJlY2lzaW9uIiBhbmQgImZpeGVkIHdpZHRoIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmNwcAppbmRleCA3MmY5NTNlYWIzZi4uNTFjYmYwODVjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CkBAIC0yODcsMTcgKzI4NywxNyBAQCBNYXBwZWRGaWxlRGF0YTo6fk1hcHBlZEZpbGVEYXRhKCkK
ICAgICB1bm1hcFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7CiB9CiAKLSNpZiBI
QVZFKE1NQVApCi0KLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcm
IGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQorTWFwcGVkRmls
ZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVN
b2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCiB7Ci0gICAgYXV0byBmZCA9IG9wZW5GaWxlKGZp
bGVQYXRoLCBGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxl
UGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKIAotICAgIHN1Y2Nlc3MgPSBt
YXBGaWxlSGFuZGxlKGZkLCBtb2RlKTsKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwg
RmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBtYXBNb2RlKTsKICAgICBjbG9zZUZpbGUo
ZmQpOwogfQogCi1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUpCisjaWYgSEFWRShNTUFQKQorCiti
b29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSkKIHsKICAg
ICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzI0LDcgKzMyNCwxOSBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBQUk9UX1JFQUQs
IE1BUF9GSUxFIHwgKG1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJlZCA/IE1BUF9TSEFSRUQg
OiBNQVBfUFJJVkFURSksIGZkLCAwKTsKKyAgICBpbnQgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JF
QUQ7CisgICAgc3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFk
OgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBS
T1RfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIHNpemUsIHBh
Z2VQcm90ZWN0aW9uLCBNQVBfRklMRSB8IChtYXBNb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFy
ZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBmZCwgMCk7CiAKICAgICBpZiAoZGF0YSA9
PSBNQVBfRkFJTEVEKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRl
eCA4MDVhMGU0YjE2Zi4uNzFiMDkwNzUxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKQEAgLTg0LDYgKzg0
LDExIEBAIGVudW0gY2xhc3MgRmlsZU9wZW5Nb2RlIHsKICNlbmRpZgogfTsKIAorZW51bSBjbGFz
cyBGaWxlQWNjZXNzUGVybWlzc2lvbiB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0g
Y2xhc3MgRmlsZVNlZWtPcmlnaW4gewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAt
MTMxLDcgKzEzNiw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVG
cm9tQmFja3VwKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNs
dWRlZCBmcm9tIGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7
IC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgZmlsdGVyID0gU3RyaW5nKCkpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+
IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7
CiAKIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmKTsKIFN0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGNvbnN0IGNoYXIqKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZh
bGlkKGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0g
aQogCiAvLyBQcmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdp
dGgsIG5vdCB0aGUgZnVsbCBwYXRoLgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVt
cG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVI
YW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nl
c3NQZXJtaXNzaW9uID0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRo
ZSByZXN1bHRpbmcgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNj
ZXNzZnVsLCAtMSBvdGhlcndpc2UuCiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4p
OwpAQCAtMjA2LDYgKzIxMSw3IEBAIHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRG
aWxlRGF0YSYmKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVk
RmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2Rl
LCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRh
KCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApA
QCAtMjE2LDE1ICsyMjIsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIE1hcHBlZEZpbGVNb2RlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7
CiAKICAgICB2b2lkKiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmls
ZVNpemUgeyAwIH07CiB9OwogCi1pbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRh
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1
Y2Nlc3MpCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7
CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBs
YXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmls
ZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhh
bmRsZShoYW5kbGUsIG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwg
b3Blbk1vZGUsIG1hcE1vZGUpOwogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZp
bGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwCmluZGV4IDg2YzA0ZjlkNWUxLi5kNzlhODU0Mzc4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRl
bXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAot
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsK
ICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAg
IGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCkBAIC0zNTEsOCArMzUxLDEwIEBA
IFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVu
TW9kZSBtb2RlKQogICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgewog
ICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmls
ZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKICAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxl
LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlv
U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdf
RklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAocGVybWlzc2lvbiA9
PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklMRV9DUkVBVEVfTk9ORSA6IEdfRklM
RV9DUkVBVEVfUFJJVkFURTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmls
ZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gaW9TdHJlYW0ubGVha1Jl
ZigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggMjc4Mzk4
ODNhMWEuLjQwNGMxMzRiNjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxl
U3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICByZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFu
ZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVB
Y2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24pCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIApAQCAtOTYsNyArOTYsMTMgQEAgUGxhdGZvcm1G
aWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUp
CiAgICAgICAgIHBsYXRmb3JtRmxhZyB8PSBPX0VWVE9OTFk7CiAjZW5kaWYKIAotICAgIHJldHVy
biBvcGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCAwNjY2KTsKKyAgICBpbnQgcGVybWlz
c2lvbkZsYWcgPSAwOworICAgIGlmIChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9u
OjpVc2VyKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAoU19JUlVTUiB8IFNfSVdVU1IpOwor
ICAgIGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCkKKyAg
ICAgICAgcGVybWlzc2lvbkZsYWcgfD0gMDY2NjsKKworICAgIHJldHVybiBvcGVuKGZzUmVwLmRh
dGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJtaXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQgY2xvc2VGaWxl
KFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4u
Y3BwCmluZGV4IDU4NTQwZGI3OGM4Li4yZmNiZTI5OThlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxl
U3lzdGVtV2luLmNwcApAQCAtNDE5LDcgKzQxOSw3IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5Rmls
ZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4g
cHJvcG9zZWRQYXRoOwogfQogCi1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlz
c2lvbikKIHsKICAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gMDsKICAgICBEV09SRCBjcmVhdGlv
bkRpc3Bvc2l0aW9uID0gMDsKQEAgLTU0Nyw5ICs1NDcsMTcgQEAgVmVjdG9yPFN0cmluZz4gbGlz
dERpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWx0ZXIp
CiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0
IFN0cmluZyYsIHVpbnQ2NF90JikKK2Jvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
VUxBUkdFX0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsIHRvdGFsTnVtYmVyT2ZC
eXRlcywgdG90YWxOdW1iZXJPZkZyZWVCeXRlczsKKyAgICBpZiAoIUdldERpc2tGcmVlU3BhY2VF
eFcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgJmZyZWVCeXRlc0F2YWlsYWJsZVRvQ2Fs
bGVyLCAmdG90YWxOdW1iZXJPZkJ5dGVzLCAmdG90YWxOdW1iZXJPZkZyZWVCeXRlcykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlci5R
dWFkUGFydCA+IHN0YXRpY19jYXN0PFVMT05HTE9ORz4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZnJlZVNwYWNlID0g
ZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIuUXVhZFBhcnQ7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0Zp
bGUpCkBAIC02MDEsMTUgKzYwOSw3IEBAIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90KQogICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsKIH0KIAotTWFw
cGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBl
ZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCi17Ci0gICAgYXV0byBmaWxlID0gQ3JlYXRl
RmlsZShmaWxlUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgR0VORVJJQ19SRUFELCAwLCBu
dWxscHRyLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIG51bGxwdHIpOwot
Ci0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmlsZSwgbW9kZSk7Ci0gICAgY2xvc2VGaWxl
KGZpbGUpOwotfQotCi1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlKQorYm9vbCBNYXBwZWRGaWxlRGF0YTo6
bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Bl
bk1vZGUsIE1hcHBlZEZpbGVNb2RlKQogewogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjMsMTEgKzYyMywyNiBAQCBib29sIE1hcHBl
ZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRvIG1hcHBp
bmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsIG51bGxwdHIsIFBBR0VfUkVBRE9OTFksIDAs
IDAsIG51bGxwdHIpOworICAgIERXT1JEIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFET05MWTsK
KyAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfUkVBRDsKKyAgICBzd2l0Y2ggKG9w
ZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBhZ2VQcm90
ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQ
X1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKKyAg
ICAgICAgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURXUklURTsKKyAgICAgICAgZGVzaXJlZEFj
Y2VzcyA9IEZJTEVfTUFQX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBhdXRvIG1hcHBpbmcgPSBD
cmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsIG51bGxwdHIsIHBhZ2VQcm90ZWN0aW9uLCAwLCAwLCBu
dWxscHRyKTsKICAgICBpZiAoIW1hcHBpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fZmlsZURhdGEgPSBNYXBWaWV3T2ZGaWxlKG1hcHBpbmcsIEZJTEVfTUFQX1JFQUQsIDAsIDAs
IHNpemUpOworICAgIG1fZmlsZURhdGEgPSBNYXBWaWV3T2ZGaWxlKG1hcHBpbmcsIGRlc2lyZWRB
Y2Nlc3MsIDAsIDAsIHNpemUpOwogICAgIENsb3NlSGFuZGxlKG1hcHBpbmcpOwogICAgIGlmICgh
bV9maWxlRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvd2luL1BhdGhXYWxrZXIuY3BwIGIvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIu
Y3BwCmluZGV4IDhkN2Q3YWM2ODM4Li42ODhmZWRkNTlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fs
a2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6
UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJu
KQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0b3J5ICsgIlxcIiArIHBhdHRlcm47CisgICAg
U3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9yeSwgJ1xcJywgcGF0dGVybik7CiAgICAg
bV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCks
ICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwYTc0YzBkOTE3Li40MWE1NmNiZGFlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNo
cmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNo
ZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFTb3VwLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgVXNlIG1vcmUgRmlsZVN5c3RlbSBmdW5j
dGlvbmFsaXR5IHRvIHNoYXJlIGNvZGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcDoKKyAgICAgICAgVXNl
IE9wdGlvbmFsPFZlY3Rvcj4gZm9yIG1fYnVmZmVyIHNpbmNlIHdlIG5lZWQgdG8gZGlmZmVyZW50
aWF0ZSBpc0VtcHR5IGFuZCBpc051bGwuCisKIDIwMjAtMDEtMTQgIFJvc3MgS2lyc2xpbmcgIDxy
b3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFdlYlBhc3RlYm9hcmRQcm94eVdQRSBz
aG91bGQgYmUgV2ViUGFzdGVib2FyZFByb3h5TGliV1BFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAppbmRleCA3NWFh
OTA1YWI2OC4uMWQzMzcyZjE0NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcApAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgIU9TKFdJTkRP
V1MpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTM5LDI2ICszOCwyMyBAQAogbmFtZXNwYWNl
IFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFPUyhXSU5ET1dTKQog
RGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAgIGlu
dCBmZCA9IG9wZW4oRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAg
ICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKGZ0cnVuY2F0ZShm
ZCwgbV9zaXplKSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGF1dG8gaGFuZGxlID0g
RmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0
ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIpOworICAgIGlmICghRmls
ZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgbV9zaXplKSkgeworICAgICAgICBGaWxlU3lz
dGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAg
CiAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgocGF0aCk7Ci0K
LSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9X
UklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewot
ICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNjZXNzOworICAgIEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OldyaXRlLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKKyAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgdm9pZCogbWFwID0gbWFwcGVkRmls
ZS5sZWFrSGFuZGxlKCk7CiAgICAgdWludDhfdCogbWFwRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihtYXApOwogICAgIGFwcGx5KFsmbWFwRGF0YV0oY29uc3QgdWludDhfdCogYnl0ZXMsIHNp
emVfdCBieXRlc1NpemUpIHsKICAgICAgICAgbWVtY3B5KG1hcERhdGEsIGJ5dGVzLCBieXRlc1Np
emUpOwpAQCAtNjYsNTIgKzYyLDIzIEBAIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CiAKKyNpZiBPUyhX
SU5ET1dTKQorICAgIERXT1JEIG9sZFByb3RlY3Rpb247CisgICAgVmlydHVhbFByb3RlY3QobWFw
LCBtX3NpemUsIEZJTEVfTUFQX1JFQUQsICZvbGRQcm90ZWN0aW9uKTsKKyAgICBGbHVzaFZpZXdP
ZkZpbGUobWFwLCBtX3NpemUpOworI2Vsc2UKICAgICAvLyBEcm9wIHRoZSB3cml0ZSBwZXJtaXNz
aW9uLgogICAgIG1wcm90ZWN0KG1hcCwgbV9zaXplLCBQUk9UX1JFQUQpOwogCiAgICAgLy8gRmx1
c2ggKGFzeW5jaHJvbm91c2x5KSB0byBmaWxlLCB0dXJuaW5nIHRoaXMgaW50byBjbGVhbiBtZW1v
cnkuCiAgICAgbXN5bmMobWFwLCBtX3NpemUsIE1TX0FTWU5DKTsKLQotICAgIHJldHVybiBEYXRh
OjphZG9wdE1hcChtYXAsIG1fc2l6ZSwgZmQpOwotfQotI2Vsc2UKLURhdGEgRGF0YTo6bWFwVG9G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKLXsKLSAgICBhdXRvIGZpbGUgPSBGaWxlU3lz
dGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKLSAg
ICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCi0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgaWYgKEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGRhdGEoKSksIHNpemUoKSkgPCAwKQotICAgICAgICByZXR1cm4geyB9
OwotICAgIHJldHVybiBEYXRhKFZlY3Rvcjx1aW50OF90PihtX2J1ZmZlcikpOwotfQogI2VuZGlm
CiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKQotewot
ICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOwotICAgIGlmIChmZCA8IDApCi0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgc3RydWN0IHN0YXQgc3RhdDsKLSAgICBpZiAoZnN0YXQo
ZmQsICZzdGF0KSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKLSAgICBpZiAoIXNpemUp
IHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCAwLCBzaXplKTsKKyAgICByZXR1
cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBtX3NpemUsIGhhbmRsZSk7CiB9Ci0jZW5kaWYKIAotRGF0
YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK0RhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBw
YXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotI2Vsc2UKICAgICBhdXRv
IGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1v
ZGU6OlJlYWQpOwogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKQEAgLTExOSwzMSArODYsMjggQEAgRGF0YSBtYXBGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGZpbGUsIHNp
emUpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmls
ZSwgMCwgc2l6ZSk7Ci0jZW5kaWYKIH0KIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFu
ZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK0RhdGEgbWFwRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1hcEZpbGUoRmlsZVN5c3RlbTo6
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Cit9CisKK0RhdGEgYWRvcHRB
bmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKQogewogICAgIGlmICghc2l6ZSkgewotICAgICAgICBjbG9zZShm
ZCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1
cm4gRGF0YTo6ZW1wdHkoKTsKICAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIs
IHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwotICAgIGlmIChtYXAg
PT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNjZXNzOwor
ICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBGaWxlU3lz
dGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpQcml2
YXRlLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgcmV0
dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworICAgIHJldHVybiBEYXRhOjphZG9w
dE1hcChtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKSwgc2l6ZSwgaGFuZGxlKTsKIH0KLSNlbHNlCi1E
YXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwg
c2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zm
c2V0LCBzaXplKTsKLX0KLSNlbmRpZgogCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3Qg
RGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKQEAgLTE3OSw0MCArMTQzLDI1IEBAIHN0
YXRpYyBTYWx0IG1ha2VTYWx0KCkKIAogT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29u
c3QgU3RyaW5nJiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIGF1dG8gY3BhdGggPSBG
aWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgYXV0byBmZCA9
IG9wZW4oY3BhdGguZGF0YSgpLCBPX1JET05MWSwgMCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1
dG8gYnl0ZXNSZWFkID0gcmVhZChmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBj
bG9zZShmZCk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0
LnNpemUoKSkpIHsKLSAgICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7Ci0KLSAgICAgICAgdW5saW5r
KGNwYXRoLmRhdGEoKSk7Ci0gICAgICAgIGZkID0gb3BlbihjcGF0aC5kYXRhKCksIE9fV1JPTkxZ
IHwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICAgICAgYm9vbCBz
dWNjZXNzID0gd3JpdGUoZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSkgPT0gc3RhdGljX2Nh
c3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGlm
ICghc3VjY2VzcykKKyAgICBpZiAoZmlsZUV4aXN0cyhwYXRoKSkgeworICAgICAgICBhdXRvIGZp
bGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OlJlYWQpOworICAgICAgICBTYWx0IHNhbHQ7CisgICAgICAgIGF1dG8gYnl0ZXNSZWFkID0gRmls
ZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQu
ZGF0YSgpKSwgc2FsdC5zaXplKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmls
ZSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpCiAgICAgICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgICAgIHJldHVybiBzYWx0OwogICAgIH0KLSAgICByZXR1cm4gc2Fs
dDsKLSNlbHNlCi0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmls
ZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBi
eXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisKKyAgICBTYWx0IHNhbHQgPSBt
YWtlU2FsdCgpOworICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJt
aXNzaW9uOjpVc2VyKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgp
KSA9PSBzYWx0LnNpemUoKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAg
aWYgKGJ5dGVzUmVhZCAhPSBzYWx0LnNpemUoKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQo
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKLSAgICAgICAgZmlsZSA9IEZpbGVTeXN0ZW06Om9w
ZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9j
YXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKLSAg
ICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3Mp
Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgIH0KICAgICByZXR1cm4gc2FsdDsKLSNlbmRp
ZgogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggZDc4ZDk4
YjYxNzUuLmY1ZDViZDQzYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaApAQCAtNTMsMTkgKzUzLDE2IEBAIHB1Ymxp
YzoKICAgICB+RGF0YSgpIHsgfQogCiAgICAgc3RhdGljIERhdGEgZW1wdHkoKTsKLSNpZiAhT1Mo
V0lORE9XUykKLSAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCwgaW50
IGZkKTsKLSNlbmRpZgorICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90
LCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBEYXRhKE9TT2Jq
ZWN0UHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAj
ZW5kaWYKICNpZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50
IGZkID0gLTEpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBEYXRhKFZlY3Rvcjx1
aW50OF90PiYmKTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6
ZV90IG9mZnNldCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBEYXRhKE9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4mJik7CiAjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KQEAgLTk0LDEwICs5MSwxMCBA
QCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAgbXV0YWJsZSBHUmVmUHRyPFNv
dXBCdWZmZXI+IG1fYnVmZmVyOwotICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKKyAg
ICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlRGVzY3JpcHRvciB7IEZpbGVT
eXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsKICNlbmRpZgotI2lmIE9TKFdJTkRP
V1MpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVyOworI2lmIFVTRShDVVJMKQorICAgIE9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gbV9idWZmZXI7CiAjZW5kaWYKICAgICBtdXRhYmxlIGNv
bnN0IHVpbnQ4X3QqIG1fZGF0YSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9
OwpAQCAtMTA2LDE3ICsxMDMsOCBAQCBwcml2YXRlOgogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0
IERhdGEmLCBjb25zdCBEYXRhJik7CiBib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYsIGNvbnN0
IERhdGEmKTsKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCwgc2l6
ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbHNlCiBEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYK
LSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURhdGEgYWRvcHRBbmRNYXBGaWxlKEdG
aWxlSU9TdHJlYW0qLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlmCi0jaWYgIU9TKFdJ
TkRPV1MpCiBEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCk7Ci0jZW5kaWYKIERhdGEgbWFw
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogCiB1c2luZyBTYWx0ID0gc3RkOjphcnJheTx1aW50
OF90LCA4PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KaW5kZXggNmEzOWY4ODcwMDguLjAzM2NkZTMw
ZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDExIEBAIERhdGEgY29u
Y2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9w
dE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBi
LmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6
ZV90IHNpemUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAgICBBU1NF
UlQobWFwKTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwotICAgIGNsb3NlKGZkKTsK
KyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwogICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0
T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVhdGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xv
YmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBbbWFwLCBzaXpl
XSB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOwogICAgIH0pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3Vy
bC5jcHAKaW5kZXggY2Y0MzE1NmM1YTAuLjFkYTc2NzY0NTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJs
LmNwcApAQCAtMzAsNDAgKzMwLDMyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZSB7CiAKIERhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpCisgICAgOiBtX2J1ZmZlcihWZWN0b3I8dWludDhfdD4oc2l6ZSkpCisgICAgLCBtX3NpemUo
c2l6ZSkKIHsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsK
LSAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkobV9i
dWZmZXItPmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAKLURhdGE6OkRhdGEoRmlsZVN5c3RlbTo6
UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewot
ICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIEZpbGVT
eXN0ZW06OnNlZWtGaWxlKGZpbGUsIG9mZnNldCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46
OkJlZ2lubmluZyk7Ci0gICAgRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLmRhdGEoKSksIHNpemUpOwotICAgIEZpbGVTeXN0ZW06
OmNsb3NlRmlsZShmaWxlKTsKLX0KLQotRGF0YTo6RGF0YShWZWN0b3I8dWludDhfdD4mJiBidWZm
ZXIpCitEYXRhOjpEYXRhKE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4mJiBidWZmZXIpCiAgICAg
OiBtX2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCisgICAgLCBtX3NpemUobV9idWZmZXIgPyBtX2J1
ZmZlci0+c2l6ZSgpIDogMCkKIHsKLSAgICBtX3NpemUgPSBtX2J1ZmZlci5zaXplKCk7CiB9CiAK
IERhdGEgRGF0YTo6ZW1wdHkoKQogewotICAgIHJldHVybiB7IH07CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJ1ZmZlcjsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKIH0KIAogY29uc3Qg
dWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEo
KTsKKyAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+ZGF0YSgpIDogbnVsbHB0cjsKIH0K
IAogYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5pc0Vt
cHR5KCk7CisgICAgcmV0dXJuICFtX2J1ZmZlcjsKIH0KIAogYm9vbCBEYXRhOjphcHBseShjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QK
QEAgLTcxLDIxICs2Myw0MSBAQCBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2wo
Y29uc3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAogICAgIGlmIChpc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVyLnNpemUo
KSk7CisgICAgcmV0dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
bV9idWZmZXItPmRhdGEoKSksIG1fYnVmZmVyLT5zaXplKCkpOwogfQogCiBEYXRhIERhdGE6OnN1
YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAogewotICAgIHJldHVybiB7
IG1fYnVmZmVyLmRhdGEoKSArIG9mZnNldCwgc2l6ZSB9OworICAgIGlmICghbV9idWZmZXIpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBtX2J1ZmZlci0+ZGF0YSgpICsgb2Zm
c2V0LCBzaXplIH07CiB9CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3Qg
RGF0YSYgYikKIHsKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGI7CisgICAg
aWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhOworCiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGJ1ZmZlcihhLnNpemUoKSArIGIuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwg
YS5kYXRhKCksIGEuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSArIGEuc2l6ZSgp
LCBiLmRhdGEoKSwgYi5zaXplKCkpOwogICAgIHJldHVybiBEYXRhKFdURk1vdmUoYnVmZmVyKSk7
CiB9CiAKK0RhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgRmlsZVN5
c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQoreworICAgIEFTU0VSVChtYXApOworICAgIEZp
bGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKHNp
emUpOworICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBtYXAsIHNpemUpOworICAgIEFTU0VSVChG
aWxlU3lzdGVtOjp1bm1hcFZpZXdPZkZpbGUobWFwLCBzaXplKSk7CisKKyAgICByZXR1cm4gRGF0
YShXVEZNb3ZlKGJ1ZmZlcikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAppbmRleCA1MTVjMDllYmJm
ZC4uNmUyZmM0OTBlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCkBAIC00OCwxMSArNDgsMTEg
QEAgRGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtX2J1
ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihjb3BpZWREYXRhLCBz
aXplLCBjb3BpZWREYXRhLCBmYXN0RnJlZSkpOwogfQogCi1EYXRhOjpEYXRhKEdSZWZQdHI8U291
cEJ1ZmZlcj4mJiBidWZmZXIsIGludCBmZCkKK0RhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVy
PiYmIGJ1ZmZlciwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogICAgIDogbV9i
dWZmZXIoYnVmZmVyKQogICAgICwgbV9maWxlRGVzY3JpcHRvcihmZCkKICAgICAsIG1fc2l6ZShi
dWZmZXIgPyBidWZmZXItPmxlbmd0aCA6IDApCi0gICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBmZCAh
PSAtMSkKKyAgICAsIG1faXNNYXAobV9zaXplICYmIEZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQo
ZmQpKQogewogfQogCkBAIC0xMDgsMTIgKzEwOCwxMiBAQCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAg
ICAgfk1hcFdyYXBwZXIoKQogICAgIHsKICAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7Ci0gICAg
ICAgIGNsb3NlKGZpbGVEZXNjcmlwdG9yKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGZpbGVEZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICB2b2lkKiBtYXA7CiAgICAgc2l6ZV90IHNp
emU7Ci0gICAgaW50IGZpbGVEZXNjcmlwdG9yOworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSBmaWxlRGVzY3JpcHRvcjsKIH07CiAKIHN0YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBw
ZXIoTWFwV3JhcHBlciogd3JhcHBlcikKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBk
ZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7
CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZk
KQorRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBGaWxlU3lzdGVt
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJU
KG1hcCAhPSBNQVBfRkFJTEVEKTsKQEAgLTEzMCwyMSArMTMwLDE0IEBAIERhdGEgRGF0YTo6YWRv
cHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQogICAgIHJldHVybiB7IFdURk1v
dmUoYnVmZmVyKSwgZmQgfTsKIH0KIAotI2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQot
RGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVhbSogc3RyZWFtLCBzaXplX3Qgb2Zmc2V0
LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtID0gZ19pb19z
dHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShzdHJlYW0pKTsKLSAgICBpbnQgZmQg
PSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19GSUxFX0RFU0NSSVBUT1JfQkFTRUQo
aW5wdXRTdHJlYW0pKTsKLSAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCBvZmZzZXQsIHNp
emUpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxTaGFyZWRNZW1vcnk+IERhdGE6OnRyeUNyZWF0ZVNo
YXJlZE1lbW9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpIHx8ICFpc01hcCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OndyYXBNYXAo
Y29uc3RfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3RoLCBtX2Zp
bGVEZXNjcmlwdG9yKTsKKyAgICBHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtID0gZ19pb19zdHJl
YW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX2ZpbGVEZXNjcmlwdG9yKSk7CisgICAg
aW50IGZkID0gZ19maWxlX2Rlc2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9S
X0JBU0VEKGlucHV0U3RyZWFtKSk7CisgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6d3JhcE1hcChj
b25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVyLT5sZW5ndGgsIGZkKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNw
cAppbmRleCBiZTg0MzcxYTg2My4uN2EwZWM1ZTE0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
LmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBO
ZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMgRGlyZWN0b3J5RW50cnlU
eXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewotICAgIHN3aXRjaCAoZHR5
cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlw
ZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICByZXR1cm4gRGlyZWN0b3J5
RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIH0KLSAg
ICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2VuZGlmCi0KIHZvaWQgdHJh
dmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGdW5jdGlvbjx2b2lkIChj
b25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rpb24pCiB7Ci0jaWYgIU9T
KFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1
cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgewot
ICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRfdHlwZSAhPSBEVF9SRUcp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5k
X25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAi
Li4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIG5hbWVTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0cmluZy5pc051bGwoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihuYW1lU3RyaW5nLCBkaXJl
Y3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIpOwot
I2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgp
OworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCwgIioi
X3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAgIGF1dG8gdHlw
ZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmlsZVN5c3RlbTo6U2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3Rvcnkg
OiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0aW9uKGVudHJ5LCB0eXBl
KTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKGVudHJ5KSwg
dHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZl
bHkoY29uc3QgU3RyaW5nJiBwYXRoKQo=
</data>
<flag name="review"
          id="405479"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390418</attachid>
            <date>2020-02-11 13:59:25 -0800</date>
            <delta_ts>2020-02-13 15:32:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>33189</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmNhNmNjMzRmNDI3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCw3ICs4MzgsMjAgQEAgd2Via2l0Lm9yZy9iLzIwNTQ4NSBmYXN0L3RleHQvc3RhbGUt
VGV4dExheW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBbIEltYWdlT25seUYKIAogaHR0cC90ZXN0
cy9hcHBjYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9ibGluay9zZW5kYmVhY29uIFsgU2tpcCBd
Ci1odHRwL3Rlc3RzL2NhY2hlIFsgU2tpcCBdCisKKyMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9u
CitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMuaHRtbCBbIEZhaWx1
cmUgXQorCisjIGZhaWxzIGJlY2F1c2Ugb2YgY29udmVyc2lvbiB0byBlcG9jaCBiZWhhdmlvciBz
cGVjaWZpYyB0byBNYWMKK2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLWxh
c3QtbW9kaWZpZWQuaHRtbCBbIEZhaWx1cmUgXQorCisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlv
bgoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KK2h0
dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxpZGF0aW9uLmh0bWwgWyBG
YWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUtaWZyYW1lLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUuaHRtbCBbIEZh
aWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3QtcmV0dXJucy1udWxsLWZv
ci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYW52YXMgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3ggWyBTa2lwIF0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZmNlOTYy
NjZiMWQuLjQxMGI3YzE0NGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIwLTAxLTMwICBDaHJp
c3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBs
ZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5oOgorICAgICAgICBB
ZGRlZCBGaWxlQWNjZXNzUGVybWlzc2lvbiBmbGFnIHdoZW4gb3BlbmluZyBmaWxlcy4KKyAgICAg
ICAgUmVtb3ZlIGRlZmF1bHQgYXJndW1lbnQgZm9yIHRoZSBsaXN0RGlyZWN0b3J5IGZpbHRlciBz
aW5jZSB0aGUgZGVmYXV0CisgICAgICAgIFN0cmluZygpIGZpbHRlciBkb2Vzbid0IG1hdGNoIGFs
bCBmaWxlcyBvbiBNYWMgYW5kIFdpbmRvd3MuCisKKyAgICAgICAgKiB3dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHA6CisgICAgICAgICogd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6Cisg
ICAgICAgIEFkZGVkIChTX0lSVVNSIHwgU19JV1VTUikgZmlsZSBvcGVuIG1vZGVzLgorCisgICAg
ICAgICogd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgSW1wbGVtZW50IGdldFZv
bHVtZUZyZWVTcGFjZSBzaW5jZSBzb21lIG9mIHRoZSB0ZXN0cyB1c2UgaXQgd2hlbiB0b2dnbGlu
ZyBjYWNoZS4KKyAgICAgICAgCisgICAgICAgICogd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcDoKKwog
MjAyMC0wMS0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNl
IGV2ZW4gbW9yZSAic2hvcnRlc3QgZm9ybSIgZm9ybWF0dGluZywgYW5kIGxlc3MgImZpeGVkIHBy
ZWNpc2lvbiIgYW5kICJmaXhlZCB3aWR0aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uY3BwIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKaW5kZXggNzJmOTUz
ZWFiM2YuLmYzNmNkZDI1MWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcApAQCAtMjg3LDE3ICsyODcs
MTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiAgICAgdW5tYXBWaWV3T2ZG
aWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOwogfQogCi0jaWYgSEFWRShNTUFQKQotCi1NYXBw
ZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVk
RmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK01hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxl
RGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29s
JiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxlUGF0aCwgRmlsZU9wZW5N
b2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwg
bW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAgICAgY2xvc2VGaWxlKGZkKTsKIH0KIAotYm9vbCBN
YXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBN
YXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhBVkUoTU1BUCkKKworYm9vbCBNYXBwZWRGaWxlRGF0
YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUg
b3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZh
bGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNCw3ICszMjQsMjEgQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfRklMRSB8IChtb2Rl
ID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBm
ZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIHN3aXRjaCAo
b3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVBy
b3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5N
b2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1dSSVRFOworICAgICAg
ICBicmVhazsKKyNpZiBPUyhEQVJXSU4pCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09u
bHk6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQorCisgICAg
dm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgcGFnZVByb3RlY3Rpb24sIE1BUF9GSUxFIHwgKG1h
cE1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJlZCA/IE1BUF9TSEFSRUQgOiBNQVBfUFJJVkFU
RSksIGZkLCAwKTsKIAogICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oIGIvU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCmluZGV4IDgwNWEwZTRiMTZmLi4wMjQxYTQ4ZjBjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uaApAQCAtODQsNiArODQsMTEgQEAgZW51bSBjbGFzcyBGaWxlT3Blbk1v
ZGUgewogI2VuZGlmCiB9OwogCitlbnVtIGNsYXNzIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIDogYm9v
bCB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0gY2xhc3MgRmlsZVNlZWtPcmlnaW4g
ewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAtMTMxLDcgKzEzNiw3IEBAIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3VwKCk7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNsdWRlZCBmcm9tIGJhY2t1cC4KIGJv
b2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7IC8vIFJldHVybnMgdHJ1ZSBpZiBz
dWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyID0gU3RyaW5nKCkp
OworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7CiAKIFdURl9FWFBPUlRfUFJJVkFU
RSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmKTsKIFN0cmlu
ZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqKTsKQEAgLTE0
MCw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZhbGlkKGNvbnN0IFBsYXRmb3JtRmls
ZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0gaQogCiAvLyBQcmVmaXggaXMgd2hh
dCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGgsIG5vdCB0aGUgZnVsbCBwYXRo
LgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJp
bmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
KTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uID0gRmlsZUFj
Y2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbG9zZUZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGZy
b20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNjZXNzZnVsLCAtMSBvdGhlcndpc2Uu
CiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwpAQCAtMjA2LDYgKzIxMSw3IEBA
IHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmKTsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFw
cGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBNYXBw
ZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNj
ZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxl
SGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFwcGVkRmlsZURh
dGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApAQCAtMjE2LDE1ICsyMjIsMjAgQEAg
cHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
ZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhh
bmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7CiAKICAgICB2b2lkKiBtX2ZpbGVE
YXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmlsZVNpemUgeyAwIH07CiB9OwogCi1p
bmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCitpbmxpbmUgTWFwcGVk
RmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgc3VjY2VzcyA9IG1hcEZp
bGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1vZGUpOworfQorCitpbmxp
bmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYg
c3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUsIG1vZGUpOwor
ICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgb3Blbk1vZGUsIG1hcE1vZGUpOwog
fQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRh
JiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmluZGV4IDg2YzA0
ZjlkNWUxLi5kNzlhODU0Mzc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9GaWxl
U3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5j
cHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3Ry
aW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIG9w
ZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwg
RmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsKICAgICBhdXRvIGZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAgIGlmICghdmFsaWRSZXByZXNlbnRh
dGlvbihmaWxlbmFtZSkpCkBAIC0zNTEsOCArMzUxLDEwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBv
cGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgIGVsc2Ug
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgewogICAgICAgICBpZiAoZ19maWxlX3Rl
c3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VY
SVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKICAgICAgICAgICAgIGlvU3RyZWFtID0g
YWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdf
ZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVs
bHB0ciwgbnVsbHB0cikpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdGaWxlQ3JlYXRl
RmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lv
bjo6QWxsKSA/IEdfRklMRV9DUkVBVEVfTk9ORSA6IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKyAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZp
bGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICByZXR1cm4gaW9TdHJlYW0ubGVha1JlZigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggMjc4Mzk4ODNhMWEuLjU2NjAwNTMyYTUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcg
QEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5r
ZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1p
c3Npb24pCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKIApAQCAtODcsMTYgKzg3LDI3IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICByZXR1cm4gaW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKIAogICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOwotICAg
IGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZCkKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRP
TkxZOwotICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgogICAgICAgICBwbGF0Zm9ybUZs
YWcgfD0gKE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKICNp
ZiBPUyhEQVJXSU4pCi0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09u
bHkpCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHk6CiAgICAgICAgIHBsYXRmb3Jt
RmxhZyB8PSBPX0VWVE9OTFk7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCisgICAgfQorCisgICAg
aW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNz
UGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBT
X0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9u
OjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUiB8IFNf
SVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgpOwogCi0gICAgcmV0dXJuIG9wZW4o
ZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIDA2NjYpOworICAgIHJldHVybiBvcGVuKGZzUmVw
LmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJtaXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQgY2xvc2VG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1X
aW4uY3BwCmluZGV4IDU4NTQwZGI3OGM4Li4yZjMwYmNkY2E4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcApAQCAtNDE5LDcgKzQxOSw3IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5
RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1
cm4gcHJvcG9zZWRQYXRoOwogfQogCi1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVu
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVy
bWlzc2lvbikKIHsKICAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gMDsKICAgICBEV09SRCBjcmVh
dGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQzNCw4ICs0MzQsNiBAQCBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAg
ICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfV1JJVEU7CiAgICAgICAgIGNyZWF0aW9uRGlzcG9z
aXRpb24gPSBDUkVBVEVfQUxXQVlTOwogICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBTdHJpbmcgZGVzdGluYXRp
b24gPSBwYXRoOwpAQCAtNTQ3LDkgKzU0NSwxNyBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICBy
ZXR1cm4gZW50cmllczsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5n
JiwgdWludDY0X3QmKQorYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRo
LCB1aW50NjRfdCYgZnJlZVNwYWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBVTEFSR0Vf
SU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlciwgdG90YWxOdW1iZXJPZkJ5dGVzLCB0
b3RhbE51bWJlck9mRnJlZUJ5dGVzOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRo
LndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsICZ0
b3RhbE51bWJlck9mQnl0ZXMsICZ0b3RhbE51bWJlck9mRnJlZUJ5dGVzKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0
ID4gc3RhdGljX2Nhc3Q8VUxPTkdMT05HPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVlU3BhY2UgPSBmcmVlQnl0
ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogT3B0
aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKQEAg
LTYwMSwxNSArNjA3LDcgQEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXpl
X3QpCiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwogfQogCi1NYXBwZWRGaWxl
RGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1v
ZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUgPSBDcmVhdGVGaWxlKGZp
bGVQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQsIDAsIG51bGxwdHIs
IE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVsbHB0cik7Ci0KLSAgICBz
dWNjZXNzID0gbWFwRmlsZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBjbG9zZUZpbGUoZmlsZSk7
Ci19Ci0KLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwg
TWFwcGVkRmlsZU1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTYyMywxMSArNjIxLDI0IEBAIGJvb2wgTWFwcGVkRmlsZURh
dGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1v
ZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gbWFwcGluZyA9IENy
ZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFET05MWSwgMCwgMCwgbnVs
bHB0cik7CisgICAgRFdPUkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgIERX
T1JEIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3aXRjaCAob3Blbk1vZGUp
IHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVByb3RlY3Rpb24g
PSBQQUdFX1JFQURPTkxZOworICAgICAgICBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfUkVBRDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgorICAgICAgICBw
YWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBkZXNpcmVkQWNjZXNzID0g
RklMRV9NQVBfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8gbWFwcGlu
ZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAs
IDAsIG51bGxwdHIpOwogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwg
MCwgMCwgc2l6ZSk7CisgICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVz
aXJlZEFjY2VzcywgMCwgMCwgc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAg
aWYgKCFtX2ZpbGVEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdh
bGtlci5jcHAKaW5kZXggOGQ3ZDdhYzY4MzguLjY4OGZlZGQ1OWZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL1Bh
dGhXYWxrZXIuY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBQYXRoV2Fs
a2VyOjpQYXRoV2Fsa2VyKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIHBh
dHRlcm4pCiB7Ci0gICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnkgKyAiXFwiICsgcGF0dGVybjsK
KyAgICBTdHJpbmcgcGF0aCA9IG1ha2VTdHJpbmcoZGlyZWN0b3J5LCAnXFwnLCBwYXR0ZXJuKTsK
ICAgICBtX2hhbmRsZSA9IDo6RmluZEZpcnN0RmlsZVcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRh
dGEoKSwgJm1fZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMzBhNzRjMGQ5MTcuLjQxYTU2Y2JkYWUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTAxLTMwICBDaHJpc3RvcGhlciBSZWlk
ICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29y
a0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW06CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwOgorICAgICAgICBVc2UgbW9yZSBGaWxlU3lzdGVt
IGZ1bmN0aW9uYWxpdHkgdG8gc2hhcmUgY29kZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwOgorICAgICAg
ICBVc2UgT3B0aW9uYWw8VmVjdG9yPiBmb3IgbV9idWZmZXIgc2luY2Ugd2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIGlzRW1wdHkgYW5kIGlzTnVsbC4KKwogMjAyMC0wMS0xNCAgUm9zcyBLaXJzbGlu
ZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgV2ViUGFzdGVib2FyZFByb3h5
V1BFIHNob3VsZCBiZSBXZWJQYXN0ZWJvYXJkUHJveHlMaWJXUEUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCmluZGV4
IDc1YWE5MDVhYjY4Li4zZTg1Yzg3MmE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCkBAIC0yOCw3ICsyOCw2
IEBACiAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxs
eVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiAhT1Mo
V0lORE9XUykKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtMzksMjYgKzM4LDIzIEBACiBuYW1l
c3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRP
V1MpCiBEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7Ci0g
ICAgaW50IGZkID0gb3BlbihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCkuZGF0YSgpLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNfSVdVU1Ip
OwotICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoZnRydW5j
YXRlKGZkLCBtX3NpemUpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYXV0byBoYW5k
bGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OldyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcik7CisgICAgaWYg
KCFGaWxlU3lzdGVtOjp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBtX3NpemUpKSB7CisgICAgICAgIEZp
bGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
ICAgICAKICAgICBGaWxlU3lzdGVtOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChwYXRo
KTsKLQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVE
KSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVu
TW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1Y2Nlc3Mp
OworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFu
ZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICB2b2lkKiBtYXAgPSBjb25z
dF9jYXN0PHZvaWQqPihtYXBwZWRGaWxlLmRhdGEoKSk7CiAgICAgdWludDhfdCogbWFwRGF0YSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtYXApOwogICAgIGFwcGx5KFsmbWFwRGF0YV0oY29uc3Qg
dWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUpIHsKICAgICAgICAgbWVtY3B5KG1hcERh
dGEsIGJ5dGVzLCBieXRlc1NpemUpOwpAQCAtNjYsNTIgKzYyLDIzIEBAIERhdGEgRGF0YTo6bWFw
VG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfSk7CiAKKyNpZiBPUyhXSU5ET1dTKQorICAgIERXT1JEIG9sZFByb3RlY3Rpb247CisgICAg
VmlydHVhbFByb3RlY3QobWFwLCBtX3NpemUsIEZJTEVfTUFQX1JFQUQsICZvbGRQcm90ZWN0aW9u
KTsKKyAgICBGbHVzaFZpZXdPZkZpbGUobWFwLCBtX3NpemUpOworI2Vsc2UKICAgICAvLyBEcm9w
IHRoZSB3cml0ZSBwZXJtaXNzaW9uLgogICAgIG1wcm90ZWN0KG1hcCwgbV9zaXplLCBQUk9UX1JF
QUQpOwogCiAgICAgLy8gRmx1c2ggKGFzeW5jaHJvbm91c2x5KSB0byBmaWxlLCB0dXJuaW5nIHRo
aXMgaW50byBjbGVhbiBtZW1vcnkuCiAgICAgbXN5bmMobWFwLCBtX3NpemUsIE1TX0FTWU5DKTsK
LQotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIG1fc2l6ZSwgZmQpOwotfQotI2Vsc2UK
LURhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKLXsKLSAgICBh
dXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Bl
bk1vZGU6OldyaXRlKTsKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZp
bGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSksIHNpemUoKSkgPCAwKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBEYXRhKFZlY3Rvcjx1aW50OF90PihtX2J1
ZmZlcikpOwotfQogI2VuZGlmCiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgbWFwRmlsZShjb25z
dCBjaGFyKiBwYXRoKQotewotICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFksIDApOwot
ICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgc3RydWN0IHN0YXQgc3Rh
dDsKLSAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6
ZTsKLSAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZXR1cm4g
RGF0YTo6ZW1wdHkoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCAw
LCBzaXplKTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAoV1RGTW92ZShtYXBwZWRGaWxlKSwg
aGFuZGxlKTsKIH0KLSNlbmRpZgogCi1EYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQor
RGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAg
cmV0dXJuIG1hcEZpbGUoRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSk7Ci0jZWxzZQogICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBh
dGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAgICAgaWYgKCFGaWxlU3lzdGVt
Ojppc0hhbmRsZVZhbGlkKGZpbGUpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTE5LDMxICs4
NiwyOCBAQCBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIGlmICghRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUoZmlsZSwgc2l6ZSkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
cmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmaWxlLCAwLCBzaXplKTsKLSNlbmRpZgogfQogCi0jaWYg
IU9TKFdJTkRPV1MpCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBvZmZzZXQs
IHNpemVfdCBzaXplKQorRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBy
ZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpKTsKK30KKworRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7CiAgICAgaWYg
KCFzaXplKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwogICAgIH0KLQotICAg
IHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwg
ZmQsIG9mZnNldCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGNsb3Nl
KGZkKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEg
bWFwcGVkRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlByaXZhdGUsIHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBzaXplLCBm
ZCk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKFdURk1vdmUobWFwcGVkRmlsZSksIGhhbmRs
ZSk7CiB9Ci0jZWxzZQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1G
aWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIHJldHVy
biBEYXRhKGZpbGUsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKIAogU0hBMTo6RGlnZXN0IGNv
bXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CkBAIC0xNzks
NDAgKzE0MywyNSBAQCBzdGF0aWMgU2FsdCBtYWtlU2FsdCgpCiAKIE9wdGlvbmFsPFNhbHQ+IHJl
YWRPck1ha2VTYWx0KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAg
ICBhdXRvIGNwYXRoID0gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OwotICAgIGF1dG8gZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19SRE9OTFksIDApOwotICAgIFNh
bHQgc2FsdDsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9IHJlYWQoZmQsIHNhbHQuZGF0YSgpLCBzYWx0
LnNpemUoKSk7Ci0gICAgY2xvc2UoZmQpOwotICAgIGlmIChieXRlc1JlYWQgIT0gc3RhdGljX2Nh
c3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpKSB7Ci0gICAgICAgIHNhbHQgPSBtYWtlU2FsdCgpOwot
Ci0gICAgICAgIHVubGluayhjcGF0aC5kYXRhKCkpOwotICAgICAgICBmZCA9IG9wZW4oY3BhdGgu
ZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCBTX0lSVVNSIHwgU19JV1VTUik7
Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHdyaXRlKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5zaXpl
KCkpID09IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKTsKLSAgICAgICAgY2xvc2Uo
ZmQpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKGZpbGVFeGlzdHMocGF0aCkpIHsK
KyAgICAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3Rl
bTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICAgICAgU2FsdCBzYWx0OworICAgICAgICBhdXRv
IGJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCByZWludGVycHJldF9j
YXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKTsKKyAgICAgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGZpbGUpOworICAgICAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQuc2l6ZSgp
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICByZXR1cm4gc2FsdDsKICAgICB9
Ci0gICAgcmV0dXJuIHNhbHQ7Ci0jZWxzZQotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9w
ZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgU2FsdCBz
YWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOworCisg
ICAgU2FsdCBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpv
cGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlLCBGaWxlU3lzdGVt
OjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcik7CisgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5
c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRh
KCkpLCBzYWx0LnNpemUoKSkgPT0gc2FsdC5zaXplKCk7CiAgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGZpbGUpOwotICAgIGlmIChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpIHsKLSAgICAgICAg
c2FsdCA9IG1ha2VTYWx0KCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUocGF0aCk7Ci0gICAgICAgIGZpbGUg
PSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6Oldy
aXRlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmls
ZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSkgPT0g
c2FsdC5zaXplKCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLSAgICAg
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9CiAgICAgcmV0
dXJuIHNhbHQ7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YS5oCmluZGV4IGQ3OGQ5OGI2MTc1Li4zN2I1OTY2NTZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKQEAgLTM5LDYg
KzM5LDExIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyU291cC5oPgogI2VuZGlmCiAKKyNp
ZiBVU0UoQ1VSTCkKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU2hhcmVkTWVtb3J5OwpA
QCAtNTMsMTkgKzU4LDE2IEBAIHB1YmxpYzoKICAgICB+RGF0YSgpIHsgfQogCiAgICAgc3RhdGlj
IERhdGEgZW1wdHkoKTsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBzdGF0aWMgRGF0YSBhZG9wdE1h
cCh2b2lkKiBtYXAsIHNpemVfdCwgaW50IGZkKTsKLSNlbmRpZgorICAgIHN0YXRpYyBEYXRhIGFk
b3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBlbnVtIGNsYXNzIEJhY2tp
bmcgeyBCdWZmZXIsIE1hcCB9OwogICAgIERhdGEoT1NPYmplY3RQdHI8ZGlzcGF0Y2hfZGF0YV90
PiYmLCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgogI2lmIFVTRShTT1VQKQot
ICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBpbnQgZmQgPSAtMSk7Ci0jZWxpZiBPUyhX
SU5ET1dTKQotICAgIGV4cGxpY2l0IERhdGEoVmVjdG9yPHVpbnQ4X3Q+JiYpOwotICAgIERhdGEo
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwor
ICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmQgPSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKTsKKyNlbGlm
IFVTRShDVVJMKQorICAgIERhdGEoVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhPiYmKTsKICNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQpAQCAtOTQsMTAgKzk2
LDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQ
dHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9
OworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVEZXNjcmlwdG9yIHsg
RmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OwogI2VuZGlmCi0jaWYgT1Mo
V0lORE9XUykKLSAgICBWZWN0b3I8dWludDhfdD4gbV9idWZmZXI7CisjaWYgVVNFKENVUkwpCisg
ICAgQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YT4+IG1fYnVmZmVyOwogI2VuZGlmCiAgICAgbXV0YWJsZSBjb25zdCB1aW50OF90KiBtX2RhdGEg
eyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKQEAgLTEwNiwxNyArMTA4LDgg
QEAgcHJpdmF0ZToKIAogRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYp
OwogYm9vbCBieXRlc0VxdWFsKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7Ci0jaWYgIU9TKFdJ
TkRPV1MpCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7
Ci0jZWxzZQogRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFu
ZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlmCi0jaWYgVVNFKEdMSUIpICYmICFQ
TEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgotI2lmICFPUyhXSU5ET1dTKQogRGF0YSBtYXBGaWxl
KGNvbnN0IGNoYXIqIHBhdGgpOwotI2VuZGlmCiBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKTsKIAogdXNpbmcgU2FsdCA9IHN0ZDo6YXJyYXk8dWludDhfdCwgOD47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tCmluZGV4IDZhMzlmODg3MDA4Li5jYjRhYzM4YzZhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q29jb2EubW0KQEAgLTkyLDExICs5MiwxMyBAQCBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEm
IGEsIGNvbnN0IERhdGEmIGIpCiAgICAgcmV0dXJuIHsgYWRvcHRPU09iamVjdChkaXNwYXRjaF9k
YXRhX2NyZWF0ZV9jb25jYXQoYS5kaXNwYXRjaERhdGEoKSwgYi5kaXNwYXRjaERhdGEoKSkpIH07
CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZk
KQorRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBl
ZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qg
c2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOworICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVh
a0hhbmRsZSgpOwogICAgIEFTU0VSVChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxF
RCk7Ci0gICAgY2xvc2UoZmQpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CiAgICAg
YXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNp
emUsIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVG
QVVMVCwgMCksIFttYXAsIHNpemVdIHsKICAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7CiAgICAg
fSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcAppbmRleCBjZjQzMTU2YzVhMC4uMTkyNDgyYmY5ZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCkBAIC0zMCw0MCArMzAsNDIgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogRGF0YTo6RGF0YShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fYnVmZmVyKEJveDxWYXJpYW50PFZlY3Rv
cjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3JlYXRlKFZlY3Rvcjx1
aW50OF90PihzaXplKSkpCisgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBtX2J1ZmZlci5yZXNp
emUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgp
LCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PigqbV9i
dWZmZXIpLmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAKLURhdGE6OkRhdGEoRmlsZVN5c3RlbTo6
UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQorRGF0
YTo6RGF0YShWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGE+JiYgZGF0YSkKKyAgICA6IG1fYnVmZmVyKEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90Piwg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKQorICAg
ICwgbV9pc01hcChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhPigqbV9idWZmZXIpKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3Np
emUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxlKGZpbGUsIG9mZnNldCwgRmlsZVN5
c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7Ci0gICAgRmlsZVN5c3RlbTo6cmVhZEZy
b21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLmRhdGEoKSksIHNp
emUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLX0KLQotRGF0YTo6RGF0YShW
ZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCi0gICAgOiBtX2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikp
Ci17Ci0gICAgbV9zaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAgIG1fc2l6ZSA9IFdURjo6c3dp
dGNoT24oKm1fYnVmZmVyLAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZl
cikgLT4gc2l6ZV90IHsgcmV0dXJuIGJ1ZmZlci5zaXplKCk7IH0sCisgICAgICAgIFtdKGNvbnN0
IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBwZWRGaWxlKSAtPiBzaXplX3QgeyByZXR1
cm4gbWFwcGVkRmlsZS5zaXplKCk7IH0KKyAgICApOwogfQogCiBEYXRhIERhdGE6OmVtcHR5KCkK
IHsKLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgcmV0
dXJuIHsgV1RGTW92ZShidWZmZXIpIH07CiB9CiAKIGNvbnN0IHVpbnQ4X3QqIERhdGE6OmRhdGEo
KSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCk7CisgICAgaWYgKCFtX2J1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbigq
bV9idWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKSAtPiBj
b25zdCB1aW50OF90KiB7IHJldHVybiBidWZmZXIuZGF0YSgpOyB9LAorICAgICAgICBbXShjb25z
dCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFwcGVkRmlsZSkgLT4gY29uc3QgdWludDhf
dCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1hcHBlZEZpbGUuZGF0YSgp
KTsgfQorICAgICk7CiB9CiAKIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9idWZmZXIuaXNFbXB0eSgpOworICAgIHJldHVybiAhbV9idWZmZXI7CiB9CiAKIGJvb2wg
RGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4m
IGFwcGxpZXIpIGNvbnN0CkBAIC03MSwyMSArNzMsMzcgQEAgYm9vbCBEYXRhOjphcHBseShjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QK
ICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
YXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1ZmZlci5kYXRhKCkp
LCBtX2J1ZmZlci5zaXplKCkpOworICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSk7CiB9CiAKIERhdGEgRGF0YTo6c3VicmFu
Z2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9i
dWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IGRhdGEoKSArIG9mZnNldCwgc2l6ZSB9Owog
fQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCiB7Cisg
ICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBiOworICAgIGlmIChiLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXIoYS5zaXpl
KCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGEuZGF0YSgpLCBhLnNp
emUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBhLnNpemUoKSwgYi5kYXRhKCksIGIu
c2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3ZlKGJ1ZmZlcikpOwogfQogCitEYXRhIERh
dGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQoreworICAgIEFTU0VSVChtYXBwZWRGaWxl
LmRhdGEoKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKKworICAgIHJldHVybiB7
IFdURk1vdmUobWFwcGVkRmlsZSkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKaW5kZXggNTE1YzA5
ZWJiZmQuLmQzYjc5ZTAxNGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApAQCAtNDgsMTEgKzQ4
LDExIEBAIERhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiAgICAg
bV9idWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoY29waWVkRGF0
YSwgc2l6ZSwgY29waWVkRGF0YSwgZmFzdEZyZWUpKTsKIH0KIAotRGF0YTo6RGF0YShHUmVmUHRy
PFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBpbnQgZmQpCitEYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1
ZmZlcj4mJiBidWZmZXIsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKICAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKICAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmQpCiAgICAgLCBtX3Np
emUoYnVmZmVyID8gYnVmZmVyLT5sZW5ndGggOiAwKQotICAgICwgbV9pc01hcChtX3NpemUgJiYg
ZmQgIT0gLTEpCisgICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBGaWxlU3lzdGVtOjppc0hhbmRsZVZh
bGlkKGZkKSkKIHsKIH0KIApAQCAtMTA4LDEyICsxMDgsMTIgQEAgc3RydWN0IE1hcFdyYXBwZXIg
ewogICAgIH5NYXBXcmFwcGVyKCkKICAgICB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOwot
ICAgICAgICBjbG9zZShmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShmaWxlRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgdm9pZCogbWFwOwogICAgIHNpemVf
dCBzaXplOwotICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgZmlsZURlc2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxldGVNYXBX
cmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCkBAIC0xMjEsOCArMTIxLDEwIEBAIHN0YXRpYyB2
b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKICAgICBkZWxldGUgd3Jh
cHBlcjsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBp
bnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYg
bWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogeworICAgIHNp
emVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCogbWFwID0gbWFwcGVkRmls
ZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1hcCAhPSBNQVBf
RkFJTEVEKTsKICAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBwZXIgeyBtYXAs
IHNpemUsIGZkIH07CkBAIC0xMzAsMjEgKzEzMiwxNCBAQCBEYXRhIERhdGE6OmFkb3B0TWFwKHZv
aWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKICAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZl
ciksIGZkIH07CiB9CiAKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURhdGEgYWRv
cHRBbmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0qIHN0cmVhbSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90
IHNpemUpCi17Ci0gICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dl
dF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oc3RyZWFtKSk7Ci0gICAgaW50IGZkID0gZ19maWxl
X2Rlc2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKGlucHV0U3Ry
ZWFtKSk7Ci0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgb2Zmc2V0LCBzaXplKTsKLX0K
LSNlbmRpZgotCiBSZWZQdHI8U2hhcmVkTWVtb3J5PiBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1v
cnkoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nh
c3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgbV9maWxlRGVzY3Jp
cHRvcik7CisgICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9p
bnB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9maWxlRGVzY3JpcHRvcikpOworICAgIGludCBmZCA9
IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChp
bnB1dFN0cmVhbSkpOworICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OndyYXBNYXAoY29uc3RfY2Fz
dDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3RoLCBmZCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKaW5kZXgg
YmU4NDM3MWE4NjMuLjdhMGVjNWUxNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKQEAg
LTUzLDQ4ICs1MywxMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0Nh
Y2hlIHsKIAotI2lmICFPUyhXSU5ET1dTKQotc3RhdGljIERpcmVjdG9yeUVudHJ5VHlwZSBkaXJl
Y3RvcnlFbnRyeVR5cGUodWludDhfdCBkdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGR0eXBlKSB7Ci0g
ICAgY2FzZSBEVF9ESVI6Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVj
dG9yeTsKLSAgICBjYXNlIERUX1JFRzoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlw
ZTo6RmlsZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICB9Ci0gICAgcmV0dXJu
IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLX0KLSNlbmRpZgotCiB2b2lkIHRyYXZlcnNlRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRnVuY3Rpb248dm9pZCAoY29uc3QgU3Ry
aW5nJiwgRGlyZWN0b3J5RW50cnlUeXBlKT4mIGZ1bmN0aW9uKQogewotI2lmICFPUyhXSU5ET1dT
KQotICAgIERJUiogZGlyID0gb3BlbmRpcihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAg
IGRpcmVudCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKLSAgICAgICAg
aWYgKGRwLT5kX3R5cGUgIT0gRFRfRElSICYmIGRwLT5kX3R5cGUgIT0gRFRfUkVHKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwot
ICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBuYW1lU3RyaW5nID0gU3RyaW5nOjpm
cm9tVVRGOChuYW1lKTsKLSAgICAgICAgaWYgKG5hbWVTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24obmFtZVN0cmluZywgZGlyZWN0b3J5RW50
cnlUeXBlKGRwLT5kX3R5cGUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLSNlbHNlCi0g
ICAgYXV0byBlbnRyaWVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoKTsKKyAgICBh
dXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9zKTsKICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogZW50cmllcykgewogICAgICAgICBhdXRvIHR5cGUgPSBGaWxl
U3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZW50cnksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5
bWJvbGljTGlua3M6Ok5vKSA/IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5IDogRGlyZWN0
b3J5RW50cnlUeXBlOjpGaWxlOwotICAgICAgICBmdW5jdGlvbihlbnRyeSwgdHlwZSk7CisgICAg
ICAgIGZ1bmN0aW9uKEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShlbnRyeSksIHR5cGUpOwog
ICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIGRlbGV0ZURpcmVjdG9yeVJlY3Vyc2l2ZWx5KGNvbnN0
IFN0cmluZyYgcGF0aCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390697</attachid>
            <date>2020-02-13 15:32:10 -0800</date>
            <delta_ts>2020-02-13 15:38:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>34070</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmNhNmNjMzRmNDI3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCw3ICs4MzgsMjAgQEAgd2Via2l0Lm9yZy9iLzIwNTQ4NSBmYXN0L3RleHQvc3RhbGUt
VGV4dExheW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBbIEltYWdlT25seUYKIAogaHR0cC90ZXN0
cy9hcHBjYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9ibGluay9zZW5kYmVhY29uIFsgU2tpcCBd
Ci1odHRwL3Rlc3RzL2NhY2hlIFsgU2tpcCBdCisKKyMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9u
CitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMuaHRtbCBbIEZhaWx1
cmUgXQorCisjIGZhaWxzIGJlY2F1c2Ugb2YgY29udmVyc2lvbiB0byBlcG9jaCBiZWhhdmlvciBz
cGVjaWZpYyB0byBNYWMKK2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLWxh
c3QtbW9kaWZpZWQuaHRtbCBbIEZhaWx1cmUgXQorCisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlv
bgoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KK2h0
dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxpZGF0aW9uLmh0bWwgWyBG
YWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUtaWZyYW1lLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUuaHRtbCBbIEZh
aWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3QtcmV0dXJucy1udWxsLWZv
ci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYW52YXMgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3ggWyBTa2lwIF0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZmNlOTYy
NjZiMWQuLjQxMGI3YzE0NGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIwLTAxLTMwICBDaHJp
c3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBs
ZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5oOgorICAgICAgICBB
ZGRlZCBGaWxlQWNjZXNzUGVybWlzc2lvbiBmbGFnIHdoZW4gb3BlbmluZyBmaWxlcy4KKyAgICAg
ICAgUmVtb3ZlIGRlZmF1bHQgYXJndW1lbnQgZm9yIHRoZSBsaXN0RGlyZWN0b3J5IGZpbHRlciBz
aW5jZSB0aGUgZGVmYXV0CisgICAgICAgIFN0cmluZygpIGZpbHRlciBkb2Vzbid0IG1hdGNoIGFs
bCBmaWxlcyBvbiBNYWMgYW5kIFdpbmRvd3MuCisKKyAgICAgICAgKiB3dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHA6CisgICAgICAgICogd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6Cisg
ICAgICAgIEFkZGVkIChTX0lSVVNSIHwgU19JV1VTUikgZmlsZSBvcGVuIG1vZGVzLgorCisgICAg
ICAgICogd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgSW1wbGVtZW50IGdldFZv
bHVtZUZyZWVTcGFjZSBzaW5jZSBzb21lIG9mIHRoZSB0ZXN0cyB1c2UgaXQgd2hlbiB0b2dnbGlu
ZyBjYWNoZS4KKyAgICAgICAgCisgICAgICAgICogd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcDoKKwog
MjAyMC0wMS0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNl
IGV2ZW4gbW9yZSAic2hvcnRlc3QgZm9ybSIgZm9ybWF0dGluZywgYW5kIGxlc3MgImZpeGVkIHBy
ZWNpc2lvbiIgYW5kICJmaXhlZCB3aWR0aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uY3BwIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKaW5kZXggNzJmOTUz
ZWFiM2YuLmYzNmNkZDI1MWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcApAQCAtMjg3LDE3ICsyODcs
MTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiAgICAgdW5tYXBWaWV3T2ZG
aWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOwogfQogCi0jaWYgSEFWRShNTUFQKQotCi1NYXBw
ZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVk
RmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK01hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxl
RGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29s
JiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxlUGF0aCwgRmlsZU9wZW5N
b2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwg
bW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAgICAgY2xvc2VGaWxlKGZkKTsKIH0KIAotYm9vbCBN
YXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBN
YXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhBVkUoTU1BUCkKKworYm9vbCBNYXBwZWRGaWxlRGF0
YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUg
b3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZh
bGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNCw3ICszMjQsMjEgQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfRklMRSB8IChtb2Rl
ID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBm
ZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIHN3aXRjaCAo
b3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVBy
b3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5N
b2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1dSSVRFOworICAgICAg
ICBicmVhazsKKyNpZiBPUyhEQVJXSU4pCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09u
bHk6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQorCisgICAg
dm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgcGFnZVByb3RlY3Rpb24sIE1BUF9GSUxFIHwgKG1h
cE1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJlZCA/IE1BUF9TSEFSRUQgOiBNQVBfUFJJVkFU
RSksIGZkLCAwKTsKIAogICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oIGIvU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCmluZGV4IDgwNWEwZTRiMTZmLi4wMjQxYTQ4ZjBjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uaApAQCAtODQsNiArODQsMTEgQEAgZW51bSBjbGFzcyBGaWxlT3Blbk1v
ZGUgewogI2VuZGlmCiB9OwogCitlbnVtIGNsYXNzIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIDogYm9v
bCB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0gY2xhc3MgRmlsZVNlZWtPcmlnaW4g
ewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAtMTMxLDcgKzEzNiw3IEBAIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3VwKCk7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNsdWRlZCBmcm9tIGJhY2t1cC4KIGJv
b2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7IC8vIFJldHVybnMgdHJ1ZSBpZiBz
dWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyID0gU3RyaW5nKCkp
OworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7CiAKIFdURl9FWFBPUlRfUFJJVkFU
RSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmKTsKIFN0cmlu
ZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqKTsKQEAgLTE0
MCw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZhbGlkKGNvbnN0IFBsYXRmb3JtRmls
ZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0gaQogCiAvLyBQcmVmaXggaXMgd2hh
dCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGgsIG5vdCB0aGUgZnVsbCBwYXRo
LgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJp
bmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
KTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uID0gRmlsZUFj
Y2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbG9zZUZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGZy
b20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNjZXNzZnVsLCAtMSBvdGhlcndpc2Uu
CiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwpAQCAtMjA2LDYgKzIxMSw3IEBA
IHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmKTsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFw
cGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBNYXBw
ZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNj
ZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxl
SGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFwcGVkRmlsZURh
dGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApAQCAtMjE2LDE1ICsyMjIsMjAgQEAg
cHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
ZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhh
bmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7CiAKICAgICB2b2lkKiBtX2ZpbGVE
YXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmlsZVNpemUgeyAwIH07CiB9OwogCi1p
bmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCitpbmxpbmUgTWFwcGVk
RmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgc3VjY2VzcyA9IG1hcEZp
bGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1vZGUpOworfQorCitpbmxp
bmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYg
c3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUsIG1vZGUpOwor
ICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgb3Blbk1vZGUsIG1hcE1vZGUpOwog
fQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRh
JiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmluZGV4IDg2YzA0
ZjlkNWUxLi5kNzlhODU0Mzc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9GaWxl
U3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5j
cHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3Ry
aW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIG9w
ZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwg
RmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsKICAgICBhdXRvIGZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAgIGlmICghdmFsaWRSZXByZXNlbnRh
dGlvbihmaWxlbmFtZSkpCkBAIC0zNTEsOCArMzUxLDEwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBv
cGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgIGVsc2Ug
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgewogICAgICAgICBpZiAoZ19maWxlX3Rl
c3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VY
SVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKICAgICAgICAgICAgIGlvU3RyZWFtID0g
YWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdf
ZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVs
bHB0ciwgbnVsbHB0cikpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdGaWxlQ3JlYXRl
RmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lv
bjo6QWxsKSA/IEdfRklMRV9DUkVBVEVfTk9ORSA6IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKyAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZp
bGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICByZXR1cm4gaW9TdHJlYW0ubGVha1JlZigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggMjc4Mzk4ODNhMWEuLjU2NjAwNTMyYTUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcg
QEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5r
ZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1p
c3Npb24pCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKIApAQCAtODcsMTYgKzg3LDI3IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICByZXR1cm4gaW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKIAogICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOwotICAg
IGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZCkKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRP
TkxZOwotICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgogICAgICAgICBwbGF0Zm9ybUZs
YWcgfD0gKE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKICNp
ZiBPUyhEQVJXSU4pCi0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09u
bHkpCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHk6CiAgICAgICAgIHBsYXRmb3Jt
RmxhZyB8PSBPX0VWVE9OTFk7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCisgICAgfQorCisgICAg
aW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNz
UGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBT
X0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9u
OjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUiB8IFNf
SVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgpOwogCi0gICAgcmV0dXJuIG9wZW4o
ZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIDA2NjYpOworICAgIHJldHVybiBvcGVuKGZzUmVw
LmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJtaXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQgY2xvc2VG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1X
aW4uY3BwCmluZGV4IDU4NTQwZGI3OGM4Li5lNjQxZjBiNTFkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcApAQCAtNDE5LDcgKzQxOSw3IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5
RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1
cm4gcHJvcG9zZWRQYXRoOwogfQogCi1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVu
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVy
bWlzc2lvbikKIHsKICAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gMDsKICAgICBEV09SRCBjcmVh
dGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQzNCw4ICs0MzQsNiBAQCBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAg
ICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfV1JJVEU7CiAgICAgICAgIGNyZWF0aW9uRGlzcG9z
aXRpb24gPSBDUkVBVEVfQUxXQVlTOwogICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBTdHJpbmcgZGVzdGluYXRp
b24gPSBwYXRoOwpAQCAtNTQ3LDkgKzU0NSwxNCBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICBy
ZXR1cm4gZW50cmllczsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5n
JiwgdWludDY0X3QmKQorYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRo
LCB1aW50NjRfdCYgZnJlZVNwYWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBVTEFSR0Vf
SU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlcjsKKyAgICBpZiAoIUdldERpc2tGcmVl
U3BhY2VFeFcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgJmZyZWVCeXRlc0F2YWlsYWJs
ZVRvQ2FsbGVyLCBOVUxMLCBOVUxMKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZnJl
ZVNwYWNlID0gZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIuUXVhZFBhcnQ7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChjb25zdCBDU3Ry
aW5nJiBmc0ZpbGUpCkBAIC02MDEsMTUgKzYwNCw3IEBAIGJvb2wgdW5tYXBWaWV3T2ZGaWxlKHZv
aWQqIGJ1ZmZlciwgc2l6ZV90KQogICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVmZmVyKTsK
IH0KIAotTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCi17Ci0gICAgYXV0byBmaWxl
ID0gQ3JlYXRlRmlsZShmaWxlUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgR0VORVJJQ19S
RUFELCAwLCBudWxscHRyLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIG51
bGxwdHIpOwotCi0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmlsZSwgbW9kZSk7Ci0gICAg
Y2xvc2VGaWxlKGZpbGUpOwotfQotCi1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxl
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlKQorYm9vbCBNYXBwZWRG
aWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Bl
bk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKQogewogICAgIGlmICghaXNIYW5kbGVWYWxp
ZChoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjMsMTEgKzYxOCwyNCBAQCBi
b29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIE1hcHBlZEZpbGVNb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBh
dXRvIG1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsIG51bGxwdHIsIFBBR0VfUkVB
RE9OTFksIDAsIDAsIG51bGxwdHIpOworICAgIERXT1JEIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9S
RUFET05MWTsKKyAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfUkVBRDsKKyAgICBz
d2l0Y2ggKG9wZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAg
IHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9
IEZJTEVfTUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpX
cml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURXUklURTsKKyAgICAgICAg
ZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBhdXRvIG1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsIG51bGxwdHIsIHBh
Z2VQcm90ZWN0aW9uLCAwLCAwLCBudWxscHRyKTsKICAgICBpZiAoIW1hcHBpbmcpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fZmlsZURhdGEgPSBNYXBWaWV3T2ZGaWxlKG1hcHBpbmcs
IEZJTEVfTUFQX1JFQUQsIDAsIDAsIHNpemUpOworICAgIG1fZmlsZURhdGEgPSBNYXBWaWV3T2ZG
aWxlKG1hcHBpbmcsIGRlc2lyZWRBY2Nlc3MsIDAsIDAsIHNpemUpOwogICAgIENsb3NlSGFuZGxl
KG1hcHBpbmcpOwogICAgIGlmICghbV9maWxlRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwIGIvU291cmNlL1dU
Ri93dGYvd2luL1BhdGhXYWxrZXIuY3BwCmluZGV4IDhkN2Q3YWM2ODM4Li42ODhmZWRkNTlmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIAogUGF0aFdhbGtlcjo6UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwg
Y29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0b3J5ICsg
IlxcIiArIHBhdHRlcm47CisgICAgU3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9yeSwg
J1xcJywgcGF0dGVybik7CiAgICAgbV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgud2lk
ZUNoYXJhY3RlcnMoKS5kYXRhKCksICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwYTc0YzBk
OTE3Li44ZTU4NmJjOWQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMC0wMS0zMCAg
Q2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0g
SW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIEVuc3VyZSB0aGF0
IHRoZSBDYWNoZVN0b3JhZ2UgZGlyZWN0b3J5IGlzIGFjdHVhbGx5IGJlaW5nIGNyZWF0ZWQuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcDoKKyAg
ICAgICAgVXNlIG1vcmUgRmlsZVN5c3RlbSBmdW5jdGlvbmFsaXR5IHRvIHNoYXJlIGNvZGUgYWNy
b3NzIHBsYXRmb3Jtcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDdXJsLmNwcDoKKyAgICAgICAgVXNlIE9wdGlvbmFsPFZlY3Rvcj4gZm9yIG1fYnVm
ZmVyIHNpbmNlIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBpc0VtcHR5IGFuZCBpc051bGwuCisK
IDIwMjAtMDEtMTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAg
ICAgICAgIFdlYlBhc3RlYm9hcmRQcm94eVdQRSBzaG91bGQgYmUgV2ViUGFzdGVib2FyZFByb3h5
TGliV1BFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCmluZGV4IDM5OTI2ZWI2YWE4Li4wNDFlN2Q5NGMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQzMiw4ICs0MzIsMTEgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCB1aW4KICAgICBhdXRvIGlzTmV3RW50cnkgPSBtX3Nlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1b3RhLCBkZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0gewogICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVs
dFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9KS5pc05ld0VudHJ5OwotICAg
IGlmIChpc05ld0VudHJ5KQorICAgIGlmIChpc05ld0VudHJ5KSB7CiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQYXRoSGFuZGxlKTsKKyAgICAg
ICAgaWYgKCFjYWNoZVJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBvc3RTdG9yYWdl
VGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJl
UGF0aEV4aXN0cywgY2FjaGVSb290UGF0aCkpOworICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVhYTkwNWFiNjguLjNlODVjODcyYTQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5j
bHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZpbGVTeXN0ZW0uaD4KIAogI2lmICFPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHN5cy9tbWFuLmg+
CkBAIC0zOSwyNiArMzgsMjMgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKIERhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBpbnQgZmQgPSBvcGVuKEZpbGVTeXN0ZW06OmZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIE9fQ1JFQVQgfCBPX0VYQ0wgfCBP
X1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQotICAgIGlmIChmdHJ1bmNhdGUoZmQsIG1fc2l6ZSkgPCAwKSB7Ci0gICAgICAg
IGNsb3NlKGZkKTsKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgs
IEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQ
ZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBpZiAoIUZpbGVTeXN0ZW06OnRydW5jYXRlRmlsZShoYW5k
bGUsIG1fc2l6ZSkpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAogICAgIEZpbGVTeXN0ZW06Om1ha2VTYWZl
VG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHBhdGgpOwotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxs
cHRyLCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsK
LSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGJv
b2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhh
bmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSwgRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZU1vZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAg
IEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAorICAgIHZvaWQqIG1hcCA9IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgp
KTsKICAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CiAg
ICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzU2l6
ZSkgewogICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVzU2l6ZSk7CkBAIC02Niw1
MiArNjIsMjMgQEAgRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25z
dAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIAorI2lmIE9TKFdJTkRPV1MpCisgICAg
RFdPUkQgb2xkUHJvdGVjdGlvbjsKKyAgICBWaXJ0dWFsUHJvdGVjdChtYXAsIG1fc2l6ZSwgRklM
RV9NQVBfUkVBRCwgJm9sZFByb3RlY3Rpb24pOworICAgIEZsdXNoVmlld09mRmlsZShtYXAsIG1f
c2l6ZSk7CisjZWxzZQogICAgIC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCiAgICAgbXBy
b3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CiAKICAgICAvLyBGbHVzaCAoYXN5bmNocm9u
b3VzbHkpIHRvIGZpbGUsIHR1cm5pbmcgdGhpcyBpbnRvIGNsZWFuIG1lbW9yeS4KICAgICBtc3lu
YyhtYXAsIG1fc2l6ZSwgTVNfQVNZTkMpOwotCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1h
cCwgbV9zaXplLCBmZCk7Ci19Ci0jZWxzZQotRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoKSBjb25zdAotewotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxl
KHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmICghRmlsZVN5
c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAo
RmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oZGF0YSgpKSwgc2l6ZSgpKSA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJu
IERhdGEoVmVjdG9yPHVpbnQ4X3Q+KG1fYnVmZmVyKSk7Ci19CiAjZW5kaWYKIAotI2lmICFPUyhX
SU5ET1dTKQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZkID0g
b3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQpIDwg
MCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAg
IHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICBj
bG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwotICAgIH0KLQotICAgIHJl
dHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOworICAgIHJldHVybiBEYXRhOjphZG9w
dE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2VuZGlmCiAKLURhdGEgbWFw
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCitEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkK
IHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0byBmaWxl
ID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpS
ZWFkKTsKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAgICAgICAg
IHJldHVybiB7IH07CkBAIC0xMTksMzEgKzg2LDI4IEBAIERhdGEgbWFwRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgpCiAgICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBzaXplKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZpbGUsIDAs
IHNpemUpOwotI2VuZGlmCiB9CiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBG
aWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhIG1hcEZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06OmZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworfQorCitEYXRhIGFkb3B0QW5kTWFw
RmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qgb2Zmc2V0
LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOwor
ICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIERh
dGE6OmVtcHR5KCk7CiAgICAgfQotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXpl
LCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09IE1B
UF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpSZWFkLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJpdmF0ZSwg
c3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBE
YXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZkKTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAo
V1RGTW92ZShtYXBwZWRGaWxlKSwgaGFuZGxlKTsKIH0KLSNlbHNlCi1EYXRhIGFkb3B0QW5kTWFw
RmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zmc2V0LCBzaXplKTsKLX0K
LSNlbmRpZgogCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSwgY29u
c3QgU2FsdCYgc2FsdCkKIHsKQEAgLTE3OSw0MCArMTQzLDI1IEBAIHN0YXRpYyBTYWx0IG1ha2VT
YWx0KCkKIAogT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRo
KQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIGF1dG8gY3BhdGggPSBGaWxlU3lzdGVtOjpmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgYXV0byBmZCA9IG9wZW4oY3BhdGguZGF0
YSgpLCBPX1JET05MWSwgMCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0g
cmVhZChmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7Ci0gICAg
aWYgKGJ5dGVzUmVhZCAhPSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0LnNpemUoKSkpIHsKLSAg
ICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7Ci0KLSAgICAgICAgdW5saW5rKGNwYXRoLmRhdGEoKSk7
Ci0gICAgICAgIGZkID0gb3BlbihjcGF0aC5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9f
VFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gd3JpdGUo
ZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSkgPT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4oc2Fs
dC5zaXplKCkpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGlmICghc3VjY2VzcykKKyAg
ICBpZiAoZmlsZUV4aXN0cyhwYXRoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVt
OjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgICAg
ICBTYWx0IHNhbHQ7CisgICAgICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZy
b21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5z
aXplKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAgICAgIGlm
IChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OworCisg
ICAgICAgIHJldHVybiBzYWx0OwogICAgIH0KLSAgICByZXR1cm4gc2FsdDsKLSNlbHNlCi0gICAg
YXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9w
ZW5Nb2RlOjpSZWFkKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBieXRlc1JlYWQgPSBGaWxl
U3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5k
YXRhKCkpLCBzYWx0LnNpemUoKSk7CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgpOworICAg
IGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsK
KyAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVy
cHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUo
KTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAh
PSBzYWx0LnNpemUoKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShwYXRoKTsKLSAgICAgICAgZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBG
aWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0
LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKLSAgICAgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KICAgICByZXR1cm4gc2FsdDsKLSNlbmRpZgogfQogCiB9IC8vIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggZDc4ZDk4YjYxNzUuLjM3YjU5NjY1
NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGEuaApAQCAtMzksNiArMzksMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dS
ZWZQdHJTb3VwLmg+CiAjZW5kaWYKIAorI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgPHd0Zi9Cb3gu
aD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBTaGFyZWRNZW1vcnk7CkBAIC01MywxOSArNTgsMTYgQEAgcHVibGljOgogICAg
IH5EYXRhKCkgeyB9CiAKICAgICBzdGF0aWMgRGF0YSBlbXB0eSgpOwotI2lmICFPUyhXSU5ET1dT
KQotICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90LCBpbnQgZmQpOwot
I2VuZGlmCisgICAgc3RhdGljIERhdGEgYWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGEmJiwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlKTsKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAgICAgRGF0YShP
U09iamVjdFB0cjxkaXNwYXRjaF9kYXRhX3Q+JiYsIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZmZXIp
OwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYs
IGludCBmZCA9IC0xKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgZXhwbGljaXQgRGF0YShWZWN0
b3I8dWludDhfdD4mJik7Ci0gICAgRGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUs
IHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CisgICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYs
IEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCA9IEZpbGVTeXN0ZW06OmludmFsaWRQ
bGF0Zm9ybUZpbGVIYW5kbGUpOworI2VsaWYgVVNFKENVUkwpCisgICAgRGF0YShWYXJpYW50PFZl
Y3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+JiYpOwogI2VuZGlmCiAg
ICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biAhbV9zaXplOyB9CkBAIC05NCwxMCArOTYsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogI2lmIFVT
RShTT1VQKQogICAgIG11dGFibGUgR1JlZlB0cjxTb3VwQnVmZmVyPiBtX2J1ZmZlcjsKLSAgICBp
bnQgbV9maWxlRGVzY3JpcHRvciB7IC0xIH07CisgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxl
SGFuZGxlIG1fZmlsZURlc2NyaXB0b3IgeyBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlIH07CiAjZW5kaWYKLSNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3Rvcjx1aW50OF90PiBt
X2J1ZmZlcjsKKyNpZiBVU0UoQ1VSTCkKKyAgICBCb3g8VmFyaWFudDxWZWN0b3I8dWludDhfdD4s
IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPj4gbV9idWZmZXI7CiAjZW5kaWYKICAgICBtdXRh
YmxlIGNvbnN0IHVpbnQ4X3QqIG1fZGF0YSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXpl
IHsgMCB9OwpAQCAtMTA2LDE3ICsxMDgsOCBAQCBwcml2YXRlOgogCiBEYXRhIGNvbmNhdGVuYXRl
KGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7CiBib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYs
IGNvbnN0IERhdGEmKTsKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGlu
dCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbHNlCiBEYXRhIGFkb3B0QW5kTWFwRmlsZShG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0j
ZW5kaWYKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURhdGEgYWRvcHRBbmRNYXBG
aWxlKEdGaWxlSU9TdHJlYW0qLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlmCi0jaWYg
IU9TKFdJTkRPV1MpCiBEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCk7Ci0jZW5kaWYKIERh
dGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogCiB1c2luZyBTYWx0ID0gc3RkOjphcnJh
eTx1aW50OF90LCA4PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KaW5kZXggNmEzOWY4ODcwMDguLmNi
NGFjMzhjNmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDEzIEBAIERh
dGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4g
eyBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0
YSgpLCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lk
KiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxl
SGFuZGxlIGZkKQogeworICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAg
dm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAg
ICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5
c3RlbTo6Y2xvc2VGaWxlKGZkKTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRp
c3BhdGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShE
SVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAg
ICBtdW5tYXAobWFwLCBzaXplKTsKICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4
IGNmNDMxNTZjNWEwLi4xOTI0ODJiZjlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKQEAgLTMw
LDQwICszMCw0MiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUg
ewogCiBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorICAgIDog
bV9idWZmZXIoQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YT4+OjpjcmVhdGUoVmVjdG9yPHVpbnQ4X3Q+KHNpemUpKSkKKyAgICAsIG1fc2l6ZShz
aXplKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwot
ICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIGRhdGEsIHNpemUpOworICAgIG1lbWNweShXVEY6
OmdldDxWZWN0b3I8dWludDhfdD4+KCptX2J1ZmZlcikuZGF0YSgpLCBkYXRhLCBzaXplKTsKIH0K
IAotRGF0YTo6RGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhOjpEYXRhKFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+
LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJiBkYXRhKQorICAgIDogbV9idWZmZXIoQm94
PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4+Ojpj
cmVhdGUoV1RGTW92ZShkYXRhKSkpCisgICAgLCBtX2lzTWFwKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+KCptX2J1ZmZlcikpCiB7Ci0gICAgbV9idWZm
ZXIucmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgRmlsZVN5c3RlbTo6c2Vl
a0ZpbGUoZmlsZSwgb2Zmc2V0LCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdpbjo6QmVnaW5uaW5n
KTsKLSAgICBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4obV9idWZmZXIuZGF0YSgpKSwgc2l6ZSk7Ci0gICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGZpbGUpOwotfQotCi1EYXRhOjpEYXRhKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKLSAgICA6
IG1fYnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKLXsKLSAgICBtX3NpemUgPSBtX2J1ZmZlci5zaXpl
KCk7CisgICAgbV9zaXplID0gV1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAgIFtdKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKSAtPiBzaXplX3QgeyByZXR1cm4gYnVmZmVyLnNp
emUoKTsgfSwKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIG1h
cHBlZEZpbGUpIC0+IHNpemVfdCB7IHJldHVybiBtYXBwZWRGaWxlLnNpemUoKTsgfQorICAgICk7
CiB9CiAKIERhdGEgRGF0YTo6ZW1wdHkoKQogewotICAgIHJldHVybiB7IH07CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKIH0KIAog
Y29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYnVmZmVy
LmRhdGEoKTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKCptX2J1ZmZlciwKKyAgICAgICAgW10oY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIGJ1ZmZlci5k
YXRhKCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBt
YXBwZWRGaWxlKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4obWFwcGVkRmlsZS5kYXRhKCkpOyB9CisgICAgKTsKIH0KIAogYm9vbCBEYXRhOjpp
c051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5pc0VtcHR5KCk7CisgICAgcmV0
dXJuICFtX2J1ZmZlcjsKIH0KIAogYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29s
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKQEAgLTcxLDIxICs3Mywz
NyBAQCBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCos
IHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAogICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVyLnNpemUoKSk7CisgICAgcmV0dXJu
IGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6ZSgp
KTsKIH0KIAogRGF0YSBEYXRhOjpzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4geyBtX2J1ZmZlci5kYXRhKCkgKyBvZmZzZXQsIHNpemUgfTsK
KyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsg
ZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CiB9CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0
YSYgYSwgY29uc3QgRGF0YSYgYikKIHsKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGI7CisgICAgaWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhOworCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJ1ZmZlcihhLnNpemUoKSArIGIuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVm
ZmVyLmRhdGEoKSwgYS5kYXRhKCksIGEuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEo
KSArIGEuc2l6ZSgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOwogICAgIHJldHVybiBEYXRhKFdURk1v
dmUoYnVmZmVyKSk7CiB9CiAKK0RhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQp
Cit7CisgICAgQVNTRVJUKG1hcHBlZEZpbGUuZGF0YSgpKTsKKyAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUoZmQpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShtYXBwZWRGaWxlKSB9OworfQorCiB9
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFTb3VwLmNwcAppbmRleCA1MTVjMDllYmJmZC4uZDNiNzllMDE0YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YVNvdXAuY3BwCkBAIC00OCwxMSArNDgsMTEgQEAgRGF0YTo6RGF0YShjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtX2J1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZl
cl9uZXdfd2l0aF9vd25lcihjb3BpZWREYXRhLCBzaXplLCBjb3BpZWREYXRhLCBmYXN0RnJlZSkp
OwogfQogCi1EYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIGludCBmZCkK
K0RhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGZkKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICwgbV9maWxl
RGVzY3JpcHRvcihmZCkKICAgICAsIG1fc2l6ZShidWZmZXIgPyBidWZmZXItPmxlbmd0aCA6IDAp
Ci0gICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBmZCAhPSAtMSkKKyAgICAsIG1faXNNYXAobV9zaXpl
ICYmIEZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmQpKQogewogfQogCkBAIC0xMDgsMTIgKzEw
OCwxMiBAQCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAgICAgfk1hcFdyYXBwZXIoKQogICAgIHsKICAg
ICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7Ci0gICAgICAgIGNsb3NlKGZpbGVEZXNjcmlwdG9yKTsK
KyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGVEZXNjcmlwdG9yKTsKICAgICB9CiAK
ICAgICB2b2lkKiBtYXA7CiAgICAgc2l6ZV90IHNpemU7Ci0gICAgaW50IGZpbGVEZXNjcmlwdG9y
OworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlRGVzY3JpcHRvcjsKIH07
CiAKIHN0YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKQEAg
LTEyMSw4ICsxMjEsMTAgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVy
KiB3cmFwcGVyKQogICAgIGRlbGV0ZSB3cmFwcGVyOwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFw
KHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRNYXAoRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgZmQpCiB7CisgICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsK
KyAgICB2b2lkKiBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKICAgICBBU1NFUlQobWFw
KTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwogICAgIE1hcFdyYXBwZXIqIHdyYXBw
ZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6ZSwgZmQgfTsKQEAgLTEzMCwyMSArMTMyLDE0
IEBAIERhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQog
ICAgIHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSwgZmQgfTsKIH0KIAotI2lmIFVTRShHTElCKSAm
JiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVhbSogc3Ry
ZWFtLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBHSW5wdXRTdHJlYW0qIGlu
cHV0U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShzdHJl
YW0pKTsKLSAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19GSUxF
X0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKLSAgICByZXR1cm4gYWRvcHRBbmRNYXBG
aWxlKGZkLCBvZmZzZXQsIHNpemUpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgp
IHx8ICFpc01hcCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBTaGFy
ZWRNZW1vcnk6OndyYXBNYXAoY29uc3RfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1
ZmZlci0+bGVuZ3RoLCBtX2ZpbGVEZXNjcmlwdG9yKTsKKyAgICBHSW5wdXRTdHJlYW0qIGlucHV0
U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX2ZpbGVE
ZXNjcmlwdG9yKSk7CisgICAgaW50IGZkID0gZ19maWxlX2Rlc2NyaXB0b3JfYmFzZWRfZ2V0X2Zk
KEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKGlucHV0U3RyZWFtKSk7CisgICAgcmV0dXJuIFNoYXJl
ZE1lbW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVm
ZmVyLT5sZW5ndGgsIGZkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVGaWxlU3lzdGVtLmNwcAppbmRleCBiZTg0MzcxYTg2My4uN2EwZWM1ZTE0ZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmls
ZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0
aWMgRGlyZWN0b3J5RW50cnlUeXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQot
ewotICAgIHN3aXRjaCAoZHR5cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJu
IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAg
ICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBl
OjpGaWxlOwotICAgIH0KLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQot
I2VuZGlmCi0KIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVu
Y3Rpb24pCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICgh
ZGlyKQotICAgICAgICByZXR1cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0g
cmVhZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAt
PmRfdHlwZSAhPSBEVF9SRUcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3Qg
Y2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikg
fHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBh
dXRvIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFt
ZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlv
bihuYW1lU3RyaW5nLCBkaXJlY3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAg
ICBjbG9zZWRpcihkaXIpOwotI2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjps
aXN0RGlyZWN0b3J5KHBhdGgpOworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCwgIioiX3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7
CiAgICAgICAgIGF1dG8gdHlwZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwg
RmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50
cnlUeXBlOjpEaXJlY3RvcnkgOiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1
bmN0aW9uKGVudHJ5LCB0eXBlKTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdl
dEZpbGVOYW1lKGVudHJ5KSwgdHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRl
RGlyZWN0b3J5UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390698</attachid>
            <date>2020-02-13 15:38:39 -0800</date>
            <delta_ts>2020-02-18 18:48:15 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>34076</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzhjY2U1NDExMS4uOGZiMzJkMjU2MTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGQ3N2M0Y2I5OGQuLmNhNmNjMzRmNDI3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTgzOCw3ICs4MzgsMjAgQEAgd2Via2l0Lm9yZy9iLzIwNTQ4NSBmYXN0L3RleHQvc3RhbGUt
VGV4dExheW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBbIEltYWdlT25seUYKIAogaHR0cC90ZXN0
cy9hcHBjYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9ibGluay9zZW5kYmVhY29uIFsgU2tpcCBd
Ci1odHRwL3Rlc3RzL2NhY2hlIFsgU2tpcCBdCisKKyMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9u
CitodHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMuaHRtbCBbIEZhaWx1
cmUgXQorCisjIGZhaWxzIGJlY2F1c2Ugb2YgY29udmVyc2lvbiB0byBlcG9jaCBiZWhhdmlvciBz
cGVjaWZpYyB0byBNYWMKK2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLWxh
c3QtbW9kaWZpZWQuaHRtbCBbIEZhaWx1cmUgXQorCisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlv
bgoraHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KK2h0
dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxpZGF0aW9uLmh0bWwgWyBG
YWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUtaWZyYW1lLmh0bWwg
WyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUuaHRtbCBbIEZh
aWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3QtcmV0dXJucy1udWxsLWZv
ci1tZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYW52YXMgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3ggWyBTa2lwIF0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZmNlOTYy
NjZiMWQuLjQxMGI3YzE0NGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIwLTAxLTMwICBDaHJp
c3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBs
ZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5oOgorICAgICAgICBB
ZGRlZCBGaWxlQWNjZXNzUGVybWlzc2lvbiBmbGFnIHdoZW4gb3BlbmluZyBmaWxlcy4KKyAgICAg
ICAgUmVtb3ZlIGRlZmF1bHQgYXJndW1lbnQgZm9yIHRoZSBsaXN0RGlyZWN0b3J5IGZpbHRlciBz
aW5jZSB0aGUgZGVmYXV0CisgICAgICAgIFN0cmluZygpIGZpbHRlciBkb2Vzbid0IG1hdGNoIGFs
bCBmaWxlcyBvbiBNYWMgYW5kIFdpbmRvd3MuCisKKyAgICAgICAgKiB3dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHA6CisgICAgICAgICogd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6Cisg
ICAgICAgIEFkZGVkIChTX0lSVVNSIHwgU19JV1VTUikgZmlsZSBvcGVuIG1vZGVzLgorCisgICAg
ICAgICogd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgSW1wbGVtZW50IGdldFZv
bHVtZUZyZWVTcGFjZSBzaW5jZSBzb21lIG9mIHRoZSB0ZXN0cyB1c2UgaXQgd2hlbiB0b2dnbGlu
ZyBjYWNoZS4KKyAgICAgICAgCisgICAgICAgICogd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcDoKKwog
MjAyMC0wMS0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNl
IGV2ZW4gbW9yZSAic2hvcnRlc3QgZm9ybSIgZm9ybWF0dGluZywgYW5kIGxlc3MgImZpeGVkIHBy
ZWNpc2lvbiIgYW5kICJmaXhlZCB3aWR0aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uY3BwIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKaW5kZXggNzJmOTUz
ZWFiM2YuLmYzNmNkZDI1MWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcApAQCAtMjg3LDE3ICsyODcs
MTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiAgICAgdW5tYXBWaWV3T2ZG
aWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOwogfQogCi0jaWYgSEFWRShNTUFQKQotCi1NYXBw
ZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVk
RmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK01hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxl
RGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29s
JiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxlUGF0aCwgRmlsZU9wZW5N
b2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwg
bW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAgICAgY2xvc2VGaWxlKGZkKTsKIH0KIAotYm9vbCBN
YXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBN
YXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhBVkUoTU1BUCkKKworYm9vbCBNYXBwZWRGaWxlRGF0
YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUg
b3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZh
bGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNCw3ICszMjQsMjEgQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfRklMRSB8IChtb2Rl
ID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBm
ZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIHN3aXRjaCAo
b3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVBy
b3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5N
b2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1dSSVRFOworICAgICAg
ICBicmVhazsKKyNpZiBPUyhEQVJXSU4pCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09u
bHk6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQorCisgICAg
dm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgcGFnZVByb3RlY3Rpb24sIE1BUF9GSUxFIHwgKG1h
cE1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJlZCA/IE1BUF9TSEFSRUQgOiBNQVBfUFJJVkFU
RSksIGZkLCAwKTsKIAogICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oIGIvU291
cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCmluZGV4IDgwNWEwZTRiMTZmLi4wMjQxYTQ4ZjBjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uaApAQCAtODQsNiArODQsMTEgQEAgZW51bSBjbGFzcyBGaWxlT3Blbk1v
ZGUgewogI2VuZGlmCiB9OwogCitlbnVtIGNsYXNzIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIDogYm9v
bCB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0gY2xhc3MgRmlsZVNlZWtPcmlnaW4g
ewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAtMTMxLDcgKzEzNiw3IEBAIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3VwKCk7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNsdWRlZCBmcm9tIGJhY2t1cC4KIGJv
b2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7IC8vIFJldHVybnMgdHJ1ZSBpZiBz
dWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyID0gU3RyaW5nKCkp
OworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7CiAKIFdURl9FWFBPUlRfUFJJVkFU
RSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmKTsKIFN0cmlu
ZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqKTsKQEAgLTE0
MCw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZhbGlkKGNvbnN0IFBsYXRmb3JtRmls
ZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0gaQogCiAvLyBQcmVmaXggaXMgd2hh
dCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGgsIG5vdCB0aGUgZnVsbCBwYXRo
LgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJp
bmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
KTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uID0gRmlsZUFj
Y2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbG9zZUZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGZy
b20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNjZXNzZnVsLCAtMSBvdGhlcndpc2Uu
CiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwpAQCAtMjA2LDYgKzIxMSw3IEBA
IHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmKTsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFw
cGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBNYXBw
ZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNj
ZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxl
SGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFwcGVkRmlsZURh
dGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApAQCAtMjE2LDE1ICsyMjIsMjAgQEAg
cHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
ZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhh
bmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7CiAKICAgICB2b2lkKiBtX2ZpbGVE
YXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmlsZVNpemUgeyAwIH07CiB9OwogCi1p
bmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCitpbmxpbmUgTWFwcGVk
RmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgc3VjY2VzcyA9IG1hcEZp
bGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1vZGUpOworfQorCitpbmxp
bmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYg
c3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUsIG1vZGUpOwor
ICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgb3Blbk1vZGUsIG1hcE1vZGUpOwog
fQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRh
JiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmluZGV4IDg2YzA0
ZjlkNWUxLi5kNzlhODU0Mzc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9GaWxl
U3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5j
cHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3Ry
aW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIG9w
ZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwg
RmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsKICAgICBhdXRvIGZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAgIGlmICghdmFsaWRSZXByZXNlbnRh
dGlvbihmaWxlbmFtZSkpCkBAIC0zNTEsOCArMzUxLDEwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBv
cGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgIGVsc2Ug
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgewogICAgICAgICBpZiAoZ19maWxlX3Rl
c3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VY
SVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKICAgICAgICAgICAgIGlvU3RyZWFtID0g
YWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdf
ZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVs
bHB0ciwgbnVsbHB0cikpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdGaWxlQ3JlYXRl
RmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lv
bjo6QWxsKSA/IEdfRklMRV9DUkVBVEVfTk9ORSA6IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKyAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZp
bGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICByZXR1cm4gaW9TdHJlYW0ubGVha1JlZigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggMjc4Mzk4ODNhMWEuLjU2NjAwNTMyYTUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcg
QEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5r
ZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1p
c3Npb24pCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKIApAQCAtODcsMTYgKzg3LDI3IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICByZXR1cm4gaW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKIAogICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOwotICAg
IGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZCkKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRP
TkxZOwotICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgogICAgICAgICBwbGF0Zm9ybUZs
YWcgfD0gKE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKICNp
ZiBPUyhEQVJXSU4pCi0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09u
bHkpCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHk6CiAgICAgICAgIHBsYXRmb3Jt
RmxhZyB8PSBPX0VWVE9OTFk7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCisgICAgfQorCisgICAg
aW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNz
UGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBT
X0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9u
OjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUiB8IFNf
SVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgpOwogCi0gICAgcmV0dXJuIG9wZW4o
ZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIDA2NjYpOworICAgIHJldHVybiBvcGVuKGZzUmVw
LmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJtaXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQgY2xvc2VG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1X
aW4uY3BwCmluZGV4IDU4NTQwZGI3OGM4Li44YzYzODI2MWU3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcApAQCAtNDE5LDcgKzQxOSw3IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5
RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1
cm4gcHJvcG9zZWRQYXRoOwogfQogCi1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVu
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVy
bWlzc2lvbikKIHsKICAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gMDsKICAgICBEV09SRCBjcmVh
dGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQzNCw4ICs0MzQsNiBAQCBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAg
ICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfV1JJVEU7CiAgICAgICAgIGNyZWF0aW9uRGlzcG9z
aXRpb24gPSBDUkVBVEVfQUxXQVlTOwogICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBTdHJpbmcgZGVzdGluYXRp
b24gPSBwYXRoOwpAQCAtNTQ3LDkgKzU0NSwxNCBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICBy
ZXR1cm4gZW50cmllczsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5n
JiwgdWludDY0X3QmKQorYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRo
LCB1aW50NjRfdCYgZnJlZVNwYWNlKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBVTEFSR0Vf
SU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlcjsKKyAgICBpZiAoIUdldERpc2tGcmVl
U3BhY2VFeFcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgJmZyZWVCeXRlc0F2YWlsYWJs
ZVRvQ2FsbGVyLCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZnJlZVNwYWNlID0gZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIuUXVhZFBhcnQ7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChjb25z
dCBDU3RyaW5nJiBmc0ZpbGUpCkBAIC02MDEsMTUgKzYwNCw3IEBAIGJvb2wgdW5tYXBWaWV3T2ZG
aWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQogICAgIHJldHVybiBVbm1hcFZpZXdPZkZpbGUoYnVm
ZmVyKTsKIH0KIAotTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCi17Ci0gICAgYXV0
byBmaWxlID0gQ3JlYXRlRmlsZShmaWxlUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgR0VO
RVJJQ19SRUFELCAwLCBudWxscHRyLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JN
QUwsIG51bGxwdHIpOwotCi0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmlsZSwgbW9kZSk7
Ci0gICAgY2xvc2VGaWxlKGZpbGUpOwotfQotCi1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlKQorYm9vbCBN
YXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBG
aWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKQogewogICAgIGlmICghaXNIYW5k
bGVWYWxpZChoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjMsMTEgKzYxOCwy
NCBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBhdXRvIG1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsIG51bGxwdHIsIFBB
R0VfUkVBRE9OTFksIDAsIDAsIG51bGxwdHIpOworICAgIERXT1JEIHBhZ2VQcm90ZWN0aW9uID0g
UEFHRV9SRUFET05MWTsKKyAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfUkVBRDsK
KyAgICBzd2l0Y2ggKG9wZW5Nb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6Cisg
ICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICAgICAgZGVzaXJlZEFj
Y2VzcyA9IEZJTEVfTUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5N
b2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURXUklURTsKKyAg
ICAgICAgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1dSSVRFOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBhdXRvIG1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsIG51bGxw
dHIsIHBhZ2VQcm90ZWN0aW9uLCAwLCAwLCBudWxscHRyKTsKICAgICBpZiAoIW1hcHBpbmcpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZmlsZURhdGEgPSBNYXBWaWV3T2ZGaWxlKG1h
cHBpbmcsIEZJTEVfTUFQX1JFQUQsIDAsIDAsIHNpemUpOworICAgIG1fZmlsZURhdGEgPSBNYXBW
aWV3T2ZGaWxlKG1hcHBpbmcsIGRlc2lyZWRBY2Nlc3MsIDAsIDAsIHNpemUpOwogICAgIENsb3Nl
SGFuZGxlKG1hcHBpbmcpOwogICAgIGlmICghbV9maWxlRGF0YSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwIGIvU291
cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCmluZGV4IDhkN2Q3YWM2ODM4Li42ODhmZWRk
NTlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVj
dG9yeSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0
b3J5ICsgIlxcIiArIHBhdHRlcm47CisgICAgU3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVj
dG9yeSwgJ1xcJywgcGF0dGVybik7CiAgICAgbV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBh
dGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMw
YTc0YzBkOTE3Li44ZTU4NmJjOWQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMC0w
MS0zMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAg
W1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk3Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIEVuc3Vy
ZSB0aGF0IHRoZSBDYWNoZVN0b3JhZ2UgZGlyZWN0b3J5IGlzIGFjdHVhbGx5IGJlaW5nIGNyZWF0
ZWQuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNw
cDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmg6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcDoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNw
cDoKKyAgICAgICAgVXNlIG1vcmUgRmlsZVN5c3RlbSBmdW5jdGlvbmFsaXR5IHRvIHNoYXJlIGNv
ZGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFDdXJsLmNwcDoKKyAgICAgICAgVXNlIE9wdGlvbmFsPFZlY3Rvcj4gZm9y
IG1fYnVmZmVyIHNpbmNlIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBpc0VtcHR5IGFuZCBpc051
bGwuCisKIDIwMjAtMDEtMTQgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29t
PgogCiAgICAgICAgIFdlYlBhc3RlYm9hcmRQcm94eVdQRSBzaG91bGQgYmUgV2ViUGFzdGVib2Fy
ZFByb3h5TGliV1BFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCmluZGV4IDM5OTI2ZWI2YWE4Li4wNDFlN2Q5NGMxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQzMiw4ICs0MzIs
MTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW4KICAgICBhdXRvIGlzTmV3RW50cnkgPSBtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1b3Rh
LCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0gewogICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwg
ZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9KS5pc05ld0VudHJ5
OwotICAgIGlmIChpc05ld0VudHJ5KQorICAgIGlmIChpc05ld0VudHJ5KSB7CiAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQYXRoSGFuZGxlKTsK
KyAgICAgICAgaWYgKCFjYWNoZVJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBvc3RT
dG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3JrUHJvY2Vzczo6
ZW5zdXJlUGF0aEV4aXN0cywgY2FjaGVSb290UGF0aCkpOworICAgIH0KIH0KIAogdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVhYTkwNWFiNjguLjNlODVjODcyYTQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGZjbnRsLmg+
CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmICFPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CkBAIC0zOSwyNiArMzgsMjMgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNl
IE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKIERhdGEgRGF0YTo6bWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBpbnQgZmQgPSBvcGVuKEZpbGVTeXN0
ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIE9fQ1JFQVQgfCBPX0VY
Q0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChmdHJ1bmNhdGUoZmQsIG1fc2l6ZSkgPCAwKSB7Ci0g
ICAgICAgIGNsb3NlKGZkKTsKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxl
KHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVB
Y2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBpZiAoIUZpbGVTeXN0ZW06OnRydW5jYXRlRmls
ZShoYW5kbGUsIG1fc2l6ZSkpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRs
ZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAogICAgIEZpbGVTeXN0ZW06Om1h
a2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHBhdGgpOwotCi0gICAgdm9pZCogbWFwID0gbW1h
cChudWxscHRyLCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZk
LCAwKTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2UoZmQpOwor
ICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRG
aWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSwgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZU1vZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAorICAgIHZvaWQqIG1hcCA9IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUu
ZGF0YSgpKTsKICAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1h
cCk7CiAgICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5
dGVzU2l6ZSkgewogICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVzU2l6ZSk7CkBA
IC02Niw1MiArNjIsMjMgQEAgRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIAorI2lmIE9TKFdJTkRPV1Mp
CisgICAgRFdPUkQgb2xkUHJvdGVjdGlvbjsKKyAgICBWaXJ0dWFsUHJvdGVjdChtYXAsIG1fc2l6
ZSwgRklMRV9NQVBfUkVBRCwgJm9sZFByb3RlY3Rpb24pOworICAgIEZsdXNoVmlld09mRmlsZSht
YXAsIG1fc2l6ZSk7CisjZWxzZQogICAgIC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCiAg
ICAgbXByb3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CiAKICAgICAvLyBGbHVzaCAoYXN5
bmNocm9ub3VzbHkpIHRvIGZpbGUsIHR1cm5pbmcgdGhpcyBpbnRvIGNsZWFuIG1lbW9yeS4KICAg
ICBtc3luYyhtYXAsIG1fc2l6ZSwgTVNfQVNZTkMpOwotCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0
TWFwKG1hcCwgbV9zaXplLCBmZCk7Ci19Ci0jZWxzZQotRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKSBjb25zdAotewotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9w
ZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmICgh
RmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBpZiAoRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YSgpKSwgc2l6ZSgpKSA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
cmV0dXJuIERhdGEoVmVjdG9yPHVpbnQ4X3Q+KG1fYnVmZmVyKSk7Ci19CiAjZW5kaWYKIAotI2lm
ICFPUyhXSU5ET1dTKQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50
IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0
YXQpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGlmICghc2l6ZSkgewotICAg
ICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOworICAgIHJldHVybiBEYXRh
OjphZG9wdE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2VuZGlmCiAKLURh
dGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCitEYXRhIG1hcEZpbGUoY29uc3QgY2hhciog
cGF0aCkKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVt
OjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0
byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5N
b2RlOjpSZWFkKTsKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAg
ICAgICAgIHJldHVybiB7IH07CkBAIC0xMTksMzEgKzg2LDI4IEBAIERhdGEgbWFwRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBz
aXplKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZp
bGUsIDAsIHNpemUpOwotI2VuZGlmCiB9CiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRB
bmRNYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhIG1hcEZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworfQorCitEYXRhIGFkb3B0
QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2Uo
ZmQpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0
dXJuIERhdGE6OmVtcHR5KCk7CiAgICAgfQotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRy
LCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFw
ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsK
KyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5
c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJp
dmF0ZSwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06
OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJl
dHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZkKTsKKyAgICByZXR1cm4gRGF0YTo6YWRv
cHRNYXAoV1RGTW92ZShtYXBwZWRGaWxlKSwgaGFuZGxlKTsKIH0KLSNlbHNlCi1EYXRhIGFkb3B0
QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9m
ZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zmc2V0LCBzaXpl
KTsKLX0KLSNlbmRpZgogCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0
YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKQEAgLTE3OSw0MCArMTQzLDI1IEBAIHN0YXRpYyBTYWx0
IG1ha2VTYWx0KCkKIAogT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5n
JiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIGF1dG8gY3BhdGggPSBGaWxlU3lzdGVt
OjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgYXV0byBmZCA9IG9wZW4oY3Bh
dGguZGF0YSgpLCBPX1JET05MWSwgMCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNS
ZWFkID0gcmVhZChmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7
Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0LnNpemUoKSkp
IHsKLSAgICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7Ci0KLSAgICAgICAgdW5saW5rKGNwYXRoLmRh
dGEoKSk7Ci0gICAgICAgIGZkID0gb3BlbihjcGF0aC5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVB
VCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0g
d3JpdGUoZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSkgPT0gc3RhdGljX2Nhc3Q8c3NpemVf
dD4oc2FsdC5zaXplKCkpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGlmICghc3VjY2Vz
cykKKyAgICBpZiAoZmlsZUV4aXN0cyhwYXRoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwor
ICAgICAgICBTYWx0IHNhbHQ7CisgICAgICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6
cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwg
c2FsdC5zaXplKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAg
ICAgIGlmIChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9
OworCisgICAgICAgIHJldHVybiBzYWx0OwogICAgIH0KLSAgICByZXR1cm4gc2FsdDsKLSNlbHNl
Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBieXRlc1JlYWQg
PSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
c2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgp
OworICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpV
c2VyKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0
LnNpemUoKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgaWYgKGJ5dGVz
UmVhZCAhPSBzYWx0LnNpemUoKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6
ZGVsZXRlRmlsZShwYXRoKTsKLSAgICAgICAgZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBh
dGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgICAgICBib29sIHN1Y2Nl
c3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIq
PihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKLSAgICAgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KICAgICByZXR1cm4gc2FsdDsKLSNlbmRpZgogfQogCiB9
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggZDc4ZDk4YjYxNzUuLjM3
YjU5NjY1NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuaApAQCAtMzksNiArMzksMTEgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0dSZWZQdHJTb3VwLmg+CiAjZW5kaWYKIAorI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgPHd0
Zi9Cb3guaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBTaGFyZWRNZW1vcnk7CkBAIC01MywxOSArNTgsMTYgQEAgcHVibGlj
OgogICAgIH5EYXRhKCkgeyB9CiAKICAgICBzdGF0aWMgRGF0YSBlbXB0eSgpOwotI2lmICFPUyhX
SU5ET1dTKQotICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90LCBpbnQg
ZmQpOwotI2VuZGlmCisgICAgc3RhdGljIERhdGEgYWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZURhdGEmJiwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlKTsKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIGVudW0gY2xhc3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAgICAg
RGF0YShPU09iamVjdFB0cjxkaXNwYXRjaF9kYXRhX3Q+JiYsIEJhY2tpbmcgPSBCYWNraW5nOjpC
dWZmZXIpOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgRGF0YShHUmVmUHRyPFNvdXBCdWZm
ZXI+JiYsIGludCBmZCA9IC0xKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgZXhwbGljaXQgRGF0
YShWZWN0b3I8dWludDhfdD4mJik7Ci0gICAgRGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7CisgICAgRGF0YShHUmVmUHRyPFNvdXBCdWZm
ZXI+JiYsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCA9IEZpbGVTeXN0ZW06Omlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpOworI2VsaWYgVVNFKENVUkwpCisgICAgRGF0YShWYXJp
YW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+JiYpOwogI2Vu
ZGlmCiAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiAhbV9zaXplOyB9CkBAIC05NCwxMCArOTYsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgog
I2lmIFVTRShTT1VQKQogICAgIG11dGFibGUgR1JlZlB0cjxTb3VwQnVmZmVyPiBtX2J1ZmZlcjsK
LSAgICBpbnQgbV9maWxlRGVzY3JpcHRvciB7IC0xIH07CisgICAgRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlIG1fZmlsZURlc2NyaXB0b3IgeyBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlIH07CiAjZW5kaWYKLSNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3Rvcjx1aW50
OF90PiBtX2J1ZmZlcjsKKyNpZiBVU0UoQ1VSTCkKKyAgICBCb3g8VmFyaWFudDxWZWN0b3I8dWlu
dDhfdD4sIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPj4gbV9idWZmZXI7CiAjZW5kaWYKICAg
ICBtdXRhYmxlIGNvbnN0IHVpbnQ4X3QqIG1fZGF0YSB7IG51bGxwdHIgfTsKICAgICBzaXplX3Qg
bV9zaXplIHsgMCB9OwpAQCAtMTA2LDE3ICsxMDgsOCBAQCBwcml2YXRlOgogCiBEYXRhIGNvbmNh
dGVuYXRlKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7CiBib29sIGJ5dGVzRXF1YWwoY29uc3Qg
RGF0YSYsIGNvbnN0IERhdGEmKTsKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBG
aWxlKGludCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbHNlCiBEYXRhIGFkb3B0QW5kTWFw
RmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVf
dCk7Ci0jZW5kaWYKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURhdGEgYWRvcHRB
bmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0qLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlm
Ci0jaWYgIU9TKFdJTkRPV1MpCiBEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCk7Ci0jZW5k
aWYKIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogCiB1c2luZyBTYWx0ID0gc3Rk
OjphcnJheTx1aW50OF90LCA4PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KaW5kZXggNmEzOWY4ODcw
MDguLmNiNGFjMzhjNmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDEz
IEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICBy
ZXR1cm4geyBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3Bh
dGNoRGF0YSgpLCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1h
cCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlIGZkKQogeworICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7
CisgICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1h
cCk7CiAgICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2Jq
ZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewog
ICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3Bw
CmluZGV4IGNmNDMxNTZjNWEwLi4xOTI0ODJiZjlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAK
QEAgLTMwLDQwICszMCw0MiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgewogCiBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQor
ICAgIDogbV9idWZmZXIoQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YT4+OjpjcmVhdGUoVmVjdG9yPHVpbnQ4X3Q+KHNpemUpKSkKKyAgICAsIG1f
c2l6ZShzaXplKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBz
aXplOwotICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIGRhdGEsIHNpemUpOworICAgIG1lbWNw
eShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KCptX2J1ZmZlcikuZGF0YSgpLCBkYXRhLCBzaXpl
KTsKIH0KIAotRGF0YTo6RGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwg
c2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhOjpEYXRhKFZhcmlhbnQ8VmVjdG9yPHVp
bnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJiBkYXRhKQorICAgIDogbV9idWZm
ZXIoQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YT4+OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpCisgICAgLCBtX2lzTWFwKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+KCptX2J1ZmZlcikpCiB7Ci0gICAg
bV9idWZmZXIucmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgRmlsZVN5c3Rl
bTo6c2Vla0ZpbGUoZmlsZSwgb2Zmc2V0LCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdpbjo6QmVn
aW5uaW5nKTsKLSAgICBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4obV9idWZmZXIuZGF0YSgpKSwgc2l6ZSk7Ci0gICAgRmlsZVN5c3RlbTo6Y2xv
c2VGaWxlKGZpbGUpOwotfQotCi1EYXRhOjpEYXRhKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikK
LSAgICA6IG1fYnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKLXsKLSAgICBtX3NpemUgPSBtX2J1ZmZl
ci5zaXplKCk7CisgICAgbV9zaXplID0gV1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAg
IFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKSAtPiBzaXplX3QgeyByZXR1cm4gYnVm
ZmVyLnNpemUoKTsgfSwKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGEmIG1hcHBlZEZpbGUpIC0+IHNpemVfdCB7IHJldHVybiBtYXBwZWRGaWxlLnNpemUoKTsgfQor
ICAgICk7CiB9CiAKIERhdGEgRGF0YTo6ZW1wdHkoKQogewotICAgIHJldHVybiB7IH07CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlcikgfTsK
IH0KIAogY29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
YnVmZmVyLmRhdGEoKTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKCptX2J1ZmZlciwKKyAgICAgICAgW10oY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIGJ1
ZmZlci5kYXRhKCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhJiBtYXBwZWRGaWxlKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4obWFwcGVkRmlsZS5kYXRhKCkpOyB9CisgICAgKTsKIH0KIAogYm9vbCBE
YXRhOjppc051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5pc0VtcHR5KCk7Cisg
ICAgcmV0dXJuICFtX2J1ZmZlcjsKIH0KIAogYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlv
bjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKQEAgLTcxLDIx
ICs3MywzNyBAQCBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWlu
dDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAogICAgIGlmIChpc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVyLnNpemUoKSk7CisgICAg
cmV0dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwg
c2l6ZSgpKTsKIH0KIAogRGF0YSBEYXRhOjpzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qg
c2l6ZSkgY29uc3QKIHsKLSAgICByZXR1cm4geyBtX2J1ZmZlci5kYXRhKCkgKyBvZmZzZXQsIHNp
emUgfTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0
dXJuIHsgZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CiB9CiAKIERhdGEgY29uY2F0ZW5hdGUoY29u
c3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKIHsKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGI7CisgICAgaWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhOworCiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihhLnNpemUoKSArIGIuc2l6ZSgpKTsKICAgICBtZW1j
cHkoYnVmZmVyLmRhdGEoKSwgYS5kYXRhKCksIGEuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVy
LmRhdGEoKSArIGEuc2l6ZSgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOwogICAgIHJldHVybiBEYXRh
KFdURk1vdmUoYnVmZmVyKSk7CiB9CiAKK0RhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5k
bGUgZmQpCit7CisgICAgQVNTRVJUKG1hcHBlZEZpbGUuZGF0YSgpKTsKKyAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoZmQpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShtYXBwZWRGaWxlKSB9Owor
fQorCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFTb3VwLmNwcAppbmRleCA1MTVjMDllYmJmZC4uZDNiNzllMDE0YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YVNvdXAuY3BwCkBAIC00OCwxMSArNDgsMTEgQEAgRGF0YTo6RGF0YShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtX2J1ZmZlciA9IGFkb3B0R1JlZihzb3Vw
X2J1ZmZlcl9uZXdfd2l0aF9vd25lcihjb3BpZWREYXRhLCBzaXplLCBjb3BpZWREYXRhLCBmYXN0
RnJlZSkpOwogfQogCi1EYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIGlu
dCBmZCkKK0RhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgRmlsZVN5c3Rl
bTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICwg
bV9maWxlRGVzY3JpcHRvcihmZCkKICAgICAsIG1fc2l6ZShidWZmZXIgPyBidWZmZXItPmxlbmd0
aCA6IDApCi0gICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBmZCAhPSAtMSkKKyAgICAsIG1faXNNYXAo
bV9zaXplICYmIEZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmQpKQogewogfQogCkBAIC0xMDgs
MTIgKzEwOCwxMiBAQCBzdHJ1Y3QgTWFwV3JhcHBlciB7CiAgICAgfk1hcFdyYXBwZXIoKQogICAg
IHsKICAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7Ci0gICAgICAgIGNsb3NlKGZpbGVEZXNjcmlw
dG9yKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGVEZXNjcmlwdG9yKTsKICAg
ICB9CiAKICAgICB2b2lkKiBtYXA7CiAgICAgc2l6ZV90IHNpemU7Ci0gICAgaW50IGZpbGVEZXNj
cmlwdG9yOworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlRGVzY3JpcHRv
cjsKIH07CiAKIHN0YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBl
cikKQEAgLTEyMSw4ICsxMjEsMTAgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBX
cmFwcGVyKiB3cmFwcGVyKQogICAgIGRlbGV0ZSB3cmFwcGVyOwogfQogCi1EYXRhIERhdGE6OmFk
b3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRN
YXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7CisgICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNp
emUoKTsKKyAgICB2b2lkKiBtYXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKICAgICBBU1NF
UlQobWFwKTsKICAgICBBU1NFUlQobWFwICE9IE1BUF9GQUlMRUQpOwogICAgIE1hcFdyYXBwZXIq
IHdyYXBwZXIgPSBuZXcgTWFwV3JhcHBlciB7IG1hcCwgc2l6ZSwgZmQgfTsKQEAgLTEzMCwyMSAr
MTMyLDE0IEBAIERhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50
IGZkKQogICAgIHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSwgZmQgfTsKIH0KIAotI2lmIFVTRShH
TElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVh
bSogc3RyZWFtLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBHSW5wdXRTdHJl
YW0qIGlucHV0U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVB
TShzdHJlYW0pKTsKLSAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQo
R19GSUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKLSAgICByZXR1cm4gYWRvcHRB
bmRNYXBGaWxlKGZkLCBvZmZzZXQsIHNpemUpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IERhdGE6OnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlz
TnVsbCgpIHx8ICFpc01hcCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBTaGFyZWRNZW1vcnk6OndyYXBNYXAoY29uc3RfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEp
LCBtX2J1ZmZlci0+bGVuZ3RoLCBtX2ZpbGVEZXNjcmlwdG9yKTsKKyAgICBHSW5wdXRTdHJlYW0q
IGlucHV0U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTSht
X2ZpbGVEZXNjcmlwdG9yKSk7CisgICAgaW50IGZkID0gZ19maWxlX2Rlc2NyaXB0b3JfYmFzZWRf
Z2V0X2ZkKEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKGlucHV0U3RyZWFtKSk7CisgICAgcmV0dXJu
IFNoYXJlZE1lbW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSks
IG1fYnVmZmVyLT5sZW5ndGgsIGZkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcAppbmRleCBiZTg0MzcxYTg2My4uN2EwZWM1ZTE0ZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1Mp
Ci1zdGF0aWMgRGlyZWN0b3J5RW50cnlUeXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0
eXBlKQotewotICAgIHN3aXRjaCAoZHR5cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAg
cmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgot
ICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50
cnlUeXBlOjpGaWxlOwotICAgIH0KLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxl
OwotfQotI2VuZGlmCi0KIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUp
PiYgZnVuY3Rpb24pCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGly
KEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAg
IGlmICghZGlyKQotICAgICAgICByZXR1cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAo
KGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIg
JiYgZHAtPmRfdHlwZSAhPSBEVF9SRUcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Y29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUs
ICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBhdXRvIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBp
ZiAobmFtZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBm
dW5jdGlvbihuYW1lU3RyaW5nLCBkaXJlY3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAg
IH0KLSAgICBjbG9zZWRpcihkaXIpOwotI2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lz
dGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgpOworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06
Omxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRy
aWVzKSB7CiAgICAgICAgIGF1dG8gdHlwZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShl
bnRyeSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0
b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkgOiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAg
ICAgIGZ1bmN0aW9uKGVudHJ5LCB0eXBlKTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6
cGF0aEdldEZpbGVOYW1lKGVudHJ5KSwgdHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQg
ZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391124</attachid>
            <date>2020-02-18 18:48:15 -0800</date>
            <delta_ts>2020-02-18 18:52:15 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>35135</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWE2MzVkNDViOTguLjM5YTg2NjVmNjAwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKwor
ICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBVcGRhdGUgV2ViR0wyIHJlc3Vs
dHMgd2l0aCBBTkdMRSBiYWNrZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA2ODZiN2M5ZDE3NWUuLjBiZGVlNTU0YTljNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTYx
LDcgKzExNjEsMjAgQEAgY3J5cHRvL3N1YnRsZS93cmFwLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVy
cy5odG1sIFsgU2tpcCBdCiAKIGh0dHAvdGVzdHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVz
dHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAgXQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQor
CisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgoraHR0cC90ZXN0cy9jYWNoZS9jYW5jZWwtbXVs
dGlwbGUtcG9zdC14aHJzLmh0bWwgWyBGYWlsdXJlIF0KKworIyBmYWlscyBiZWNhdXNlIG9mIGNv
bnZlcnNpb24gdG8gZXBvY2ggYmVoYXZpb3Igc3BlY2lmaWMgdG8gTWFjCitodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1sYXN0LW1vZGlmaWVkLmh0bWwgWyBGYWlsdXJlIF0K
KworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0dHAvdGVzdHMvY2FjaGUvaWZyYW1lLTMw
NC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL25ldHdvcmstZXJyb3It
ZHVyaW5nLXJldmFsaWRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL3Bh
cnRpdGlvbmVkLWNhY2hlLWlmcmFtZS5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hl
L3BhcnRpdGlvbmVkLWNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvd2ls
bHNlbmRyZXF1ZXN0LXJldHVybnMtbnVsbC1mb3ItbWVtb3J5LWNhY2hlLWxvYWQuaHRtbCBbIEZh
aWx1cmUgXQorCiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y2FudmFzIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRz
YW5kYm94IFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYxNzQ2NzEwYjFiZC4uN2NmNjgyYjE5NmVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI4IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBz
b255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5
IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6Cisg
ICAgICAgIEFkZGVkIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIGZsYWcgd2hlbiBvcGVuaW5nIGZpbGVz
LgorICAgICAgICBSZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgdGhlIGxpc3REaXJlY3Rvcnkg
ZmlsdGVyIHNpbmNlIHRoZSBkZWZhdXQKKyAgICAgICAgU3RyaW5nKCkgZmlsdGVyIGRvZXNuJ3Qg
bWF0Y2ggYWxsIGZpbGVzIG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICBBZGRlZCBGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSB0byBiZSB1c2VkIHdpdGggUmVhZFdyaXRlIE1hcHBlZEZpbGVE
YXRhLgorCisgICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAq
IHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICBBZGRlZCAoU19JUlVTUiB8
IFNfSVdVU1IpIGZpbGUgb3BlbiBtb2Rlcy4KKworICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3Rl
bVdpbi5jcHA6CisgICAgICAgIEltcGxlbWVudCBnZXRWb2x1bWVGcmVlU3BhY2Ugc2luY2Ugc29t
ZSBvZiB0aGUgdGVzdHMgdXNlIGl0IHdoZW4gdG9nZ2xpbmcgY2FjaGUuCisgICAgICAgIAorICAg
ICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisKIDIwMjAtMDItMTggIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBmcm9tICJsYXllciBm
bHVzaCIgdGVybWlub2xvZ3kgdG8gInJlbmRlcmluZyB1cGRhdGUiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IDcyZjk1M2VhYjNmYy4uODQ4NTIxZTI3MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9GaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcApA
QCAtMjg3LDE3ICsyODcsMTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiAg
ICAgdW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOwogfQogCi0jaWYgSEFW
RShNTUFQKQotCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK01hcHBlZEZpbGVE
YXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9k
ZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxl
UGF0aCwgRmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBh
dGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAgICBzdWNjZXNzID0gbWFw
RmlsZUhhbmRsZShmZCwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAgICAgY2xvc2VGaWxlKGZk
KTsKIH0KIAotYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhBVkUoTU1BUCkKKworYm9v
bCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUpCiB7CiAgICAg
aWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMy
NCw3ICszMjQsMjQgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFELCBN
QVBfRklMRSB8IChtb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDog
TUFQX1BSSVZBVEUpLCBmZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFE
OworICAgIHN3aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoK
KyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9U
X1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRl
OgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CisgICAg
ICAgIGJyZWFrOworI2lmIE9TKERBUldJTikKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6RXZlbnRz
T25seToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAo
bWFwTW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklW
QVRFKSwgZmQsIDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9T
b3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmZjLi43NjU4NGRiM2Ri
MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9GaWxlU3lzdGVtLmgKQEAgLTc5LDExICs3OSwxNyBAQCBjb25zdCBQbGF0Zm9ybUZp
bGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogZW51bSBjbGFzcyBGaWxl
T3Blbk1vZGUgewogICAgIFJlYWQsCiAgICAgV3JpdGUsCisgICAgUmVhZFdyaXRlLAogI2lmIE9T
KERBUldJTikKICAgICBFdmVudHNPbmx5LAogI2VuZGlmCiB9OwogCitlbnVtIGNsYXNzIEZpbGVB
Y2Nlc3NQZXJtaXNzaW9uIDogYm9vbCB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0g
Y2xhc3MgRmlsZVNlZWtPcmlnaW4gewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAt
MTMxLDcgKzEzNyw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVG
cm9tQmFja3VwKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNs
dWRlZCBmcm9tIGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7
IC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgZmlsdGVyID0gU3RyaW5nKCkpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+
IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7
CiAKIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmKTsKIFN0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGNvbnN0IGNoYXIqKTsKQEAgLTE0MCw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZh
bGlkKGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0g
aQogCiAvLyBQcmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdp
dGgsIG5vdCB0aGUgZnVsbCBwYXRoLgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVt
cG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVI
YW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nl
c3NQZXJtaXNzaW9uID0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRo
ZSByZXN1bHRpbmcgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNj
ZXNzZnVsLCAtMSBvdGhlcndpc2UuCiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4p
OwpAQCAtMjA2LDYgKzIxMiw3IEBAIHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRG
aWxlRGF0YSYmKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVk
RmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2Rl
LCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRh
KCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApA
QCAtMjE2LDE1ICsyMjMsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIE1hcHBlZEZpbGVNb2RlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7
CiAKICAgICB2b2lkKiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmls
ZVNpemUgeyAwIH07CiB9OwogCi1pbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRh
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1
Y2Nlc3MpCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7
CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBs
YXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmls
ZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhh
bmRsZShoYW5kbGUsIG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwg
b3Blbk1vZGUsIG1hcE1vZGUpOwogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZp
bGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwCmluZGV4IDg2YzA0ZjlkNWUxMy4uMWYzNDc5YWJjNmZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIFN0cmluZyBvcGVu
VGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBo
YW5kbGUpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOwogfQog
Ci1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSkKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiBwZXJtaXNzaW9uKQog
ewogICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CiAg
ICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKQEAgLTM0OCwxMSArMzQ4LDEz
IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVP
cGVuTW9kZSBtb2RlKQogICAgIEdSZWZQdHI8R0ZpbGVJT1N0cmVhbT4gaW9TdHJlYW07CiAgICAg
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkKQogICAgICAgICBpb1N0cmVhbSA9IGFkb3B0
R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikp
OwotICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgeworICAgIGVsc2Ug
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSB8fCBGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZSkgewogICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0aWNfY2Fz
dDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIp
KSkKICAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0
ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0
KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAocGVybWlz
c2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklMRV9DUkVBVEVfTk9ORSA6
IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVm
KGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxs
cHRyLCBudWxscHRyKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gaW9TdHJlYW0u
bGVha1JlZigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBP
U0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXgg
Mjc4Mzk4ODNhMWEyLi4xM2NiZjkxOWJjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcApAQCAtNzksNyArNzksNyBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoKQogICAgIHJldHVybiB1bmxpbmtlZDsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxl
IG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9y
bUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9k
ZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsKICAgICBDU3RyaW5nIGZzUmVw
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogCkBAIC04NywxNiArODcsMzAgQEAg
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlIG1vZGUpCiAgICAgICAgIHJldHVybiBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwogCiAg
ICAgaW50IHBsYXRmb3JtRmxhZyA9IDA7Ci0gICAgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpS
ZWFkKQorICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgog
ICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gT19SRE9OTFk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBG
aWxlT3Blbk1vZGU6OldyaXRlKQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9k
ZTo6V3JpdGU6CiAgICAgICAgIHBsYXRmb3JtRmxhZyB8PSAoT19XUk9OTFkgfCBPX0NSRUFUIHwg
T19UUlVOQyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3Jp
dGU6CisgICAgICAgIHBsYXRmb3JtRmxhZyB8PSAoT19SRFdSIHwgT19DUkVBVCk7CisgICAgICAg
IGJyZWFrOwogI2lmIE9TKERBUldJTikKLSAgICBlbHNlIGlmIChtb2RlID09IEZpbGVPcGVuTW9k
ZTo6RXZlbnRzT25seSkKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seToKICAgICAg
ICAgcGxhdGZvcm1GbGFnIHw9IE9fRVZUT05MWTsKKyAgICAgICAgYnJlYWs7CiAjZW5kaWYKKyAg
ICB9CisKKyAgICBpbnQgcGVybWlzc2lvbkZsYWcgPSAwOworICAgIGlmIChwZXJtaXNzaW9uID09
IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAo
U19JUlVTUiB8IFNfSVdVU1IpOworICAgIGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gRmlsZUFjY2Vz
c1Blcm1pc3Npb246OkFsbCkKKyAgICAgICAgcGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBT
X0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RIIHwgU19JV09USCk7CiAKLSAgICBy
ZXR1cm4gb3Blbihmc1JlcC5kYXRhKCksIHBsYXRmb3JtRmxhZywgMDY2Nik7CisgICAgcmV0dXJu
IG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIHBlcm1pc3Npb25GbGFnKTsKIH0KIAog
dm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4v
RmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggOTMzNGFjMDI5ZDU3Li4xZjAzOGU3YWIwODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTQyMSw3ICs0MjEsNyBAQCBTdHJpbmcg
b3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5k
bGUpCiAgICAgcmV0dXJuIHByb3Bvc2VkUGF0aDsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIG9w
ZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwg
RmlsZUFjY2Vzc1Blcm1pc3Npb24pCiB7CiAgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9IDA7CiAg
ICAgRFdPUkQgY3JlYXRpb25EaXNwb3NpdGlvbiA9IDA7CkBAIC00MzYsOCArNDM2LDEwIEBAIFBs
YXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9k
ZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19XUklURTsKICAgICAgICAg
Y3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CiAgICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGNhc2UgRmlsZU9w
ZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1JFQUQg
fCBHRU5FUklDX1dSSVRFOworICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gT1BFTl9BTFdB
WVM7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IHBh
dGg7CkBAIC01NDksOSArNTUxLDE0IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsdGVyKQogICAgIHJldHVybiBl
bnRyaWVzOwogfQogCi1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmLCB1aW50
NjRfdCYpCitib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2
NF90JiBmcmVlU3BhY2UpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFVMQVJHRV9JTlRFR0VS
IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4
VyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxs
ZXIsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVl
U3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJp
bmcmIGZzRmlsZSkKQEAgLTYwMywxNSArNjEwLDcgQEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9p
ZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwog
fQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUg
PSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JF
QUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVs
bHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBj
bG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUo
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZp
bGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVu
TW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlk
KGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyNSwxMSArNjI0LDI4IEBAIGJv
b2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1
dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFE
T05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdPUkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JF
QURPTkxZOworICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3
aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAg
cGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgICAgICBkZXNpcmVkQWNjZXNzID0g
RklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6Oldy
aXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBk
ZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9S
RUFEV1JJVEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURSB8IEZJTEVf
TUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9IENy
ZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAsIG51
bGxwdHIpOwogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwgMCwg
c2l6ZSk7CisgICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFj
Y2VzcywgMCwgMCwgc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYgKCFt
X2ZpbGVEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi93aW4vUGF0aFdhbGtlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5j
cHAKaW5kZXggOGQ3ZDdhYzY4Mzg1Li42ODhmZWRkNTlmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdh
bGtlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIFBhdGhXYWxrZXI6
OlBhdGhXYWxrZXIoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcGF0dGVy
bikKIHsKLSAgICBTdHJpbmcgcGF0aCA9IGRpcmVjdG9yeSArICJcXCIgKyBwYXR0ZXJuOworICAg
IFN0cmluZyBwYXRoID0gbWFrZVN0cmluZyhkaXJlY3RvcnksICdcXCcsIHBhdHRlcm4pOwogICAg
IG1faGFuZGxlID0gOjpGaW5kRmlyc3RGaWxlVyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgp
LCAmbV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2MTcyYWNkZDM0NjIuLjRjM2FkOTBlNTJhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wMi0xOCAgQ2hyaXN0b3BoZXIgUmVpZCAg
PGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtD
YWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAg
ICAgICAgRW5zdXJlIHRoYXQgdGhlIENhY2hlU3RvcmFnZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkg
YmVpbmcgY3JlYXRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q29jb2EubW06CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YVNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwOgorICAgICAgICBVc2UgbW9yZSBGaWxlU3lzdGVtIGZ1bmN0aW9uYWxpdHkg
dG8gc2hhcmUgY29kZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwOgorICAgICAgICBVc2UgT3B0aW9uYWw8
VmVjdG9yPiBmb3IgbV9idWZmZXIgc2luY2Ugd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGlzRW1w
dHkgYW5kIGlzTnVsbC4KKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5vbG9n
eSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTFkZjNiODBhMzZhLi5lNDQyMzRjNWU2NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBA
IC00NTQsOCArNDU0LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWluCiAgICAgYXV0byBpc05l
d0VudHJ5ID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwg
W2RlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgJmNhY2hlUm9vdFBhdGhdIHsK
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+KGNh
Y2hlUm9vdFBhdGgsIGRlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSk7CiAgICAg
fSkuaXNOZXdFbnRyeTsKLSAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICBpZiAoaXNOZXdFbnRyeSkg
ewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY2FjaGVSb290
UGF0aEhhbmRsZSk7CisgICAgICAgIGlmICghY2FjaGVSb290UGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0
d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGNhY2hlUm9vdFBhdGgpKTsKKyAgICB9CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCmluZGV4IDc1YWE5MDVhYjY4
YS4uNWJhZGY0OWQ5OTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lu
Y2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVt
YmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmICFPUyhXSU5ET1dTKQog
I2luY2x1ZGUgPHN5cy9tbWFuLmg+CkBAIC0zOSwyNiArMzgsMjMgQEAKIG5hbWVzcGFjZSBXZWJL
aXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKIERhdGEg
RGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBpbnQgZmQg
PSBvcGVuKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCks
IE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAgaWYg
KGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChmdHJ1bmNhdGUoZmQsIG1f
c2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVT
eXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRl
LCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcik7CisgICAgaWYgKCFGaWxl
U3lzdGVtOjp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBtX3NpemUpKSB7CisgICAgICAgIEZpbGVTeXN0
ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAK
ICAgICBGaWxlU3lzdGVtOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKTsKLQot
ICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dS
SVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0g
ICAgICAgIGNsb3NlKGZkKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEgbWFwcGVkRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsK
KyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRs
ZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgdm9pZCogbWFwID0gY29uc3Rf
Y2FzdDx2b2lkKj4obWFwcGVkRmlsZS5kYXRhKCkpOwogICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4obWFwKTsKICAgICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplKSB7CiAgICAgICAgIG1lbWNweShtYXBEYXRh
LCBieXRlcywgYnl0ZXNTaXplKTsKQEAgLTY2LDUyICs2MiwyMyBAQCBEYXRhIERhdGE6Om1hcFRv
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0pOwogCisjaWYgT1MoV0lORE9XUykKKyAgICBEV09SRCBvbGRQcm90ZWN0aW9uOworICAgIFZp
cnR1YWxQcm90ZWN0KG1hcCwgbV9zaXplLCBGSUxFX01BUF9SRUFELCAmb2xkUHJvdGVjdGlvbik7
CisgICAgRmx1c2hWaWV3T2ZGaWxlKG1hcCwgbV9zaXplKTsKKyNlbHNlCiAgICAgLy8gRHJvcCB0
aGUgd3JpdGUgcGVybWlzc2lvbi4KICAgICBtcHJvdGVjdChtYXAsIG1fc2l6ZSwgUFJPVF9SRUFE
KTsKIAogICAgIC8vIEZsdXNoIChhc3luY2hyb25vdXNseSkgdG8gZmlsZSwgdHVybmluZyB0aGlz
IGludG8gY2xlYW4gbWVtb3J5LgogICAgIG1zeW5jKG1hcCwgbV9zaXplLCBNU19BU1lOQyk7Ci0K
LSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBtX3NpemUsIGZkKTsKLX0KLSNlbHNlCi1E
YXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0Ci17Ci0gICAgYXV0
byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5N
b2RlOjpXcml0ZSk7Ci0gICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIGlmIChGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxl
LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpLCBzaXplKCkpIDwgMCkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gRGF0YShWZWN0b3I8dWludDhfdD4obV9idWZm
ZXIpKTsKLX0KICNlbmRpZgogCi0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIG1hcEZpbGUoY29uc3Qg
Y2hhciogcGF0aCkKLXsKLSAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAg
ICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7
Ci0gICAgaWYgKGZzdGF0KGZkLCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7
Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIERh
dGE6OmVtcHR5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgMCwg
c2l6ZSk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKFdURk1vdmUobWFwcGVkRmlsZSksIGhh
bmRsZSk7CiB9Ci0jZW5kaWYKIAotRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK0Rh
dGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIHJl
dHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCkpOwotI2Vsc2UKICAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRo
LCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwogICAgIGlmICghRmlsZVN5c3RlbTo6
aXNIYW5kbGVWYWxpZChmaWxlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExOSwzMSArODYs
MjggQEAgRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIUZpbGVTeXN0
ZW06OmdldEZpbGVTaXplKGZpbGUsIHNpemUpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJl
dHVybiBhZG9wdEFuZE1hcEZpbGUoZmlsZSwgMCwgc2l6ZSk7Ci0jZW5kaWYKIH0KIAotI2lmICFP
UyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBz
aXplX3Qgc2l6ZSkKK0RhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0
dXJuIG1hcEZpbGUoRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSk7Cit9CisKK0RhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQogewogICAgIGlmICgh
c2l6ZSkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmls
ZShoYW5kbGUpOwogICAgICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKICAgICB9Ci0KLSAgICB2
b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZk
LCBvZmZzZXQpOwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShm
ZCk7CisgICAgYm9vbCBzdWNjZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1h
cHBlZEZpbGUoaGFuZGxlLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVNb2RlOjpQcml2YXRlLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQp
OworICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUp
OwogfQotI2Vsc2UKLURhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSBmaWxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4g
RGF0YShmaWxlLCBvZmZzZXQsIHNpemUpOwotfQotI2VuZGlmCiAKIFNIQTE6OkRpZ2VzdCBjb21w
dXRlU0hBMShjb25zdCBEYXRhJiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQogewpAQCAtMTc5LDQw
ICsxNDMsMjUgQEAgc3RhdGljIFNhbHQgbWFrZVNhbHQoKQogCiBPcHRpb25hbDxTYWx0PiByZWFk
T3JNYWtlU2FsdChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAg
YXV0byBjcGF0aCA9IEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
LSAgICBhdXRvIGZkID0gb3BlbihjcGF0aC5kYXRhKCksIE9fUkRPTkxZLCAwKTsKLSAgICBTYWx0
IHNhbHQ7Ci0gICAgYXV0byBieXRlc1JlYWQgPSByZWFkKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5z
aXplKCkpOwotICAgIGNsb3NlKGZkKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHN0YXRpY19jYXN0
PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKLQot
ICAgICAgICB1bmxpbmsoY3BhdGguZGF0YSgpKTsKLSAgICAgICAgZmQgPSBvcGVuKGNwYXRoLmRh
dGEoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOwot
ICAgICAgICBib29sIHN1Y2Nlc3MgPSB3cml0ZShmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgp
KSA9PSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0LnNpemUoKSk7Ci0gICAgICAgIGNsb3NlKGZk
KTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgIGlmIChmaWxlRXhpc3RzKHBhdGgpKSB7Cisg
ICAgICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6UmVhZCk7CisgICAgICAgIFNhbHQgc2FsdDsKKyAgICAgICAgYXV0byBi
eXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06
OmNsb3NlRmlsZShmaWxlKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCAhPSBzYWx0LnNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgcmV0dXJuIHNhbHQ7CiAgICAgfQot
ICAgIHJldHVybiBzYWx0OwotI2Vsc2UKLSAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVu
RmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwotICAgIFNhbHQgc2Fs
dDsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKTsKKworICAg
IFNhbHQgc2FsdCA9IG1ha2VTYWx0KCk7CisgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3Bl
bkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSwgRmlsZVN5c3RlbTo6
RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIpOworICAgIGJvb2wgc3VjY2VzcyA9IEZpbGVTeXN0
ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgp
KSwgc2FsdC5zaXplKCkpID09IHNhbHQuc2l6ZSgpOwogICAgIEZpbGVTeXN0ZW06OmNsb3NlRmls
ZShmaWxlKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQuc2l6ZSgpKSB7Ci0gICAgICAgIHNh
bHQgPSBtYWtlU2FsdCgpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHBhdGgpOwotICAgICAgICBmaWxlID0g
RmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0
ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpID09IHNh
bHQuc2l6ZSgpOwotICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAg
IGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgfQogICAgIHJldHVy
biBzYWx0OwotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
aAppbmRleCBkNzhkOThiNjE3NTAuLjM3YjU5NjY1NmE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKQEAgLTM5LDYg
KzM5LDExIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyU291cC5oPgogI2VuZGlmCiAKKyNp
ZiBVU0UoQ1VSTCkKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU2hhcmVkTWVtb3J5OwpA
QCAtNTMsMTkgKzU4LDE2IEBAIHB1YmxpYzoKICAgICB+RGF0YSgpIHsgfQogCiAgICAgc3RhdGlj
IERhdGEgZW1wdHkoKTsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBzdGF0aWMgRGF0YSBhZG9wdE1h
cCh2b2lkKiBtYXAsIHNpemVfdCwgaW50IGZkKTsKLSNlbmRpZgorICAgIHN0YXRpYyBEYXRhIGFk
b3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBlbnVtIGNsYXNzIEJhY2tp
bmcgeyBCdWZmZXIsIE1hcCB9OwogICAgIERhdGEoT1NPYmplY3RQdHI8ZGlzcGF0Y2hfZGF0YV90
PiYmLCBCYWNraW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgogI2lmIFVTRShTT1VQKQot
ICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBpbnQgZmQgPSAtMSk7Ci0jZWxpZiBPUyhX
SU5ET1dTKQotICAgIGV4cGxpY2l0IERhdGEoVmVjdG9yPHVpbnQ4X3Q+JiYpOwotICAgIERhdGEo
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwor
ICAgIERhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmQgPSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKTsKKyNlbGlm
IFVTRShDVVJMKQorICAgIERhdGEoVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhPiYmKTsKICNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQpAQCAtOTQsMTAgKzk2
LDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQ
dHI8U291cEJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9
OworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVEZXNjcmlwdG9yIHsg
RmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OwogI2VuZGlmCi0jaWYgT1Mo
V0lORE9XUykKLSAgICBWZWN0b3I8dWludDhfdD4gbV9idWZmZXI7CisjaWYgVVNFKENVUkwpCisg
ICAgQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YT4+IG1fYnVmZmVyOwogI2VuZGlmCiAgICAgbXV0YWJsZSBjb25zdCB1aW50OF90KiBtX2RhdGEg
eyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKQEAgLTEwNiwxNyArMTA4LDgg
QEAgcHJpdmF0ZToKIAogRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYp
OwogYm9vbCBieXRlc0VxdWFsKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7Ci0jaWYgIU9TKFdJ
TkRPV1MpCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7
Ci0jZWxzZQogRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFu
ZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlmCi0jaWYgVVNFKEdMSUIpICYmICFQ
TEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgotI2lmICFPUyhXSU5ET1dTKQogRGF0YSBtYXBGaWxl
KGNvbnN0IGNoYXIqIHBhdGgpOwotI2VuZGlmCiBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKTsKIAogdXNpbmcgU2FsdCA9IHN0ZDo6YXJyYXk8dWludDhfdCwgOD47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tCmluZGV4IDZhMzlmODg3MDA4Ny4uY2I0YWMzOGM2YTUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDEzIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0
YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9wdE9TT2JqZWN0KGRpc3BhdGNo
X2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBiLmRpc3BhdGNoRGF0YSgpKSkg
fTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQg
ZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFw
cGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogeworICAgIHNpemVf
dCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5s
ZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJ
TEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKICAg
ICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcCwg
c2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9E
RUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKICAg
ICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNmNDMxNTZjNWEwMy4uMTkyNDgyYmY5
ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcApAQCAtMzAsNDAgKzMwLDQyIEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIERhdGE6OkRhdGEoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgOiBtX2J1ZmZlcihCb3g8VmFyaWFudDxW
ZWN0b3I8dWludDhfdD4sIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPj46OmNyZWF0ZShWZWN0
b3I8dWludDhfdD4oc2l6ZSkpKQorICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgbV9idWZmZXIu
cmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgbWVtY3B5KG1fYnVmZmVyLmRh
dGEoKSwgZGF0YSwgc2l6ZSk7CisgICAgbWVtY3B5KFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4o
Km1fYnVmZmVyKS5kYXRhKCksIGRhdGEsIHNpemUpOwogfQogCi1EYXRhOjpEYXRhKEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkK
K0RhdGE6OkRhdGEoVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhPiYmIGRhdGEpCisgICAgOiBtX2J1ZmZlcihCb3g8VmFyaWFudDxWZWN0b3I8dWludDhf
dD4sIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPj46OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSkK
KyAgICAsIG1faXNNYXAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YT4oKm1fYnVmZmVyKSkKIHsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAg
bV9zaXplID0gc2l6ZTsKLSAgICBGaWxlU3lzdGVtOjpzZWVrRmlsZShmaWxlLCBvZmZzZXQsIEZp
bGVTeXN0ZW06OkZpbGVTZWVrT3JpZ2luOjpCZWdpbm5pbmcpOwotICAgIEZpbGVTeXN0ZW06OnJl
YWRGcm9tRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2J1ZmZlci5kYXRhKCkp
LCBzaXplKTsKLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLURhdGE6OkRh
dGEoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKQotICAgIDogbV9idWZmZXIoV1RGTW92ZShidWZm
ZXIpKQotewotICAgIG1fc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBtX3NpemUgPSBXVEY6
OnN3aXRjaE9uKCptX2J1ZmZlciwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBi
dWZmZXIpIC0+IHNpemVfdCB7IHJldHVybiBidWZmZXIuc2l6ZSgpOyB9LAorICAgICAgICBbXShj
b25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFwcGVkRmlsZSkgLT4gc2l6ZV90IHsg
cmV0dXJuIG1hcHBlZEZpbGUuc2l6ZSgpOyB9CisgICAgKTsKIH0KIAogRGF0YSBEYXRhOjplbXB0
eSgpCiB7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAg
IHJldHVybiB7IFdURk1vdmUoYnVmZmVyKSB9OwogfQogCiBjb25zdCB1aW50OF90KiBEYXRhOjpk
YXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpOworICAgIGlmICghbV9i
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24oKm1fYnVmZmVyLAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikg
LT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gYnVmZmVyLmRhdGEoKTsgfSwKKyAgICAgICAgW10o
Y29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIG1hcHBlZEZpbGUpIC0+IGNvbnN0IHVp
bnQ4X3QqIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtYXBwZWRGaWxlLmRh
dGEoKSk7IH0KKyAgICApOwogfQogCiBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fYnVmZmVyLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1fYnVmZmVyOwogfQogCiBi
b29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVf
dCk+JiBhcHBsaWVyKSBjb25zdApAQCAtNzEsMjEgKzczLDM3IEBAIGJvb2wgRGF0YTo6YXBwbHko
Y29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNv
bnN0CiAgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9idWZmZXIuZGF0
YSgpKSwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKCkpLCBzaXplKCkpOwogfQogCiBEYXRhIERhdGE6OnN1
YnJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAogewotICAgIHJldHVybiB7
IG1fYnVmZmVyLmRhdGEoKSArIG9mZnNldCwgc2l6ZSB9OworICAgIGlmICghbV9idWZmZXIpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBkYXRhKCkgKyBvZmZzZXQsIHNpemUg
fTsKIH0KIAogRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQog
eworICAgIGlmIChhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYjsKKyAgICBpZiAoYi5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGE7CisKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKGEu
c2l6ZSgpICsgYi5zaXplKCkpOwogICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBhLmRhdGEoKSwg
YS5zaXplKCkpOwogICAgIG1lbWNweShidWZmZXIuZGF0YSgpICsgYS5zaXplKCksIGIuZGF0YSgp
LCBiLnNpemUoKSk7CiAgICAgcmV0dXJuIERhdGEoV1RGTW92ZShidWZmZXIpKTsKIH0KIAorRGF0
YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUs
IEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKK3sKKyAgICBBU1NFUlQobWFwcGVk
RmlsZS5kYXRhKCkpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CisKKyAgICByZXR1
cm4geyBXVEZNb3ZlKG1hcHBlZEZpbGUpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtD
YWNoZQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCmluZGV4IDUx
NWMwOWViYmZkMy4uZDNiNzllMDE0YTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApAQCAtNDgs
MTEgKzQ4LDExIEBAIERhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiAgICAgbV9idWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoY29w
aWVkRGF0YSwgc2l6ZSwgY29waWVkRGF0YSwgZmFzdEZyZWUpKTsKIH0KIAotRGF0YTo6RGF0YShH
UmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBpbnQgZmQpCitEYXRhOjpEYXRhKEdSZWZQdHI8
U291cEJ1ZmZlcj4mJiBidWZmZXIsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkK
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKICAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmQpCiAgICAg
LCBtX3NpemUoYnVmZmVyID8gYnVmZmVyLT5sZW5ndGggOiAwKQotICAgICwgbV9pc01hcChtX3Np
emUgJiYgZmQgIT0gLTEpCisgICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBGaWxlU3lzdGVtOjppc0hh
bmRsZVZhbGlkKGZkKSkKIHsKIH0KIApAQCAtMTA4LDEyICsxMDgsMTIgQEAgc3RydWN0IE1hcFdy
YXBwZXIgewogICAgIH5NYXBXcmFwcGVyKCkKICAgICB7CiAgICAgICAgIG11bm1hcChtYXAsIHNp
emUpOwotICAgICAgICBjbG9zZShmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIEZpbGVTeXN0ZW06
OmNsb3NlRmlsZShmaWxlRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgdm9pZCogbWFwOwogICAg
IHNpemVfdCBzaXplOwotICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICBGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZURlc2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxl
dGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCkBAIC0xMjEsOCArMTIxLDEwIEBAIHN0
YXRpYyB2b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKICAgICBkZWxl
dGUgd3JhcHBlcjsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBz
aXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewor
ICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCogbWFwID0gbWFw
cGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1hcCAh
PSBNQVBfRkFJTEVEKTsKICAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBwZXIg
eyBtYXAsIHNpemUsIGZkIH07CkBAIC0xMzAsMjEgKzEzMiwxNCBAQCBEYXRhIERhdGE6OmFkb3B0
TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKICAgICByZXR1cm4geyBXVEZNb3Zl
KGJ1ZmZlciksIGZkIH07CiB9CiAKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURh
dGEgYWRvcHRBbmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0qIHN0cmVhbSwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90IHNpemUpCi17Ci0gICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3Ry
ZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oc3RyZWFtKSk7Ci0gICAgaW50IGZkID0g
Z19maWxlX2Rlc2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKGlu
cHV0U3RyZWFtKSk7Ci0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgb2Zmc2V0LCBzaXpl
KTsKLX0KLSNlbmRpZgotCiBSZWZQdHI8U2hhcmVkTWVtb3J5PiBEYXRhOjp0cnlDcmVhdGVTaGFy
ZWRNZW1vcnkoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNv
bnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgbV9maWxl
RGVzY3JpcHRvcik7CisgICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFt
X2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9maWxlRGVzY3JpcHRvcikpOworICAgIGlu
dCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9C
QVNFRChpbnB1dFN0cmVhbSkpOworICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OndyYXBNYXAoY29u
c3RfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3RoLCBmZCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAK
aW5kZXggYmU4NDM3MWE4NjMwLi43YTBlYzVlMTRmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
LmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBO
ZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMgRGlyZWN0b3J5RW50cnlU
eXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewotICAgIHN3aXRjaCAoZHR5
cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlw
ZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICByZXR1cm4gRGlyZWN0b3J5
RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIH0KLSAg
ICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2VuZGlmCi0KIHZvaWQgdHJh
dmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGdW5jdGlvbjx2b2lkIChj
b25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rpb24pCiB7Ci0jaWYgIU9T
KFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1
cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgewot
ICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRfdHlwZSAhPSBEVF9SRUcp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5k
X25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAi
Li4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIG5hbWVTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0cmluZy5pc051bGwoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihuYW1lU3RyaW5nLCBkaXJl
Y3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIpOwot
I2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgp
OworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCwgIioi
X3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAgIGF1dG8gdHlw
ZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmlsZVN5c3RlbTo6U2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3Rvcnkg
OiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0aW9uKGVudHJ5LCB0eXBl
KTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKGVudHJ5KSwg
dHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZl
bHkoY29uc3QgU3RyaW5nJiBwYXRoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391126</attachid>
            <date>2020-02-18 18:51:57 -0800</date>
            <delta_ts>2020-02-20 17:35:43 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>35143</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWE2MzVkNDViOTguLjM5YTg2NjVmNjAwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKwor
ICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBVcGRhdGUgV2ViR0wyIHJlc3Vs
dHMgd2l0aCBBTkdMRSBiYWNrZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA2ODZiN2M5ZDE3NWUuLjBiZGVlNTU0YTljNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTYx
LDcgKzExNjEsMjAgQEAgY3J5cHRvL3N1YnRsZS93cmFwLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVy
cy5odG1sIFsgU2tpcCBdCiAKIGh0dHAvdGVzdHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVz
dHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAgXQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQor
CisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgoraHR0cC90ZXN0cy9jYWNoZS9jYW5jZWwtbXVs
dGlwbGUtcG9zdC14aHJzLmh0bWwgWyBGYWlsdXJlIF0KKworIyBmYWlscyBiZWNhdXNlIG9mIGNv
bnZlcnNpb24gdG8gZXBvY2ggYmVoYXZpb3Igc3BlY2lmaWMgdG8gTWFjCitodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1sYXN0LW1vZGlmaWVkLmh0bWwgWyBGYWlsdXJlIF0K
KworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0dHAvdGVzdHMvY2FjaGUvaWZyYW1lLTMw
NC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL25ldHdvcmstZXJyb3It
ZHVyaW5nLXJldmFsaWRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL3Bh
cnRpdGlvbmVkLWNhY2hlLWlmcmFtZS5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hl
L3BhcnRpdGlvbmVkLWNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvd2ls
bHNlbmRyZXF1ZXN0LXJldHVybnMtbnVsbC1mb3ItbWVtb3J5LWNhY2hlLWxvYWQuaHRtbCBbIEZh
aWx1cmUgXQorCiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y2FudmFzIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRz
YW5kYm94IFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYxNzQ2NzEwYjFiZC4uN2NmNjgyYjE5NmVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI4IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBz
b255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5
IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6Cisg
ICAgICAgIEFkZGVkIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIGZsYWcgd2hlbiBvcGVuaW5nIGZpbGVz
LgorICAgICAgICBSZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgdGhlIGxpc3REaXJlY3Rvcnkg
ZmlsdGVyIHNpbmNlIHRoZSBkZWZhdXQKKyAgICAgICAgU3RyaW5nKCkgZmlsdGVyIGRvZXNuJ3Qg
bWF0Y2ggYWxsIGZpbGVzIG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICBBZGRlZCBGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSB0byBiZSB1c2VkIHdpdGggUmVhZFdyaXRlIE1hcHBlZEZpbGVE
YXRhLgorCisgICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAq
IHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICBBZGRlZCAoU19JUlVTUiB8
IFNfSVdVU1IpIGZpbGUgb3BlbiBtb2Rlcy4KKworICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3Rl
bVdpbi5jcHA6CisgICAgICAgIEltcGxlbWVudCBnZXRWb2x1bWVGcmVlU3BhY2Ugc2luY2Ugc29t
ZSBvZiB0aGUgdGVzdHMgdXNlIGl0IHdoZW4gdG9nZ2xpbmcgY2FjaGUuCisgICAgICAgIAorICAg
ICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisKIDIwMjAtMDItMTggIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBmcm9tICJsYXllciBm
bHVzaCIgdGVybWlub2xvZ3kgdG8gInJlbmRlcmluZyB1cGRhdGUiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IDcyZjk1M2VhYjNmYy4uODQ4NTIxZTI3MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9GaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcApA
QCAtMjg3LDE3ICsyODcsMTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiAg
ICAgdW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOwogfQogCi0jaWYgSEFW
RShNTUFQKQotCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK01hcHBlZEZpbGVE
YXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9k
ZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxl
UGF0aCwgRmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBh
dGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAgICBzdWNjZXNzID0gbWFw
RmlsZUhhbmRsZShmZCwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAgICAgY2xvc2VGaWxlKGZk
KTsKIH0KIAotYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhBVkUoTU1BUCkKKworYm9v
bCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUpCiB7CiAgICAg
aWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMy
NCw3ICszMjQsMjQgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFELCBN
QVBfRklMRSB8IChtb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDog
TUFQX1BSSVZBVEUpLCBmZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFE
OworICAgIHN3aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoK
KyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9U
X1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRl
OgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CisgICAg
ICAgIGJyZWFrOworI2lmIE9TKERBUldJTikKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6RXZlbnRz
T25seToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAo
bWFwTW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklW
QVRFKSwgZmQsIDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9T
b3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmZjLi43NjU4NGRiM2Ri
MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9GaWxlU3lzdGVtLmgKQEAgLTc5LDExICs3OSwxNyBAQCBjb25zdCBQbGF0Zm9ybUZp
bGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogZW51bSBjbGFzcyBGaWxl
T3Blbk1vZGUgewogICAgIFJlYWQsCiAgICAgV3JpdGUsCisgICAgUmVhZFdyaXRlLAogI2lmIE9T
KERBUldJTikKICAgICBFdmVudHNPbmx5LAogI2VuZGlmCiB9OwogCitlbnVtIGNsYXNzIEZpbGVB
Y2Nlc3NQZXJtaXNzaW9uIDogYm9vbCB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0g
Y2xhc3MgRmlsZVNlZWtPcmlnaW4gewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAt
MTMxLDcgKzEzNyw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVG
cm9tQmFja3VwKCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNs
dWRlZCBmcm9tIGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7
IC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgZmlsdGVyID0gU3RyaW5nKCkpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+
IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7
CiAKIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmKTsKIFN0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGNvbnN0IGNoYXIqKTsKQEAgLTE0MCw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZh
bGlkKGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0g
aQogCiAvLyBQcmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdp
dGgsIG5vdCB0aGUgZnVsbCBwYXRoLgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVt
cG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVI
YW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nl
c3NQZXJtaXNzaW9uID0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCk7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRo
ZSByZXN1bHRpbmcgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNj
ZXNzZnVsLCAtMSBvdGhlcndpc2UuCiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4p
OwpAQCAtMjA2LDYgKzIxMiw3IEBAIHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRG
aWxlRGF0YSYmKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBl
ZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVk
RmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2Rl
LCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRh
KCk7CiAgICAgTWFwcGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApA
QCAtMjE2LDE1ICsyMjMsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIE1hcHBlZEZpbGVNb2RlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7
CiAKICAgICB2b2lkKiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmls
ZVNpemUgeyAwIH07CiB9OwogCi1pbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRh
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1
Y2Nlc3MpCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7
CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQs
IG1hcE1vZGUpOworfQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBs
YXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmls
ZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhh
bmRsZShoYW5kbGUsIG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwg
b3Blbk1vZGUsIG1hcE1vZGUpOwogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZp
bGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwCmluZGV4IDg2YzA0ZjlkNWUxMy4uOGRjMGNiZDhlM2NjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIFN0cmluZyBvcGVu
VGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBo
YW5kbGUpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOwogfQog
Ci1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSkKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiBwZXJtaXNzaW9uKQog
ewogICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CiAg
ICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKQEAgLTM0OCwxMSArMzQ4LDEz
IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVP
cGVuTW9kZSBtb2RlKQogICAgIEdSZWZQdHI8R0ZpbGVJT1N0cmVhbT4gaW9TdHJlYW07CiAgICAg
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkKQogICAgICAgICBpb1N0cmVhbSA9IGFkb3B0
R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikp
OwotICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgeworICAgIGVsc2Ug
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSB8fCBtb2RlID09IEZpbGVPcGVuTW9kZTo6
UmVhZFdyaXRlKSB7CiAgICAgICAgIGlmIChnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIHN0
YXRpY19jYXN0PEdGaWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNf
UkVHVUxBUikpKQogICAgICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29wZW5f
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUo
ZmlsZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCBudWxscHRyKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR0ZpbGVDcmVhdGVGbGFncyBwZXJtaXNzaW9uRmxhZyA9
IChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpID8gR19GSUxFX0NSRUFU
RV9OT05FIDogR19GSUxFX0NSRUFURV9QUklWQVRFOworICAgICAgICAgICAgaW9TdHJlYW0gPSBh
ZG9wdEdSZWYoZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgcGVybWlzc2lvbkZs
YWcsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBp
b1N0cmVhbS5sZWFrUmVmKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxl
U3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNw
cAppbmRleCAyNzgzOTg4M2ExYTIuLjEzY2JmOTE5YmMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC03OSw3ICs3OSw3IEBAIGJvb2wgZGVsZXRlRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIHVubGlua2VkOwogfQogCi1QbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkK
K1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVu
TW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiBwZXJtaXNzaW9uKQogewogICAgIENTdHJp
bmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CiAKQEAgLTg3LDE2ICs4
NywzMCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBG
aWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGU7CiAKICAgICBpbnQgcGxhdGZvcm1GbGFnID0gMDsKLSAgICBpZiAobW9kZSA9PSBGaWxlT3Bl
bk1vZGU6OlJlYWQpCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6
OlJlYWQ6CiAgICAgICAgIHBsYXRmb3JtRmxhZyB8PSBPX1JET05MWTsKLSAgICBlbHNlIGlmICht
b2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUpCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmls
ZU9wZW5Nb2RlOjpXcml0ZToKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IChPX1dST05MWSB8IE9f
Q1JFQVQgfCBPX1RSVU5DKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6
OlJlYWRXcml0ZToKKyAgICAgICAgcGxhdGZvcm1GbGFnIHw9IChPX1JEV1IgfCBPX0NSRUFUKTsK
KyAgICAgICAgYnJlYWs7CiAjaWYgT1MoREFSV0lOKQotICAgIGVsc2UgaWYgKG1vZGUgPT0gRmls
ZU9wZW5Nb2RlOjpFdmVudHNPbmx5KQorICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpFdmVudHNPbmx5
OgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gT19FVlRPTkxZOworICAgICAgICBicmVhazsKICNl
bmRpZgorICAgIH0KKworICAgIGludCBwZXJtaXNzaW9uRmxhZyA9IDA7CisgICAgaWYgKHBlcm1p
c3Npb24gPT0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIpCisgICAgICAgIHBlcm1pc3Npb25G
bGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUik7CisgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBG
aWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAoU19J
UlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RIKTsK
IAotICAgIHJldHVybiBvcGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCAwNjY2KTsKKyAg
ICByZXR1cm4gb3Blbihmc1JlcC5kYXRhKCksIHBsYXRmb3JtRmxhZywgcGVybWlzc2lvbkZsYWcp
OwogfQogCiB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCA5MzM0YWMwMjlkNTcuLjFmMDM4ZTdhYjA4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtNDIxLDcgKzQyMSw3IEBA
IFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5k
bGUmIGhhbmRsZSkKICAgICByZXR1cm4gcHJvcG9zZWRQYXRoOwogfQogCi1QbGF0Zm9ybUZpbGVI
YW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK1Bs
YXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9k
ZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbikKIHsKICAgICBEV09SRCBkZXNpcmVkQWNjZXNz
ID0gMDsKICAgICBEV09SRCBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQzNiw4ICs0MzYs
MTAgQEAgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU9wZW5Nb2RlIG1vZGUpCiAgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRFOwog
ICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX0FMV0FZUzsKICAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgY2Fz
ZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVS
SUNfUkVBRCB8IEdFTkVSSUNfV1JJVEU7CisgICAgICAgIGNyZWF0aW9uRGlzcG9zaXRpb24gPSBP
UEVOX0FMV0FZUzsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgU3RyaW5nIGRlc3RpbmF0
aW9uID0gcGF0aDsKQEAgLTU0OSw5ICs1NTEsMTQgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVj
dG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAg
cmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmlu
ZyYsIHVpbnQ2NF90JikKK2Jvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0
aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgVUxBUkdF
X0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7CisgICAgaWYgKCFHZXREaXNrRnJl
ZVNwYWNlRXhXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmcmVlQnl0ZXNBdmFpbGFi
bGVUb0NhbGxlciwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZyZWVTcGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0OworICAg
IHJldHVybiB0cnVlOwogfQogCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29u
c3QgQ1N0cmluZyYgZnNGaWxlKQpAQCAtNjAzLDE1ICs2MTAsNyBAQCBib29sIHVubWFwVmlld09m
RmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkKICAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGJ1
ZmZlcik7CiB9CiAKLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcm
IGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQotewotICAgIGF1
dG8gZmlsZSA9IENyZWF0ZUZpbGUoZmlsZVBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIEdF
TkVSSUNfUkVBRCwgMCwgbnVsbHB0ciwgT1BFTl9FWElTVElORywgRklMRV9BVFRSSUJVVEVfTk9S
TUFMLCBudWxscHRyKTsKLQotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZpbGUsIG1vZGUp
OwotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSkKK2Jvb2wg
TWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwg
RmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSkKIHsKICAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjI1LDExICs2MjQs
MjggQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgYXV0byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBQ
QUdFX1JFQURPTkxZLCAwLCAwLCBudWxscHRyKTsKKyAgICBEV09SRCBwYWdlUHJvdGVjdGlvbiA9
IFBBR0VfUkVBRE9OTFk7CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1JFQUQ7
CisgICAgc3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgor
ICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRE9OTFk7CisgICAgICAgIGRlc2lyZWRB
Y2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVu
TW9kZTo6V3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFEV1JJVEU7Cisg
ICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24g
PSBQQUdFX1JFQURXUklURTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1dSSVRF
IHwgRklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byBtYXBw
aW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBwYWdlUHJvdGVjdGlvbiwg
MCwgMCwgbnVsbHB0cik7CiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBGSUxFX01BUF9SRUFE
LCAwLCAwLCBzaXplKTsKKyAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBk
ZXNpcmVkQWNjZXNzLCAwLCAwLCBzaXplKTsKICAgICBDbG9zZUhhbmRsZShtYXBwaW5nKTsKICAg
ICBpZiAoIW1fZmlsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRo
V2Fsa2VyLmNwcAppbmRleCA4ZDdkN2FjNjgzODUuLjY4OGZlZGQ1OWZhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dp
bi9QYXRoV2Fsa2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogUGF0
aFdhbGtlcjo6UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5n
JiBwYXR0ZXJuKQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0b3J5ICsgIlxcIiArIHBhdHRl
cm47CisgICAgU3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9yeSwgJ1xcJywgcGF0dGVy
bik7CiAgICAgbV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgud2lkZUNoYXJhY3RlcnMo
KS5kYXRhKCksICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYxNzJhY2RkMzQ2Mi4uNGMzYWQ5
MGU1MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhl
ciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQg
TmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICBFbnN1cmUgdGhhdCB0aGUgQ2FjaGVTdG9yYWdlIGRpcmVjdG9yeSBpcyBh
Y3R1YWxseSBiZWluZyBjcmVhdGVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhU291cC5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIFVzZSBtb3JlIEZpbGVTeXN0ZW0gZnVuY3Rp
b25hbGl0eSB0byBzaGFyZSBjb2RlIGFjcm9zcyBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHA6CisgICAgICAgIFVzZSBP
cHRpb25hbDxWZWN0b3I+IGZvciBtX2J1ZmZlciBzaW5jZSB3ZSBuZWVkIHRvIGRpZmZlcmVudGlh
dGUgaXNFbXB0eSBhbmQgaXNOdWxsLgorCiAyMDIwLTAyLTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgZnJvbSAibGF5ZXIgZmx1c2giIHRl
cm1pbm9sb2d5IHRvICJyZW5kZXJpbmcgdXBkYXRlIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA5MWRmM2I4MGEzNmEuLmU0NDIzNGM1
ZTY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKQEAgLTQ1NCw4ICs0NTQsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW4KICAgICBh
dXRvIGlzTmV3RW50cnkgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vz
c2lvbklELCBbZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290
UGF0aF0gewogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3Rh
KTsKICAgICB9KS5pc05ld0VudHJ5OwotICAgIGlmIChpc05ld0VudHJ5KQorICAgIGlmIChpc05l
d0VudHJ5KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShj
YWNoZVJvb3RQYXRoSGFuZGxlKTsKKyAgICAgICAgaWYgKCFjYWNoZVJvb3RQYXRoLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgY2FjaGVSb290UGF0aCkpOwor
ICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVh
YTkwNWFiNjhhLi41YmFkZjQ5ZDk5NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcApAQCAtMjgsNyArMjgsNiBA
QAogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlS
YW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgIU9TKFdJ
TkRPV1MpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTM5LDI2ICszOCwyMyBAQAogbmFtZXNw
YWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFPUyhXSU5ET1dT
KQogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAg
IGludCBmZCA9IG9wZW4oRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJVU1IgfCBTX0lXVVNSKTsK
LSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKGZ0cnVuY2F0
ZShmZCwgbV9zaXplKSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGF1dG8gaGFuZGxl
ID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpS
ZWFkV3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBp
ZiAoIUZpbGVTeXN0ZW06OnRydW5jYXRlRmlsZShoYW5kbGUsIG1fc2l6ZSkpIHsKKyAgICAgICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogICAgIAogICAgIEZpbGVTeXN0ZW06Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHBh
dGgpOwotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBtX3NpemUsIFBST1RfUkVBRCB8
IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlM
RUQpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9w
ZW5Nb2RlOjpSZWFkV3JpdGUsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpTaGFyZWQsIHN1
Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKKyAgICB2b2lkKiBtYXAg
PSBjb25zdF9jYXN0PHZvaWQqPihtYXBwZWRGaWxlLmRhdGEoKSk7CiAgICAgdWludDhfdCogbWFw
RGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtYXApOwogICAgIGFwcGx5KFsmbWFwRGF0YV0o
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUpIHsKICAgICAgICAgbWVtY3B5
KG1hcERhdGEsIGJ5dGVzLCBieXRlc1NpemUpOwpAQCAtNjYsNTIgKzYyLDIzIEBAIERhdGEgRGF0
YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSk7CiAKKyNpZiBPUyhXSU5ET1dTKQorICAgIERXT1JEIG9sZFByb3RlY3Rpb247
CisgICAgVmlydHVhbFByb3RlY3QobWFwLCBtX3NpemUsIEZJTEVfTUFQX1JFQUQsICZvbGRQcm90
ZWN0aW9uKTsKKyAgICBGbHVzaFZpZXdPZkZpbGUobWFwLCBtX3NpemUpOworI2Vsc2UKICAgICAv
LyBEcm9wIHRoZSB3cml0ZSBwZXJtaXNzaW9uLgogICAgIG1wcm90ZWN0KG1hcCwgbV9zaXplLCBQ
Uk9UX1JFQUQpOwogCiAgICAgLy8gRmx1c2ggKGFzeW5jaHJvbm91c2x5KSB0byBmaWxlLCB0dXJu
aW5nIHRoaXMgaW50byBjbGVhbiBtZW1vcnkuCiAgICAgbXN5bmMobWFwLCBtX3NpemUsIE1TX0FT
WU5DKTsKLQotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIG1fc2l6ZSwgZmQpOwotfQot
I2Vsc2UKLURhdGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKLXsK
LSAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpG
aWxlT3Blbk1vZGU6OldyaXRlKTsKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQo
ZmlsZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKEZpbGVTeXN0ZW06OndyaXRlVG9G
aWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSksIHNpemUoKSkg
PCAwKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBEYXRhKFZlY3Rvcjx1aW50OF90
PihtX2J1ZmZlcikpOwotfQogI2VuZGlmCiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgbWFwRmls
ZShjb25zdCBjaGFyKiBwYXRoKQotewotICAgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFks
IDApOwotICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgc3RydWN0IHN0
YXQgc3RhdDsKLSAgICBpZiAoZnN0YXQoZmQsICZzdGF0KSA8IDApIHsKLSAgICAgICAgY2xvc2Uo
ZmQpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSA9IHN0YXQu
c3Rfc2l6ZTsKLSAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICBy
ZXR1cm4gRGF0YTo6ZW1wdHkoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxl
KGZkLCAwLCBzaXplKTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAoV1RGTW92ZShtYXBwZWRG
aWxlKSwgaGFuZGxlKTsKIH0KLSNlbmRpZgogCi1EYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQorRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1Mp
Ci0gICAgcmV0dXJuIG1hcEZpbGUoRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSk7Ci0jZWxzZQogICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5G
aWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAgICAgaWYgKCFGaWxl
U3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTE5
LDMxICs4NiwyOCBAQCBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIGlmICgh
RmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoZmlsZSwgc2l6ZSkpCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmaWxlLCAwLCBzaXplKTsKLSNlbmRpZgogfQog
Ci0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShpbnQgZmQsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKQorRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCkuZGF0YSgpKTsKK30KKworRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7CiAg
ICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwogICAgIH0K
LQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJ
VkFURSwgZmQsIG9mZnNldCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAg
IGNsb3NlKGZkKTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGEgbWFwcGVkRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlByaXZhdGUsIHN1Y2Nlc3MpOworICAgIGlmICgh
c3VjY2VzcykgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAobWFwLCBz
aXplLCBmZCk7CisgICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKFdURk1vdmUobWFwcGVkRmlsZSks
IGhhbmRsZSk7CiB9Ci0jZWxzZQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAg
IHJldHVybiBEYXRhKGZpbGUsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKIAogU0hBMTo6RGln
ZXN0IGNvbXB1dGVTSEExKGNvbnN0IERhdGEmIGRhdGEsIGNvbnN0IFNhbHQmIHNhbHQpCiB7CkBA
IC0xNzksNDAgKzE0MywyNSBAQCBzdGF0aWMgU2FsdCBtYWtlU2FsdCgpCiAKIE9wdGlvbmFsPFNh
bHQ+IHJlYWRPck1ha2VTYWx0KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9X
UykKLSAgICBhdXRvIGNwYXRoID0gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotICAgIGF1dG8gZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19SRE9OTFksIDApOwot
ICAgIFNhbHQgc2FsdDsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9IHJlYWQoZmQsIHNhbHQuZGF0YSgp
LCBzYWx0LnNpemUoKSk7Ci0gICAgY2xvc2UoZmQpOwotICAgIGlmIChieXRlc1JlYWQgIT0gc3Rh
dGljX2Nhc3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpKSB7Ci0gICAgICAgIHNhbHQgPSBtYWtlU2Fs
dCgpOwotCi0gICAgICAgIHVubGluayhjcGF0aC5kYXRhKCkpOwotICAgICAgICBmZCA9IG9wZW4o
Y3BhdGguZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCBTX0lSVVNSIHwgU19J
V1VTUik7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHdyaXRlKGZkLCBzYWx0LmRhdGEoKSwgc2Fs
dC5zaXplKCkpID09IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKTsKLSAgICAgICAg
Y2xvc2UoZmQpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKGZpbGVFeGlzdHMocGF0
aCkpIHsKKyAgICAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmls
ZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICAgICAgU2FsdCBzYWx0OworICAgICAg
ICBhdXRvIGJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCByZWludGVy
cHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKTsKKyAgICAgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOworICAgICAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQu
c2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICByZXR1cm4gc2FsdDsK
ICAgICB9Ci0gICAgcmV0dXJuIHNhbHQ7Ci0jZWxzZQotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0
ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAg
U2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxl
KGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkp
OworCisgICAgU2FsdCBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBhdXRvIGZpbGUgPSBGaWxlU3lz
dGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlLCBGaWxl
U3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcik7CisgICAgYm9vbCBzdWNjZXNzID0g
RmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2Fs
dC5kYXRhKCkpLCBzYWx0LnNpemUoKSkgPT0gc2FsdC5zaXplKCk7CiAgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGZpbGUpOwotICAgIGlmIChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpIHsKLSAg
ICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUocGF0aCk7Ci0gICAgICAg
IGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1v
ZGU6OldyaXRlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5c3RlbTo6d3JpdGVUb0Zp
bGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUo
KSkgPT0gc2FsdC5zaXplKCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsK
LSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9CiAg
ICAgcmV0dXJuIHNhbHQ7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCmluZGV4IGQ3OGQ5OGI2MTc1MC4uMzdiNTk2NjU2YTVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaApA
QCAtMzksNiArMzksMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dSZWZQdHJTb3VwLmg+CiAjZW5k
aWYKIAorI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKyNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBTaGFyZWRN
ZW1vcnk7CkBAIC01MywxOSArNTgsMTYgQEAgcHVibGljOgogICAgIH5EYXRhKCkgeyB9CiAKICAg
ICBzdGF0aWMgRGF0YSBlbXB0eSgpOwotI2lmICFPUyhXSU5ET1dTKQotICAgIHN0YXRpYyBEYXRh
IGFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90LCBpbnQgZmQpOwotI2VuZGlmCisgICAgc3RhdGlj
IERhdGEgYWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiwgRmlsZVN5c3RlbTo6
UGxhdGZvcm1GaWxlSGFuZGxlKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVudW0gY2xh
c3MgQmFja2luZyB7IEJ1ZmZlciwgTWFwIH07CiAgICAgRGF0YShPU09iamVjdFB0cjxkaXNwYXRj
aF9kYXRhX3Q+JiYsIEJhY2tpbmcgPSBCYWNraW5nOjpCdWZmZXIpOwogI2VuZGlmCiAjaWYgVVNF
KFNPVVApCi0gICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYsIGludCBmZCA9IC0xKTsKLSNl
bGlmIE9TKFdJTkRPV1MpCi0gICAgZXhwbGljaXQgRGF0YShWZWN0b3I8dWludDhfdD4mJik7Ci0g
ICAgRGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNp
emVfdCk7CisgICAgRGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYsIEZpbGVTeXN0ZW06OlBsYXRm
b3JtRmlsZUhhbmRsZSBmZCA9IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUp
OworI2VsaWYgVVNFKENVUkwpCisgICAgRGF0YShWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+JiYpOwogI2VuZGlmCiAgICAgYm9vbCBpc051bGwoKSBj
b25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9CkBAIC05
NCwxMCArOTYsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogI2lmIFVTRShTT1VQKQogICAgIG11dGFi
bGUgR1JlZlB0cjxTb3VwQnVmZmVyPiBtX2J1ZmZlcjsKLSAgICBpbnQgbV9maWxlRGVzY3JpcHRv
ciB7IC0xIH07CisgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZmlsZURlc2Ny
aXB0b3IgeyBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlIH07CiAjZW5kaWYK
LSNpZiBPUyhXSU5ET1dTKQotICAgIFZlY3Rvcjx1aW50OF90PiBtX2J1ZmZlcjsKKyNpZiBVU0Uo
Q1VSTCkKKyAgICBCb3g8VmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhPj4gbV9idWZmZXI7CiAjZW5kaWYKICAgICBtdXRhYmxlIGNvbnN0IHVpbnQ4X3Qq
IG1fZGF0YSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwpAQCAtMTA2LDE3
ICsxMDgsOCBAQCBwcml2YXRlOgogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmLCBjb25z
dCBEYXRhJik7CiBib29sIGJ5dGVzRXF1YWwoY29uc3QgRGF0YSYsIGNvbnN0IERhdGEmKTsKLSNp
ZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90KTsKLSNlbHNlCiBEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiBVU0UoR0xJ
QikgJiYgIVBMQVRGT1JNKFdJTikKLURhdGEgYWRvcHRBbmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0q
LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlmCi0jaWYgIU9TKFdJTkRPV1MpCiBEYXRh
IG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCk7Ci0jZW5kaWYKIERhdGEgbWFwRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgpOwogCiB1c2luZyBTYWx0ID0gc3RkOjphcnJheTx1aW50OF90LCA4PjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhQ29jb2EubW0KaW5kZXggNmEzOWY4ODcwMDg3Li5jYjRhYzM4YzZhNTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YUNvY29hLm1tCkBAIC05MiwxMSArOTIsMTMgQEAgRGF0YSBjb25jYXRlbmF0ZShj
b25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQogICAgIHJldHVybiB7IGFkb3B0T1NPYmplY3Qo
ZGlzcGF0Y2hfZGF0YV9jcmVhdGVfY29uY2F0KGEuZGlzcGF0Y2hEYXRhKCksIGIuZGlzcGF0Y2hE
YXRhKCkpKSB9OwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwgc2l6ZV90IHNp
emUsIGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiB7Cisg
ICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsKKyAgICB2b2lkKiBtYXAgPSBtYXBw
ZWRGaWxlLmxlYWtIYW5kbGUoKTsKICAgICBBU1NFUlQobWFwKTsKICAgICBBU1NFUlQobWFwICE9
IE1BUF9GQUlMRUQpOwotICAgIGNsb3NlKGZkKTsKKyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUo
ZmQpOwogICAgIGF1dG8gYm9keU1hcCA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfZGF0YV9jcmVh
dGUobWFwLCBzaXplLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BS
SU9SSVRZX0RFRkFVTFQsIDApLCBbbWFwLCBzaXplXSB7CiAgICAgICAgIG11bm1hcChtYXAsIHNp
emUpOwogICAgIH0pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKaW5kZXggY2Y0MzE1NmM1YTAzLi4x
OTI0ODJiZjlmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCkBAIC0zMCw0MCArMzAsNDIgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogRGF0YTo6RGF0
YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fYnVmZmVyKEJveDxW
YXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3Jl
YXRlKFZlY3Rvcjx1aW50OF90PihzaXplKSkpCisgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBt
X2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtZW1jcHkobV9i
dWZmZXIuZGF0YSgpLCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkoV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PigqbV9idWZmZXIpLmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAKLURhdGE6OkRhdGEo
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZzZXQsIHNpemVf
dCBzaXplKQorRGF0YTo6RGF0YShWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGE+JiYgZGF0YSkKKyAgICA6IG1fYnVmZmVyKEJveDxWYXJpYW50PFZlY3Rv
cjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3JlYXRlKFdURk1vdmUo
ZGF0YSkpKQorICAgICwgbV9pc01hcChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhPigqbV9idWZmZXIpKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXpl
KTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxlKGZpbGUsIG9m
ZnNldCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7Ci0gICAgRmlsZVN5
c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVy
LmRhdGEoKSksIHNpemUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLX0KLQot
RGF0YTo6RGF0YShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCi0gICAgOiBtX2J1ZmZlcihXVEZN
b3ZlKGJ1ZmZlcikpCi17Ci0gICAgbV9zaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAgIG1fc2l6
ZSA9IFdURjo6c3dpdGNoT24oKm1fYnVmZmVyLAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGJ1ZmZlcikgLT4gc2l6ZV90IHsgcmV0dXJuIGJ1ZmZlci5zaXplKCk7IH0sCisgICAg
ICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBwZWRGaWxlKSAtPiBz
aXplX3QgeyByZXR1cm4gbWFwcGVkRmlsZS5zaXplKCk7IH0KKyAgICApOwogfQogCiBEYXRhIERh
dGE6OmVtcHR5KCkKIHsKLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBidWZm
ZXI7CisgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpIH07CiB9CiAKIGNvbnN0IHVpbnQ4X3Qq
IERhdGE6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCk7CisgICAg
aWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
YnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBidWZmZXIuZGF0YSgpOyB9LAorICAg
ICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFwcGVkRmlsZSkgLT4g
Y29uc3QgdWludDhfdCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1hcHBl
ZEZpbGUuZGF0YSgpKTsgfQorICAgICk7CiB9CiAKIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOworICAgIHJldHVybiAhbV9idWZmZXI7
CiB9CiAKIGJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50OF90
Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CkBAIC03MSwyMSArNzMsMzcgQEAgYm9vbCBEYXRh
OjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBw
bGllcikgY29uc3QKICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2J1
ZmZlci5kYXRhKCkpLCBtX2J1ZmZlci5zaXplKCkpOworICAgIHJldHVybiBhcHBsaWVyKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSk7CiB9CiAKIERhdGEg
RGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHsgbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CisgICAgaWYgKCFtX2J1
ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IGRhdGEoKSArIG9mZnNl
dCwgc2l6ZSB9OwogfQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERh
dGEmIGIpCiB7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBiOworICAgIGlm
IChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rvcjx1aW50OF90PiBi
dWZmZXIoYS5zaXplKCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGEu
ZGF0YSgpLCBhLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBhLnNpemUoKSwg
Yi5kYXRhKCksIGIuc2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3ZlKGJ1ZmZlcikpOwog
fQogCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFw
cGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQoreworICAgIEFTU0VS
VChtYXBwZWRGaWxlLmRhdGEoKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKKwor
ICAgIHJldHVybiB7IFdURk1vdmUobWFwcGVkRmlsZSkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
TmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAK
aW5kZXggNTE1YzA5ZWJiZmQzLi5kM2I3OWUwMTRhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3Bw
CkBAIC00OCwxMSArNDgsMTEgQEAgRGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKICAgICBtX2J1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9v
d25lcihjb3BpZWREYXRhLCBzaXplLCBjb3BpZWREYXRhLCBmYXN0RnJlZSkpOwogfQogCi1EYXRh
OjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiBidWZmZXIsIGludCBmZCkKK0RhdGE6OkRhdGEo
R1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFu
ZGxlIGZkKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICwgbV9maWxlRGVzY3JpcHRvcihm
ZCkKICAgICAsIG1fc2l6ZShidWZmZXIgPyBidWZmZXItPmxlbmd0aCA6IDApCi0gICAgLCBtX2lz
TWFwKG1fc2l6ZSAmJiBmZCAhPSAtMSkKKyAgICAsIG1faXNNYXAobV9zaXplICYmIEZpbGVTeXN0
ZW06OmlzSGFuZGxlVmFsaWQoZmQpKQogewogfQogCkBAIC0xMDgsMTIgKzEwOCwxMiBAQCBzdHJ1
Y3QgTWFwV3JhcHBlciB7CiAgICAgfk1hcFdyYXBwZXIoKQogICAgIHsKICAgICAgICAgbXVubWFw
KG1hcCwgc2l6ZSk7Ci0gICAgICAgIGNsb3NlKGZpbGVEZXNjcmlwdG9yKTsKKyAgICAgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGVEZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICB2b2lkKiBt
YXA7CiAgICAgc2l6ZV90IHNpemU7Ci0gICAgaW50IGZpbGVEZXNjcmlwdG9yOworICAgIEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlRGVzY3JpcHRvcjsKIH07CiAKIHN0YXRpYyB2
b2lkIGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKQEAgLTEyMSw4ICsxMjEs
MTAgQEAgc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQog
ICAgIGRlbGV0ZSB3cmFwcGVyOwogfQogCi1EYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQqIG1hcCwg
c2l6ZV90IHNpemUsIGludCBmZCkKK0RhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
ZmQpCiB7CisgICAgc2l6ZV90IHNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsKKyAgICB2b2lkKiBt
YXAgPSBtYXBwZWRGaWxlLmxlYWtIYW5kbGUoKTsKICAgICBBU1NFUlQobWFwKTsKICAgICBBU1NF
UlQobWFwICE9IE1BUF9GQUlMRUQpOwogICAgIE1hcFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgTWFw
V3JhcHBlciB7IG1hcCwgc2l6ZSwgZmQgfTsKQEAgLTEzMCwyMSArMTMyLDE0IEBAIERhdGEgRGF0
YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQogICAgIHJldHVybiB7
IFdURk1vdmUoYnVmZmVyKSwgZmQgfTsKIH0KIAotI2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0o
V0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVhbSogc3RyZWFtLCBzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtID0g
Z19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShzdHJlYW0pKTsKLSAgICBp
bnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19GSUxFX0RFU0NSSVBUT1Jf
QkFTRUQoaW5wdXRTdHJlYW0pKTsKLSAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZkLCBvZmZz
ZXQsIHNpemUpOwotfQotI2VuZGlmCi0KIFJlZlB0cjxTaGFyZWRNZW1vcnk+IERhdGE6OnRyeUNy
ZWF0ZVNoYXJlZE1lbW9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpIHx8ICFpc01hcCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBTaGFyZWRNZW1vcnk6Ondy
YXBNYXAoY29uc3RfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3Ro
LCBtX2ZpbGVEZXNjcmlwdG9yKTsKKyAgICBHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtID0gZ19p
b19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX2ZpbGVEZXNjcmlwdG9yKSk7
CisgICAgaW50IGZkID0gZ19maWxlX2Rlc2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVND
UklQVE9SX0JBU0VEKGlucHV0U3RyZWFtKSk7CisgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6d3Jh
cE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVyLT5sZW5ndGgs
IGZkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtLmNwcAppbmRleCBiZTg0MzcxYTg2MzAuLjdhMGVjNWUxNGYzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwCkBAIC01Myw0OCArNTMsMTMgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFt
ZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKLXN0YXRpYyBEaXJlY3Rv
cnlFbnRyeVR5cGUgZGlyZWN0b3J5RW50cnlUeXBlKHVpbnQ4X3QgZHR5cGUpCi17Ci0gICAgc3dp
dGNoIChkdHlwZSkgewotICAgIGNhc2UgRFRfRElSOgotICAgICAgICByZXR1cm4gRGlyZWN0b3J5
RW50cnlUeXBlOjpEaXJlY3Rvcnk7Ci0gICAgY2FzZSBEVF9SRUc6Ci0gICAgICAgIHJldHVybiBE
aXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0g
ICAgfQotICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci19Ci0jZW5kaWYKLQog
dm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQgKGNvbnN0IFN0cmluZyYsIERpcmVjdG9yeUVudHJ5VHlwZSk+JiBmdW5jdGlvbikKIHsK
LSNpZiAhT1MoV0lORE9XUykKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoRmlsZVN5c3RlbTo6Zmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFkaXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBkaXJlbnQqIGRwOwotICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRp
cikpKSB7Ci0gICAgICAgIGlmIChkcC0+ZF90eXBlICE9IERUX0RJUiAmJiBkcC0+ZF90eXBlICE9
IERUX1JFRykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb25zdCBjaGFyKiBuYW1l
ID0gZHAtPmRfbmFtZTsKLSAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21w
KG5hbWUsICIuLiIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gbmFtZVN0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobmFtZSk7Ci0gICAgICAgIGlmIChuYW1lU3RyaW5nLmlz
TnVsbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZ1bmN0aW9uKG5hbWVTdHJp
bmcsIGRpcmVjdG9yeUVudHJ5VHlwZShkcC0+ZF90eXBlKSk7Ci0gICAgfQotICAgIGNsb3NlZGly
KGRpcik7Ci0jZWxzZQotICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3Rv
cnkocGF0aCk7CisgICAgYXV0byBlbnRyaWVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShw
YXRoLCAiKiJfcyk7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpIHsKICAgICAgICAg
YXV0byB0eXBlID0gRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGVudHJ5LCBGaWxlU3lzdGVt
OjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykgPyBEaXJlY3RvcnlFbnRyeVR5cGU6OkRp
cmVjdG9yeSA6IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICAgICAgZnVuY3Rpb24oZW50
cnksIHR5cGUpOworICAgICAgICBmdW5jdGlvbihGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUo
ZW50cnkpLCB0eXBlKTsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBkZWxldGVEaXJlY3RvcnlS
ZWN1cnNpdmVseShjb25zdCBTdHJpbmcmIHBhdGgpCg==
</data>
<flag name="review"
          id="406698"
          type_id="1"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391361</attachid>
            <date>2020-02-20 17:35:43 -0800</date>
            <delta_ts>2020-02-20 17:39:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>40783</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWE2MzVkNDViOTguLjM5YTg2NjVmNjAwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKwor
ICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBVcGRhdGUgV2ViR0wyIHJlc3Vs
dHMgd2l0aCBBTkdMRSBiYWNrZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA2ODZiN2M5ZDE3NWUuLjBiZGVlNTU0YTljNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTYx
LDcgKzExNjEsMjAgQEAgY3J5cHRvL3N1YnRsZS93cmFwLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVy
cy5odG1sIFsgU2tpcCBdCiAKIGh0dHAvdGVzdHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVz
dHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAgXQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQor
CisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgoraHR0cC90ZXN0cy9jYWNoZS9jYW5jZWwtbXVs
dGlwbGUtcG9zdC14aHJzLmh0bWwgWyBGYWlsdXJlIF0KKworIyBmYWlscyBiZWNhdXNlIG9mIGNv
bnZlcnNpb24gdG8gZXBvY2ggYmVoYXZpb3Igc3BlY2lmaWMgdG8gTWFjCitodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1sYXN0LW1vZGlmaWVkLmh0bWwgWyBGYWlsdXJlIF0K
KworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0dHAvdGVzdHMvY2FjaGUvaWZyYW1lLTMw
NC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL25ldHdvcmstZXJyb3It
ZHVyaW5nLXJldmFsaWRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL3Bh
cnRpdGlvbmVkLWNhY2hlLWlmcmFtZS5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hl
L3BhcnRpdGlvbmVkLWNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvd2ls
bHNlbmRyZXF1ZXN0LXJldHVybnMtbnVsbC1mb3ItbWVtb3J5LWNhY2hlLWxvYWQuaHRtbCBbIEZh
aWx1cmUgXQorCiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y2FudmFzIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRz
YW5kYm94IFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYxNzQ2NzEwYjFiZC4uOTUyZjkyZmMxOGRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBz
b255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5
IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6Cisg
ICAgICAgIEFkZGVkIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIGZsYWcgd2hlbiBvcGVuaW5nIGZpbGVz
LgorICAgICAgICBSZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgdGhlIGxpc3REaXJlY3Rvcnkg
ZmlsdGVyIHNpbmNlIHRoZSBkZWZhdXQKKyAgICAgICAgU3RyaW5nKCkgZmlsdGVyIGRvZXNuJ3Qg
bWF0Y2ggYWxsIGZpbGVzIG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICBBZGRlZCBGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSB0byBiZSB1c2VkIHdpdGggUmVhZFdyaXRlIE1hcHBlZEZpbGVE
YXRhLgorICAgICAgICBBZGRlZCBGaWxlU3lzdGVtOjpjcmVhdGVGaWxlIHdoaWNoIGF0dGVtcHMg
dG8gY3JlYXRlIGEgZmlsZSBhbmQgZmFpbHMgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuCisK
KyAgICAgICAgKiB3dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHA6CisgICAgICAgICogd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAgIEFkZGVkIChTX0lSVVNSIHwgU19JV1VT
UikgZmlsZSBvcGVuIG1vZGVzLgorCisgICAgICAgICogd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cDoKKyAgICAgICAgSW1wbGVtZW50IGdldFZvbHVtZUZyZWVTcGFjZSBzaW5jZSBzb21lIG9mIHRo
ZSB0ZXN0cyB1c2UgaXQgd2hlbiB0b2dnbGluZyBjYWNoZS4KKyAgICAgICAgCisgICAgICAgICog
d3RmL3dpbi9QYXRoV2Fsa2VyLmNwcDoKKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0
ZXJtaW5vbG9neSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKaW5kZXgg
NzJmOTUzZWFiM2ZjLi44NDg1MjFlMjcyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCkBAIC0yODcs
MTcgKzI4NywxNyBAQCBNYXBwZWRGaWxlRGF0YTo6fk1hcHBlZEZpbGVEYXRhKCkKICAgICB1bm1h
cFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7CiB9CiAKLSNpZiBIQVZFKE1NQVAp
Ci0KLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQorTWFwcGVkRmlsZURhdGE6Ok1h
cHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1v
ZGUsIGJvb2wmIHN1Y2Nlc3MpCiB7Ci0gICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRoLCBG
aWxlT3Blbk1vZGU6OlJlYWQpOworICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxlUGF0aCwgRmls
ZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKIAotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFu
ZGxlKGZkLCBtb2RlKTsKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwgRmlsZVN5c3Rl
bTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBtYXBNb2RlKTsKICAgICBjbG9zZUZpbGUoZmQpOwogfQog
Ci1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUpCisjaWYgSEFWRShNTUFQKQorCitib29sIE1hcHBl
ZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVP
cGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSkKIHsKICAgICBpZiAoIWlz
SGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0LDcgKzMy
NCwyNCBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9GSUxF
IHwgKG1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJlZCA/IE1BUF9TSEFSRUQgOiBNQVBfUFJJ
VkFURSksIGZkLCAwKTsKKyAgICBpbnQgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAg
c3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgorICAgICAg
ICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
aWxlT3Blbk1vZGU6OldyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfV1JJVEU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAg
ICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKKyAgICAgICAgYnJl
YWs7CisjaWYgT1MoREFSV0lOKQorICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpFdmVudHNPbmx5Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQq
IGRhdGEgPSBtbWFwKDAsIHNpemUsIHBhZ2VQcm90ZWN0aW9uLCBNQVBfRklMRSB8IChtYXBNb2Rl
ID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBm
ZCwgMCk7CiAKICAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKSB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA4MDVhMGU0YjE2ZmMuLmM1ZDMxNDJmYzIzNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uaApAQCAtNzksMTEgKzc5LDE3IEBAIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRs
ZSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlID0gLTE7CiBlbnVtIGNsYXNzIEZpbGVPcGVuTW9k
ZSB7CiAgICAgUmVhZCwKICAgICBXcml0ZSwKKyAgICBSZWFkV3JpdGUsCiAjaWYgT1MoREFSV0lO
KQogICAgIEV2ZW50c09ubHksCiAjZW5kaWYKIH07CiAKK2VudW0gY2xhc3MgRmlsZUFjY2Vzc1Bl
cm1pc3Npb24gOiBib29sIHsKKyAgICBVc2VyLAorICAgIEFsbAorfTsKKwogZW51bSBjbGFzcyBG
aWxlU2Vla09yaWdpbiB7CiAgICAgQmVnaW5uaW5nLAogICAgIEN1cnJlbnQsCkBAIC0xMzEsNyAr
MTM3LDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TWV0YWRhdGFVUkwoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHVybFN0cmkKIGJvb2wgY2FuRXhjbHVkZUZyb21CYWNr
dXAoKTsgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBmaWxlIGNhbiBldmVyIGJlIGV4Y2x1ZGVkIGZy
b20gYmFja3VwLgogYm9vbCBleGNsdWRlRnJvbUJhY2t1cChjb25zdCBTdHJpbmcmKTsgLy8gUmV0
dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCiAKLVdURl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8U3Ry
aW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0
ZXIgPSBTdHJpbmcoKSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPFN0cmluZz4gbGlzdERp
cmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKTsKIAogV1RG
X0VYUE9SVF9QUklWQVRFIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0
cmluZyYpOwogU3RyaW5nIHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3Qg
Y2hhciopOwpAQCAtMTQwLDcgKzE0Niw3IEBAIGlubGluZSBib29sIGlzSGFuZGxlVmFsaWQoY29u
c3QgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpIHsgcmV0dXJuIGhhbmRsZSAhPSBpCiAKIC8v
IFByZWZpeCBpcyB3aGF0IHRoZSBmaWxlbmFtZSBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aCwgbm90
IHRoZSBmdWxsIHBhdGguCiBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIG9wZW5UZW1wb3JhcnlG
aWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKLVdURl9FWFBP
UlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUpOworV1RGX0VYUE9SVF9QUklWQVRFIFBsYXRmb3JtRmlsZUhhbmRsZSBv
cGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSwgRmlsZUFjY2Vzc1Blcm1p
c3Npb24gPSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIC8vIFJldHVybnMgdGhlIHJlc3Vs
dGluZyBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGlmIHN1Y2Nlc3NmdWws
IC0xIG90aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJVkFURSBsb25nIGxvbmcgc2Vla0ZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbik7CkBAIC0x
NDksNiArMTU1LDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJ1bmNhdGVGaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgaW50
IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCk7CiAvLyBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIGlmIHN1
Y2Nlc3NmdWwsIC0xIG90aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJVkFURSBpbnQgcmVhZEZyb21G
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIGNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uID0gRmlsZUFjY2Vzc1Blcm1p
c3Npb246OkFsbCk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3Bl
bkFuZExvY2tGaWxlKGNvbnN0IFN0cmluZyYsIEZpbGVPcGVuTW9kZSwgT3B0aW9uU2V0PEZpbGVM
b2NrTW9kZT4gPSBGaWxlTG9ja01vZGU6OkV4Y2x1c2l2ZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCB1bmxvY2tBbmRDbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlKTsKQEAgLTIwNiw2ICsy
MTMsNyBAQCBwdWJsaWM6CiAgICAgTWFwcGVkRmlsZURhdGEoTWFwcGVkRmlsZURhdGEmJik7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBNYXBwZWRGaWxlTW9kZSwgYm9v
bCYgc3VjY2Vzcyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRm
b3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vz
cyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBl
ZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURhdGEmJik7CiAKQEAgLTIxNiwxNSArMjI0
LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNo
YW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQogCiBwcml2YXRlOgotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBNYXBwZWRGaWxl
TW9kZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpOwogCiAgICAgdm9pZCog
bV9maWxlRGF0YSB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2ZpbGVTaXplIHsgMCB9Owog
fTsKIAotaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQoraW5saW5l
IE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQoreworICAgIHN1Y2Nlc3Mg
PSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgRmlsZU9wZW5Nb2RlOjpSZWFkLCBtYXBNb2RlKTsKK30K
KworaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUs
IGJvb2wmIHN1Y2Nlc3MpCiB7Ci0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBt
b2RlKTsKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUsIG9wZW5Nb2RlLCBtYXBN
b2RlKTsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRG
aWxlRGF0YSYmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRl
eCA4NmMwNGY5ZDVlMTMuLmZlOTYwZTBlMDRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUo
Y29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAotUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQ
bGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1v
ZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsKICAgICBhdXRvIGZp
bGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAgIGlmICghdmFsaWRS
ZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCkBAIC0zNDgsMTYgKzM0OCwzMiBAQCBQbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkK
ICAgICBHUmVmUHRyPEdGaWxlSU9TdHJlYW0+IGlvU3RyZWFtOwogICAgIGlmIChtb2RlID09IEZp
bGVPcGVuTW9kZTo6UmVhZCkKICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29w
ZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBlbHNlIGlm
IChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUpIHsKKyAgICBlbHNlIGlmIChtb2RlID09IEZp
bGVPcGVuTW9kZTo6V3JpdGUgfHwgbW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSkgewog
ICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmls
ZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKICAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxl
LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlv
U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdf
RklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAocGVybWlzc2lvbiA9
PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklMRV9DUkVBVEVfTk9ORSA6IEdfRklM
RV9DUkVBVEVfUFJJVkFURTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmls
ZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gaW9TdHJlYW0ubGVha1Jl
ZigpOwogfQogCitQbGF0Zm9ybUZpbGVIYW5kbGUgY3JlYXRlRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKK3sKKyAg
ICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlm
ICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lLmRhdGEoKSkpOworICAgIEdSZWZQdHI8R0Zp
bGVJT1N0cmVhbT4gaW9TdHJlYW07CisgICAgR0ZpbGVDcmVhdGVGbGFncyBwZXJtaXNzaW9uRmxh
ZyA9IChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpID8gR19GSUxFX0NS
RUFURV9OT05FIDogR19GSUxFX0NSRUFURV9QUklWQVRFOworICAgIGlvU3RyZWFtID0gYWRvcHRH
UmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBu
dWxscHRyLCBudWxscHRyKSk7CisKKyAgICByZXR1cm4gaW9TdHJlYW0ubGVha1JlZigpOworfQor
CiB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBpZiAo
IWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4
L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCmluZGV4IDI3ODM5ODgzYTFhMi4uMzIyNzBmMTI5ZTkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRm
b3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBt
b2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24pCiB7CiAgICAg
Q1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIApAQCAtODcs
MTggKzg3LDk5IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICByZXR1cm4gaW52YWxpZFBsYXRmb3JtRmls
ZUhhbmRsZTsKIAogICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOwotICAgIGlmIChtb2RlID09IEZp
bGVPcGVuTW9kZTo6UmVhZCkKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVu
TW9kZTo6UmVhZDoKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwotICAgIGVsc2Ug
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGaWxlT3Blbk1vZGU6OldyaXRlOgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fV1JPTkxZ
IHwgT19DUkVBVCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVu
TW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fUkRXUiB8IE9fQ1JF
QVQpOworICAgICAgICBicmVhazsKKyNpZiBPUyhEQVJXSU4pCisgICAgY2FzZSBGaWxlT3Blbk1v
ZGU6OkV2ZW50c09ubHk6CisgICAgICAgIHBsYXRmb3JtRmxhZyB8PSBPX0VWVE9OTFk7CisgICAg
ICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorCisgICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsK
KyAgICBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAg
ICAgcGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChw
ZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Np
b25GbGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9U
SCB8IFNfSVdPVEgpOworCisgICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZs
YWcsIHBlcm1pc3Npb25GbGFnKTsKK30KK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiBw
ZXJtaXNzaW9uKQoreworICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7CisKKyAgICBpZiAoZnNSZXAuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBpbnZh
bGlkUGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgaW50IHBsYXRmb3JtRmxhZyA9IDA7CisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CisgICAgICAgIHBs
YXRmb3JtRmxhZyB8PSBPX1JET05MWTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Bl
bk1vZGU6OldyaXRlOgorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fV1JPTkxZIHwgT19DUkVB
VCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVh
ZFdyaXRlOgorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fUkRXUiB8IE9fQ1JFQVQpOworICAg
ICAgICBicmVhazsKICNpZiBPUyhEQVJXSU4pCi0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Bl
bk1vZGU6OkV2ZW50c09ubHkpCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHk6CiAg
ICAgICAgIHBsYXRmb3JtRmxhZyB8PSBPX0VWVE9OTFk7CisgICAgICAgIGJyZWFrOwogI2VuZGlm
CisgICAgfQorCisgICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAocGVybWlzc2lv
biA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlzc2lvbkZsYWcg
fD0gKFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9uID09IEZpbGVB
Y2Nlc3NQZXJtaXNzaW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNS
IHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgpOwogCi0g
ICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIDA2NjYpOworICAgIHJl
dHVybiBvcGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJtaXNzaW9uRmxhZyk7CiB9
CiAKK1BsYXRmb3JtRmlsZUhhbmRsZSBjcmVhdGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24pCit7CisgICAg
Q1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlm
IChmc1JlcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGU7CisKKyAgICBpbnQgcGxhdGZvcm1GbGFnID0gMDsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRP
TkxZOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CisgICAg
ICAgIHBsYXRmb3JtRmxhZyB8PSBPX1dST05MWTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
aWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRXUjsK
KyAgICAgICAgYnJlYWs7CisjaWYgT1MoREFSV0lOKQorICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpF
dmVudHNPbmx5OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIH0K
KworICAgIGludCBwZXJtaXNzaW9uRmxhZyA9IDA7CisgICAgaWYgKHBlcm1pc3Npb24gPT0gRmls
ZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lS
VVNSIHwgU19JV1VTUik7CisgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVy
bWlzc2lvbjo6QWxsKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAoU19JUlVTUiB8IFNfSVdV
U1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RIKTsKKworICAgIHJldHVy
biBvcGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnIHwgT19DUkVBVCB8IE9fRVhDTCwgcGVy
bWlzc2lvbkZsYWcpOworfQorCisKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYg
aGFuZGxlKQogewogICAgIGlmIChpc0hhbmRsZVZhbGlkKGhhbmRsZSkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dp
bi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCA5MzM0YWMwMjlkNTcuLjk4ZDU2OTUyYjg5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtNDIxLDcgKzQyMSw3IEBAIFN0cmlu
ZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhh
bmRsZSkKICAgICByZXR1cm4gcHJvcG9zZWRQYXRoOwogfQogCi1QbGF0Zm9ybUZpbGVIYW5kbGUg
b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK1BsYXRmb3Jt
RmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2Rl
LCBGaWxlQWNjZXNzUGVybWlzc2lvbikKIHsKICAgICBEV09SRCBkZXNpcmVkQWNjZXNzID0gMDsK
ICAgICBEV09SRCBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQzNiwxNCArNDM2LDM2IEBA
IFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVu
TW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19XUklURTsKICAgICAg
ICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CiAgICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGNhc2UgRmls
ZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1JF
QUQgfCBHRU5FUklDX1dSSVRFOworICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gT1BFTl9B
TFdBWVM7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9
IHBhdGg7CiAgICAgcmV0dXJuIENyZWF0ZUZpbGUoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMo
KS5kYXRhKCksIGRlc2lyZWRBY2Nlc3MsIHNoYXJlTW9kZSwgMCwgY3JlYXRpb25EaXNwb3NpdGlv
biwgRklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKIH0KIAorUGxhdGZvcm1GaWxlSGFuZGxlIGNy
ZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vz
c1Blcm1pc3Npb24pCit7CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9IDA7CisgICAgRFdPUkQg
c2hhcmVNb2RlID0gMDsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9k
ZTo6UmVhZDoKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfUkVBRDsKKyAgICAgICAg
c2hhcmVNb2RlID0gRklMRV9TSEFSRV9SRUFEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZp
bGVPcGVuTW9kZTo6V3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRF
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAg
ICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIENyZWF0ZUZpbGUocGF0aC53aWRlQ2hhcmFj
dGVycygpLmRhdGEoKSwgZGVzaXJlZEFjY2Vzcywgc2hhcmVNb2RlLCAwLCBDUkVBVEVfTkVXLCBG
SUxFX0FUVFJJQlVURV9OT1JNQUwsIDApOworfQorCiB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBpZiAoaXNIYW5kbGVWYWxpZChoYW5kbGUpKSB7CkBA
IC01NDksOSArNTcxLDE0IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsdGVyKQogICAgIHJldHVybiBlbnRyaWVz
OwogfQogCi1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmLCB1aW50NjRfdCYp
Citib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBm
cmVlU3BhY2UpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFVMQVJHRV9JTlRFR0VSIGZyZWVC
eXRlc0F2YWlsYWJsZVRvQ2FsbGVyOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRo
LndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsIG51
bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVlU3BhY2Ug
PSBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZz
RmlsZSkKQEAgLTYwMywxNSArNjMwLDcgQEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVm
ZmVyLCBzaXplX3QpCiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwogfQogCi1N
YXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFw
cGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUgPSBDcmVh
dGVGaWxlKGZpbGVQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQsIDAs
IG51bGxwdHIsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVsbHB0cik7
Ci0KLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBjbG9zZUZp
bGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZpbGVEYXRh
OjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBv
cGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRs
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyNSwxMSArNjQ0LDI4IEBAIGJvb2wgTWFw
cGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFw
cGVkRmlsZU1vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gbWFw
cGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFET05MWSwg
MCwgMCwgbnVsbHB0cik7CisgICAgRFdPUkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZ
OworICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3aXRjaCAo
b3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVBy
b3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgICAgICBkZXNpcmVkQWNjZXNzID0gRklMRV9N
QVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgor
ICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBkZXNpcmVk
QWNjZXNzID0gRklMRV9NQVBfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9w
ZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFEV1JJ
VEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURSB8IEZJTEVfTUFQX1JF
QUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9IENyZWF0ZUZp
bGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAsIG51bGxwdHIp
OwogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9maWxl
RGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwgMCwgc2l6ZSk7
CisgICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFjY2Vzcywg
MCwgMCwgc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYgKCFtX2ZpbGVE
YXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93
aW4vUGF0aFdhbGtlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKaW5k
ZXggOGQ3ZDdhYzY4Mzg1Li42ODhmZWRkNTlmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3dpbi9QYXRoV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIFBhdGhXYWxrZXI6OlBhdGhX
YWxrZXIoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcGF0dGVybikKIHsK
LSAgICBTdHJpbmcgcGF0aCA9IGRpcmVjdG9yeSArICJcXCIgKyBwYXR0ZXJuOworICAgIFN0cmlu
ZyBwYXRoID0gbWFrZVN0cmluZyhkaXJlY3RvcnksICdcXCcsIHBhdHRlcm4pOwogICAgIG1faGFu
ZGxlID0gOjpGaW5kRmlyc3RGaWxlVyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmbV9k
YXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCA2MTcyYWNkZDM0NjIuLjRjM2FkOTBlNTJhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wMi0xOCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlz
LnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6
RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
RW5zdXJlIHRoYXQgdGhlIENhY2hlU3RvcmFnZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkgYmVpbmcg
Y3JlYXRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2Eu
bW06CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAu
Y3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0
ZW0uY3BwOgorICAgICAgICBVc2UgbW9yZSBGaWxlU3lzdGVtIGZ1bmN0aW9uYWxpdHkgdG8gc2hh
cmUgY29kZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwOgorICAgICAgICBVc2UgT3B0aW9uYWw8VmVjdG9y
PiBmb3IgbV9idWZmZXIgc2luY2Ugd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGlzRW1wdHkgYW5k
IGlzTnVsbC4KKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5vbG9neSB0byAi
cmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTFkZjNiODBhMzZhLi5lNDQyMzRjNWU2NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC00NTQs
OCArNDU0LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWluCiAgICAgYXV0byBpc05ld0VudHJ5
ID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwgW2RlZmF1
bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgJmNhY2hlUm9vdFBhdGhdIHsKICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+KGNhY2hlUm9v
dFBhdGgsIGRlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSk7CiAgICAgfSkuaXNO
ZXdFbnRyeTsKLSAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICBpZiAoaXNOZXdFbnRyeSkgewogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY2FjaGVSb290UGF0aEhh
bmRsZSk7CisgICAgICAgIGlmICghY2FjaGVSb290UGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1By
b2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGNhY2hlUm9vdFBhdGgpKTsKKyAgICB9CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCmluZGV4IDc1YWE5MDVhYjY4YS4uODgz
ZDYzOGE5YmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUg
PGZjbnRsLmg+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmICFPUyhXSU5ET1dTKQogI2luY2x1
ZGUgPHN5cy9tbWFuLmg+CkBAIC0zOSwyNiArMzgsMjMgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewog
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKIERhdGEgRGF0YTo6
bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBpbnQgZmQgPSBvcGVu
KEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIE9fQ1JF
QVQgfCBPX0VYQ0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAgaWYgKGZkIDwg
MCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChmdHJ1bmNhdGUoZmQsIG1fc2l6ZSkg
PCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06
OmNyZWF0ZUZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUsIEZp
bGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBpZiAoIUZpbGVTeXN0
ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxlKSB8fCAhRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGhh
bmRsZSwgbV9zaXplKSkgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgRmlsZVN5c3RlbTo6bWFrZVNh
ZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgocGF0aCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51
bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDAp
OwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAg
Ym9vbCBzdWNjZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUo
aGFuZGxlLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZU1vZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAorICAgIHZvaWQqIG1hcCA9IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUu
ZGF0YSgpKTsKICAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1h
cCk7CiAgICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5
dGVzU2l6ZSkgewogICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVzU2l6ZSk7CkBA
IC02Niw1MiArNjIsMjMgQEAgRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIAorI2lmIE9TKFdJTkRPV1Mp
CisgICAgRFdPUkQgb2xkUHJvdGVjdGlvbjsKKyAgICBWaXJ0dWFsUHJvdGVjdChtYXAsIG1fc2l6
ZSwgRklMRV9NQVBfUkVBRCwgJm9sZFByb3RlY3Rpb24pOworICAgIEZsdXNoVmlld09mRmlsZSht
YXAsIG1fc2l6ZSk7CisjZWxzZQogICAgIC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCiAg
ICAgbXByb3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CiAKICAgICAvLyBGbHVzaCAoYXN5
bmNocm9ub3VzbHkpIHRvIGZpbGUsIHR1cm5pbmcgdGhpcyBpbnRvIGNsZWFuIG1lbW9yeS4KICAg
ICBtc3luYyhtYXAsIG1fc2l6ZSwgTVNfQVNZTkMpOwotCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0
TWFwKG1hcCwgbV9zaXplLCBmZCk7Ci19Ci0jZWxzZQotRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKSBjb25zdAotewotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9w
ZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmICgh
RmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBpZiAoRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YSgpKSwgc2l6ZSgpKSA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
cmV0dXJuIERhdGEoVmVjdG9yPHVpbnQ4X3Q+KG1fYnVmZmVyKSk7Ci19CiAjZW5kaWYKIAotI2lm
ICFPUyhXSU5ET1dTKQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50
IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0
YXQpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGlmICghc2l6ZSkgewotICAg
ICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOworICAgIHJldHVybiBEYXRh
OjphZG9wdE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2VuZGlmCiAKLURh
dGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCitEYXRhIG1hcEZpbGUoY29uc3QgY2hhciog
cGF0aCkKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVt
OjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0
byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5N
b2RlOjpSZWFkKTsKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAg
ICAgICAgIHJldHVybiB7IH07CkBAIC0xMTksMzEgKzg2LDI4IEBAIERhdGEgbWFwRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBz
aXplKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZp
bGUsIDAsIHNpemUpOwotI2VuZGlmCiB9CiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRB
bmRNYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhIG1hcEZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworfQorCitEYXRhIGFkb3B0
QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2Uo
ZmQpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0
dXJuIERhdGE6OmVtcHR5KCk7CiAgICAgfQotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRy
LCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFw
ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsK
KyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5
c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJp
dmF0ZSwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06
OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJl
dHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZkKTsKKyAgICByZXR1cm4gRGF0YTo6YWRv
cHRNYXAoV1RGTW92ZShtYXBwZWRGaWxlKSwgaGFuZGxlKTsKIH0KLSNlbHNlCi1EYXRhIGFkb3B0
QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9m
ZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zmc2V0LCBzaXpl
KTsKLX0KLSNlbmRpZgogCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0
YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKQEAgLTE3OSw0MCArMTQzLDI1IEBAIHN0YXRpYyBTYWx0
IG1ha2VTYWx0KCkKIAogT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5n
JiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIGF1dG8gY3BhdGggPSBGaWxlU3lzdGVt
OjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgYXV0byBmZCA9IG9wZW4oY3Bh
dGguZGF0YSgpLCBPX1JET05MWSwgMCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNS
ZWFkID0gcmVhZChmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7
Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0LnNpemUoKSkp
IHsKLSAgICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7Ci0KLSAgICAgICAgdW5saW5rKGNwYXRoLmRh
dGEoKSk7Ci0gICAgICAgIGZkID0gb3BlbihjcGF0aC5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVB
VCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0g
d3JpdGUoZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSkgPT0gc3RhdGljX2Nhc3Q8c3NpemVf
dD4oc2FsdC5zaXplKCkpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGlmICghc3VjY2Vz
cykKKyAgICBpZiAoZmlsZUV4aXN0cyhwYXRoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwor
ICAgICAgICBTYWx0IHNhbHQ7CisgICAgICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6
cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwg
c2FsdC5zaXplKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAg
ICAgIGlmIChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9
OworCisgICAgICAgIHJldHVybiBzYWx0OwogICAgIH0KLSAgICByZXR1cm4gc2FsdDsKLSNlbHNl
Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBieXRlc1JlYWQg
PSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
c2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgp
OworICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpV
c2VyKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0
LnNpemUoKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgaWYgKGJ5dGVz
UmVhZCAhPSBzYWx0LnNpemUoKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6
ZGVsZXRlRmlsZShwYXRoKTsKLSAgICAgICAgZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBh
dGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgICAgICBib29sIHN1Y2Nl
c3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIq
PihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKLSAgICAgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KICAgICByZXR1cm4gc2FsdDsKLSNlbmRpZgogfQogCiB9
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggZDc4ZDk4YjYxNzUwLi4z
N2I1OTY2NTZhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvR1JlZlB0clNvdXAuaD4KICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSA8
d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFNoYXJlZE1lbW9yeTsKQEAgLTUzLDE5ICs1OCwxNiBAQCBwdWJs
aWM6CiAgICAgfkRhdGEoKSB7IH0KIAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7Ci0jaWYgIU9T
KFdJTkRPV1MpCi0gICAgc3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGlu
dCBmZCk7Ci0jZW5kaWYKKyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YSYmLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAg
ICBEYXRhKE9TT2JqZWN0UHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6
OkJ1ZmZlcik7CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1
ZmZlcj4mJiwgaW50IGZkID0gLTEpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBE
YXRhKFZlY3Rvcjx1aW50OF90PiYmKTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1
ZmZlcj4mJiwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6
aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBEYXRhKFZh
cmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJik7CiAj
ZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFtX3NpemU7IH0KQEAgLTk0LDEwICs5NiwxMCBAQCBwcml2YXRlOgogI2VuZGlm
CiAjaWYgVVNFKFNPVVApCiAgICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVy
OwotICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0
Zm9ybUZpbGVIYW5kbGUgbV9maWxlRGVzY3JpcHRvciB7IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUgfTsKICNlbmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgVmVjdG9yPHVp
bnQ4X3Q+IG1fYnVmZmVyOworI2lmIFVTRShDVVJMKQorICAgIEJveDxWYXJpYW50PFZlY3Rvcjx1
aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+PiBtX2J1ZmZlcjsKICNlbmRpZgog
ICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVf
dCBtX3NpemUgeyAwIH07CkBAIC0xMDYsMTcgKzEwOCw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29u
Y2F0ZW5hdGUoY29uc3QgRGF0YSYsIGNvbnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25z
dCBEYXRhJiwgY29uc3QgRGF0YSYpOwotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1h
cEZpbGUoaW50LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRN
YXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6
ZV90KTsKLSNlbmRpZgotI2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9w
dEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVhbSosIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5k
aWYKLSNpZiAhT1MoV0lORE9XUykKIERhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNl
bmRpZgogRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBz
dGQ6OmFycmF5PHVpbnQ4X3QsIDg+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4
NzAwODcuLmNiNGFjMzhjNmE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KQEAgLTkyLDExICs5
MiwxMyBAQCBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCiAg
ICAgcmV0dXJuIHsgYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZV9jb25jYXQoYS5k
aXNwYXRjaERhdGEoKSwgYi5kaXNwYXRjaERhdGEoKSkpIH07CiB9CiAKLURhdGEgRGF0YTo6YWRv
cHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1h
cChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBs
YXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6
ZSgpOworICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIEFTU0VS
VChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7Ci0gICAgY2xvc2UoZmQpOwor
ICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CiAgICAgYXV0byBib2R5TWFwID0gYWRvcHRP
U09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNpemUsIGRpc3BhdGNoX2dldF9nbG9i
YWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIFttYXAsIHNpemVd
IHsKICAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7CiAgICAgfSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJs
LmNwcAppbmRleCBjZjQzMTU2YzVhMDMuLjE5MjQ4MmJmOWY0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3Vy
bC5jcHAKQEAgLTMwLDQwICszMCw0MiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBO
ZXR3b3JrQ2FjaGUgewogCiBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQorICAgIDogbV9idWZmZXIoQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YT4+OjpjcmVhdGUoVmVjdG9yPHVpbnQ4X3Q+KHNpemUpKSkKKyAg
ICAsIG1fc2l6ZShzaXplKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3Np
emUgPSBzaXplOwotICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIGRhdGEsIHNpemUpOworICAg
IG1lbWNweShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KCptX2J1ZmZlcikuZGF0YSgpLCBkYXRh
LCBzaXplKTsKIH0KIAotRGF0YTo6RGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
ZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhOjpEYXRhKFZhcmlhbnQ8VmVj
dG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJiBkYXRhKQorICAgIDog
bV9idWZmZXIoQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YT4+OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpCisgICAgLCBtX2lzTWFwKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+KCptX2J1ZmZlcikpCiB7
Ci0gICAgbV9idWZmZXIucmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgRmls
ZVN5c3RlbTo6c2Vla0ZpbGUoZmlsZSwgb2Zmc2V0LCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdp
bjo6QmVnaW5uaW5nKTsKLSAgICBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obV9idWZmZXIuZGF0YSgpKSwgc2l6ZSk7Ci0gICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGZpbGUpOwotfQotCi1EYXRhOjpEYXRhKFZlY3Rvcjx1aW50OF90PiYmIGJ1
ZmZlcikKLSAgICA6IG1fYnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKLXsKLSAgICBtX3NpemUgPSBt
X2J1ZmZlci5zaXplKCk7CisgICAgbV9zaXplID0gV1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisg
ICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKSAtPiBzaXplX3QgeyByZXR1
cm4gYnVmZmVyLnNpemUoKTsgfSwKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZURhdGEmIG1hcHBlZEZpbGUpIC0+IHNpemVfdCB7IHJldHVybiBtYXBwZWRGaWxlLnNpemUo
KTsgfQorICAgICk7CiB9CiAKIERhdGEgRGF0YTo6ZW1wdHkoKQogewotICAgIHJldHVybiB7IH07
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZl
cikgfTsKIH0KIAogY29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fYnVmZmVyLmRhdGEoKTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKCptX2J1ZmZlciwKKyAgICAgICAg
W10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0
dXJuIGJ1ZmZlci5kYXRhKCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBtYXBwZWRGaWxlKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4obWFwcGVkRmlsZS5kYXRhKCkpOyB9CisgICAgKTsKIH0KIAog
Ym9vbCBEYXRhOjppc051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5pc0VtcHR5
KCk7CisgICAgcmV0dXJuICFtX2J1ZmZlcjsKIH0KIAogYm9vbCBEYXRhOjphcHBseShjb25zdCBG
dW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKQEAg
LTcxLDIxICs3MywzNyBAQCBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29u
c3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAogICAgIGlmIChpc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVyLnNpemUoKSk7
CisgICAgcmV0dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0
YSgpKSwgc2l6ZSgpKTsKIH0KIAogRGF0YSBEYXRhOjpzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBz
aXplX3Qgc2l6ZSkgY29uc3QKIHsKLSAgICByZXR1cm4geyBtX2J1ZmZlci5kYXRhKCkgKyBvZmZz
ZXQsIHNpemUgfTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgcmV0dXJuIHsgZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CiB9CiAKIERhdGEgY29uY2F0ZW5h
dGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKIHsKKyAgICBpZiAoYS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGI7CisgICAgaWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBh
OworCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihhLnNpemUoKSArIGIuc2l6ZSgpKTsKICAg
ICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYS5kYXRhKCksIGEuc2l6ZSgpKTsKICAgICBtZW1jcHko
YnVmZmVyLmRhdGEoKSArIGEuc2l6ZSgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOwogICAgIHJldHVy
biBEYXRhKFdURk1vdmUoYnVmZmVyKSk7CiB9CiAKK0RhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgZmQpCit7CisgICAgQVNTRVJUKG1hcHBlZEZpbGUuZGF0YSgpKTsKKyAgICBGaWxl
U3lzdGVtOjpjbG9zZUZpbGUoZmQpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShtYXBwZWRGaWxl
KSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAppbmRleCA1MTVjMDllYmJmZDMuLmQzYjc5ZTAxNGE3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKQEAgLTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRh
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRH
UmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGNvcGllZERhdGEsIHNpemUsIGNvcGllZERh
dGEsIGZhc3RGcmVlKSk7CiB9CiAKLURhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1
ZmZlciwgaW50IGZkKQorRGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIp
CiAgICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZl
ci0+bGVuZ3RoIDogMCkKLSAgICAsIG1faXNNYXAobV9zaXplICYmIGZkICE9IC0xKQorICAgICwg
bV9pc01hcChtX3NpemUgJiYgRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAK
QEAgLTEwOCwxMiArMTA4LDEyIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBl
cigpCiAgICAgewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmls
ZURlc2NyaXB0b3IpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0
b3IpOwogICAgIH0KIAogICAgIHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQg
ZmlsZURlc2NyaXB0b3I7CisgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVE
ZXNjcmlwdG9yOwogfTsKIAogc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVy
KiB3cmFwcGVyKQpAQCAtMTIxLDggKzEyMSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFw
cGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURhdGEg
RGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRh
OjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBl
ZEZpbGUuc2l6ZSgpOworICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwog
ICAgIEFTU0VSVChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CiAgICAgTWFw
V3JhcHBlciogd3JhcHBlciA9IG5ldyBNYXBXcmFwcGVyIHsgbWFwLCBzaXplLCBmZCB9OwpAQCAt
MTMwLDIxICsxMzIsMTQgQEAgRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBz
aXplLCBpbnQgZmQpCiAgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0j
aWYgVVNFKEdMSUIpICYmICFQTEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmls
ZUlPU3RyZWFtKiBzdHJlYW0sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJ
bnB1dFN0cmVhbSogaW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdf
SU9fU1RSRUFNKHN0cmVhbSkpOwotICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2Vk
X2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVy
biBhZG9wdEFuZE1hcEZpbGUoZmQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRy
PFNoYXJlZE1lbW9yeT4gRGF0YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAg
ICBpZiAoaXNOdWxsKCkgfHwgIWlzTWFwKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZl
ci0+ZGF0YSksIG1fYnVmZmVyLT5sZW5ndGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1
dFN0cmVhbSogaW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9f
U1RSRUFNKG1fZmlsZURlc2NyaXB0b3IpKTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRv
cl9iYXNlZF9nZXRfZmQoR19GSUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAg
ICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVy
LT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3
b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzMC4uN2Ew
ZWM1ZTE0ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKQEAgLTUzLDQ4ICs1MywxMyBA
QAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFP
UyhXSU5ET1dTKQotc3RhdGljIERpcmVjdG9yeUVudHJ5VHlwZSBkaXJlY3RvcnlFbnRyeVR5cGUo
dWludDhfdCBkdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGR0eXBlKSB7Ci0gICAgY2FzZSBEVF9ESVI6
Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeTsKLSAgICBjYXNl
IERUX1JFRzoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIERp
cmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICB9Ci0gICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5
VHlwZTo6RmlsZTsKLX0KLSNlbmRpZgotCiB2b2lkIHRyYXZlcnNlRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgRnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgRGlyZWN0b3J5
RW50cnlUeXBlKT4mIGZ1bmN0aW9uKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIERJUiogZGly
ID0gb3BlbmRpcihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0
YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIGRpcmVudCogZHA7Ci0g
ICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKLSAgICAgICAgaWYgKGRwLT5kX3R5cGUg
IT0gRFRfRElSICYmIGRwLT5kX3R5cGUgIT0gRFRfUkVHKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAgICBpZiAoIXN0
cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgYXV0byBuYW1lU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lKTsK
LSAgICAgICAgaWYgKG5hbWVTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZnVuY3Rpb24obmFtZVN0cmluZywgZGlyZWN0b3J5RW50cnlUeXBlKGRwLT5kX3R5
cGUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLSNlbHNlCi0gICAgYXV0byBlbnRyaWVz
ID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoKTsKKyAgICBhdXRvIGVudHJpZXMgPSBG
aWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9zKTsKICAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogZW50cmllcykgewogICAgICAgICBhdXRvIHR5cGUgPSBGaWxlU3lzdGVtOjpmaWxlSXNE
aXJlY3RvcnkoZW50cnksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5v
KSA/IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5IDogRGlyZWN0b3J5RW50cnlUeXBlOjpG
aWxlOwotICAgICAgICBmdW5jdGlvbihlbnRyeSwgdHlwZSk7CisgICAgICAgIGZ1bmN0aW9uKEZp
bGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShlbnRyeSksIHR5cGUpOwogICAgIH0KLSNlbmRpZgog
fQogCiB2b2lkIGRlbGV0ZURpcmVjdG9yeVJlY3Vyc2l2ZWx5KGNvbnN0IFN0cmluZyYgcGF0aCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzM2M5
YTBjYmU3ZTEuLjk0NmEyZTVjN2EyOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAyLTIwICBDaHJpc3RvcGhl
ciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQg
TmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGZvciBGaWxlU3lzdGVtOjpjcmVhdGVG
aWxlCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoK
KwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5vbG9neSB0byAicmVuZGVyaW5n
IHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVT
eXN0ZW0uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAK
aW5kZXggZDBlNTE1MWE5OTkyLi4wODM5MmE4ZmEzZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCkBAIC0xNDUsNCArMTQ1LDEwIEBAIFRFU1RfRihG
aWxlU3lzdGVtVGVzdCwgVW5pY29kZURpcmVjdG9yeU5hbWUpCiAgICAgRVhQRUNUX1RSVUUoZXhw
ZWN0ZWREaXJlY3RvcnlOYW1lID09IGRpcmVjdG9yeU5hbWUpOwogfQogCitURVNUX0YoRmlsZVN5
c3RlbVRlc3QsIENyZWF0ZUZpbGVXaXRoRXhpc3RpbmdQYXRoKQoreworICAgIGF1dG8gaGFuZGxl
ID0gRmlsZVN5c3RlbTo6Y3JlYXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6Rmls
ZU9wZW5Nb2RlOjpSZWFkV3JpdGUpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjppc0hh
bmRsZVZhbGlkKGhhbmRsZSkpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391362</attachid>
            <date>2020-02-20 17:39:27 -0800</date>
            <delta_ts>2020-02-25 00:49:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>39766</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWE2MzVkNDViOTguLjM5YTg2NjVmNjAwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKwor
ICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBVcGRhdGUgV2ViR0wyIHJlc3Vs
dHMgd2l0aCBBTkdMRSBiYWNrZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA2ODZiN2M5ZDE3NWUuLjBiZGVlNTU0YTljNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTYx
LDcgKzExNjEsMjAgQEAgY3J5cHRvL3N1YnRsZS93cmFwLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVy
cy5odG1sIFsgU2tpcCBdCiAKIGh0dHAvdGVzdHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVz
dHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAgXQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQor
CisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgoraHR0cC90ZXN0cy9jYWNoZS9jYW5jZWwtbXVs
dGlwbGUtcG9zdC14aHJzLmh0bWwgWyBGYWlsdXJlIF0KKworIyBmYWlscyBiZWNhdXNlIG9mIGNv
bnZlcnNpb24gdG8gZXBvY2ggYmVoYXZpb3Igc3BlY2lmaWMgdG8gTWFjCitodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1sYXN0LW1vZGlmaWVkLmh0bWwgWyBGYWlsdXJlIF0K
KworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0dHAvdGVzdHMvY2FjaGUvaWZyYW1lLTMw
NC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL25ldHdvcmstZXJyb3It
ZHVyaW5nLXJldmFsaWRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL3Bh
cnRpdGlvbmVkLWNhY2hlLWlmcmFtZS5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hl
L3BhcnRpdGlvbmVkLWNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvd2ls
bHNlbmRyZXF1ZXN0LXJldHVybnMtbnVsbC1mb3ItbWVtb3J5LWNhY2hlLWxvYWQuaHRtbCBbIEZh
aWx1cmUgXQorCiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y2FudmFzIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRz
YW5kYm94IFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYxNzQ2NzEwYjFiZC4uOTUyZjkyZmMxOGRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBz
b255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5
IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6Cisg
ICAgICAgIEFkZGVkIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIGZsYWcgd2hlbiBvcGVuaW5nIGZpbGVz
LgorICAgICAgICBSZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgdGhlIGxpc3REaXJlY3Rvcnkg
ZmlsdGVyIHNpbmNlIHRoZSBkZWZhdXQKKyAgICAgICAgU3RyaW5nKCkgZmlsdGVyIGRvZXNuJ3Qg
bWF0Y2ggYWxsIGZpbGVzIG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICBBZGRlZCBGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSB0byBiZSB1c2VkIHdpdGggUmVhZFdyaXRlIE1hcHBlZEZpbGVE
YXRhLgorICAgICAgICBBZGRlZCBGaWxlU3lzdGVtOjpjcmVhdGVGaWxlIHdoaWNoIGF0dGVtcHMg
dG8gY3JlYXRlIGEgZmlsZSBhbmQgZmFpbHMgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuCisK
KyAgICAgICAgKiB3dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHA6CisgICAgICAgICogd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAgIEFkZGVkIChTX0lSVVNSIHwgU19JV1VT
UikgZmlsZSBvcGVuIG1vZGVzLgorCisgICAgICAgICogd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNw
cDoKKyAgICAgICAgSW1wbGVtZW50IGdldFZvbHVtZUZyZWVTcGFjZSBzaW5jZSBzb21lIG9mIHRo
ZSB0ZXN0cyB1c2UgaXQgd2hlbiB0b2dnbGluZyBjYWNoZS4KKyAgICAgICAgCisgICAgICAgICog
d3RmL3dpbi9QYXRoV2Fsa2VyLmNwcDoKKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0
ZXJtaW5vbG9neSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKaW5kZXgg
NzJmOTUzZWFiM2ZjLi44NDg1MjFlMjcyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCkBAIC0yODcs
MTcgKzI4NywxNyBAQCBNYXBwZWRGaWxlRGF0YTo6fk1hcHBlZEZpbGVEYXRhKCkKICAgICB1bm1h
cFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7CiB9CiAKLSNpZiBIQVZFKE1NQVAp
Ci0KLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQorTWFwcGVkRmlsZURhdGE6Ok1h
cHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1v
ZGUsIGJvb2wmIHN1Y2Nlc3MpCiB7Ci0gICAgYXV0byBmZCA9IG9wZW5GaWxlKGZpbGVQYXRoLCBG
aWxlT3Blbk1vZGU6OlJlYWQpOworICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxlUGF0aCwgRmls
ZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKIAotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFu
ZGxlKGZkLCBtb2RlKTsKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwgRmlsZVN5c3Rl
bTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBtYXBNb2RlKTsKICAgICBjbG9zZUZpbGUoZmQpOwogfQog
Ci1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUpCisjaWYgSEFWRShNTUFQKQorCitib29sIE1hcHBl
ZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVP
cGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSkKIHsKICAgICBpZiAoIWlz
SGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0LDcgKzMy
NCwyNCBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9GSUxF
IHwgKG1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJlZCA/IE1BUF9TSEFSRUQgOiBNQVBfUFJJ
VkFURSksIGZkLCAwKTsKKyAgICBpbnQgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAg
c3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgorICAgICAg
ICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
aWxlT3Blbk1vZGU6OldyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfV1JJVEU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAg
ICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKKyAgICAgICAgYnJl
YWs7CisjaWYgT1MoREFSV0lOKQorICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpFdmVudHNPbmx5Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQq
IGRhdGEgPSBtbWFwKDAsIHNpemUsIHBhZ2VQcm90ZWN0aW9uLCBNQVBfRklMRSB8IChtYXBNb2Rl
ID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBm
ZCwgMCk7CiAKICAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKSB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA4MDVhMGU0YjE2ZmMuLmM1ZDMxNDJmYzIzNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uaApAQCAtNzksMTEgKzc5LDE3IEBAIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRs
ZSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlID0gLTE7CiBlbnVtIGNsYXNzIEZpbGVPcGVuTW9k
ZSB7CiAgICAgUmVhZCwKICAgICBXcml0ZSwKKyAgICBSZWFkV3JpdGUsCiAjaWYgT1MoREFSV0lO
KQogICAgIEV2ZW50c09ubHksCiAjZW5kaWYKIH07CiAKK2VudW0gY2xhc3MgRmlsZUFjY2Vzc1Bl
cm1pc3Npb24gOiBib29sIHsKKyAgICBVc2VyLAorICAgIEFsbAorfTsKKwogZW51bSBjbGFzcyBG
aWxlU2Vla09yaWdpbiB7CiAgICAgQmVnaW5uaW5nLAogICAgIEN1cnJlbnQsCkBAIC0xMzEsNyAr
MTM3LDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TWV0YWRhdGFVUkwoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHVybFN0cmkKIGJvb2wgY2FuRXhjbHVkZUZyb21CYWNr
dXAoKTsgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBmaWxlIGNhbiBldmVyIGJlIGV4Y2x1ZGVkIGZy
b20gYmFja3VwLgogYm9vbCBleGNsdWRlRnJvbUJhY2t1cChjb25zdCBTdHJpbmcmKTsgLy8gUmV0
dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCiAKLVdURl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8U3Ry
aW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0
ZXIgPSBTdHJpbmcoKSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPFN0cmluZz4gbGlzdERp
cmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKTsKIAogV1RG
X0VYUE9SVF9QUklWQVRFIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0
cmluZyYpOwogU3RyaW5nIHN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3Qg
Y2hhciopOwpAQCAtMTQwLDcgKzE0Niw3IEBAIGlubGluZSBib29sIGlzSGFuZGxlVmFsaWQoY29u
c3QgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpIHsgcmV0dXJuIGhhbmRsZSAhPSBpCiAKIC8v
IFByZWZpeCBpcyB3aGF0IHRoZSBmaWxlbmFtZSBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aCwgbm90
IHRoZSBmdWxsIHBhdGguCiBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIG9wZW5UZW1wb3JhcnlG
aWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKLVdURl9FWFBP
UlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUpOworV1RGX0VYUE9SVF9QUklWQVRFIFBsYXRmb3JtRmlsZUhhbmRsZSBv
cGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSwgRmlsZUFjY2Vzc1Blcm1p
c3Npb24gPSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIC8vIFJldHVybnMgdGhlIHJlc3Vs
dGluZyBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGlmIHN1Y2Nlc3NmdWws
IC0xIG90aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJVkFURSBsb25nIGxvbmcgc2Vla0ZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbik7CkBAIC0x
NDksNiArMTU1LDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJ1bmNhdGVGaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgaW50
IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCk7CiAvLyBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIGlmIHN1
Y2Nlc3NmdWwsIC0xIG90aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJVkFURSBpbnQgcmVhZEZyb21G
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIGNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uID0gRmlsZUFjY2Vzc1Blcm1p
c3Npb246OkFsbCk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3Bl
bkFuZExvY2tGaWxlKGNvbnN0IFN0cmluZyYsIEZpbGVPcGVuTW9kZSwgT3B0aW9uU2V0PEZpbGVM
b2NrTW9kZT4gPSBGaWxlTG9ja01vZGU6OkV4Y2x1c2l2ZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCB1bmxvY2tBbmRDbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlKTsKQEAgLTIwNiw2ICsy
MTMsNyBAQCBwdWJsaWM6CiAgICAgTWFwcGVkRmlsZURhdGEoTWFwcGVkRmlsZURhdGEmJik7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNjZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgTWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlLCBNYXBwZWRGaWxlTW9kZSwgYm9v
bCYgc3VjY2Vzcyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRm
b3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vz
cyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NYXBwZWRGaWxlRGF0YSgpOwogICAgIE1hcHBl
ZEZpbGVEYXRhJiBvcGVyYXRvcj0oTWFwcGVkRmlsZURhdGEmJik7CiAKQEAgLTIxNiwxNSArMjI0
LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBsZWFrSGFuZGxlKCkgeyByZXR1cm4gc3RkOjpleGNo
YW5nZShtX2ZpbGVEYXRhLCBudWxscHRyKTsgfQogCiBwcml2YXRlOgotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBNYXBwZWRGaWxl
TW9kZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpOwogCiAgICAgdm9pZCog
bV9maWxlRGF0YSB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX2ZpbGVTaXplIHsgMCB9Owog
fTsKIAotaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQoraW5saW5l
IE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQoreworICAgIHN1Y2Nlc3Mg
PSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgRmlsZU9wZW5Nb2RlOjpSZWFkLCBtYXBNb2RlKTsKK30K
KworaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUs
IGJvb2wmIHN1Y2Nlc3MpCiB7Ci0gICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBt
b2RlKTsKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUsIG9wZW5Nb2RlLCBtYXBN
b2RlKTsKIH0KIAogaW5saW5lIE1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShNYXBwZWRG
aWxlRGF0YSYmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRl
eCA4NmMwNGY5ZDVlMTMuLmZlOTYwZTBlMDRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUo
Y29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAotUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQ
bGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1v
ZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKIHsKICAgICBhdXRvIGZp
bGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAgIGlmICghdmFsaWRS
ZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCkBAIC0zNDgsMTYgKzM0OCwzMiBAQCBQbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkK
ICAgICBHUmVmUHRyPEdGaWxlSU9TdHJlYW0+IGlvU3RyZWFtOwogICAgIGlmIChtb2RlID09IEZp
bGVPcGVuTW9kZTo6UmVhZCkKICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29w
ZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBlbHNlIGlm
IChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUpIHsKKyAgICBlbHNlIGlmIChtb2RlID09IEZp
bGVPcGVuTW9kZTo6V3JpdGUgfHwgbW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSkgewog
ICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmls
ZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKICAg
ICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxl
LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlv
U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdf
RklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lvbkZsYWcgPSAocGVybWlzc2lvbiA9
PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklMRV9DUkVBVEVfTk9ORSA6IEdfRklM
RV9DUkVBVEVfUFJJVkFURTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmls
ZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gaW9TdHJlYW0ubGVha1Jl
ZigpOwogfQogCitQbGF0Zm9ybUZpbGVIYW5kbGUgY3JlYXRlRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbikKK3sKKyAg
ICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlm
ICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lLmRhdGEoKSkpOworICAgIEdSZWZQdHI8R0Zp
bGVJT1N0cmVhbT4gaW9TdHJlYW07CisgICAgR0ZpbGVDcmVhdGVGbGFncyBwZXJtaXNzaW9uRmxh
ZyA9IChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpID8gR19GSUxFX0NS
RUFURV9OT05FIDogR19GSUxFX0NSRUFURV9QUklWQVRFOworICAgIGlvU3RyZWFtID0gYWRvcHRH
UmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBu
dWxscHRyLCBudWxscHRyKSk7CisKKyAgICByZXR1cm4gaW9TdHJlYW0ubGVha1JlZigpOworfQor
CiB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBpZiAo
IWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4
L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCmluZGV4IDI3ODM5ODgzYTFhMi4uNWVjYzExYTk0MzJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRm
b3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBt
b2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24pCiB7CiAgICAg
Q1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIApAQCAtODcs
MTggKzg3LDY2IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICByZXR1cm4gaW52YWxpZFBsYXRmb3JtRmls
ZUhhbmRsZTsKIAogICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOwotICAgIGlmIChtb2RlID09IEZp
bGVPcGVuTW9kZTo6UmVhZCkKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVu
TW9kZTo6UmVhZDoKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwotICAgIGVsc2Ug
aWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGaWxlT3Blbk1vZGU6OldyaXRlOgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fV1JPTkxZ
IHwgT19DUkVBVCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVu
TW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fUkRXUiB8IE9fQ1JF
QVQpOworICAgICAgICBicmVhazsKICNpZiBPUyhEQVJXSU4pCi0gICAgZWxzZSBpZiAobW9kZSA9
PSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHkpCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50
c09ubHk6CiAgICAgICAgIHBsYXRmb3JtRmxhZyB8PSBPX0VWVE9OTFk7CisgICAgICAgIGJyZWFr
OworI2VuZGlmCisgICAgfQorCisgICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAo
cGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlz
c2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9u
ID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9
IChTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdP
VEgpOworCisgICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIHBlcm1p
c3Npb25GbGFnKTsKK30KKworUGxhdGZvcm1GaWxlSGFuZGxlIGNyZWF0ZUZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlz
c2lvbikKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOworCisgICAgaWYgKGZzUmVwLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gaW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZTsKKworICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOworICAgIHN3aXRj
aCAobW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgorICAgICAgICBwbGF0Zm9y
bUZsYWcgfD0gT19SRE9OTFk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2Rl
OjpXcml0ZToKKyAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fV1JPTkxZOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBwbGF0Zm9ybUZs
YWcgfD0gT19SRFdSOworICAgICAgICBicmVhazsKKyNpZiBPUyhEQVJXSU4pCisgICAgY2FzZSBG
aWxlT3Blbk1vZGU6OkV2ZW50c09ubHk6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
I2VuZGlmCisgICAgfQorCisgICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAocGVy
bWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlzc2lv
bkZsYWcgfD0gKFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9uID09
IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChT
X0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgp
OwogCi0gICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIDA2NjYpOwor
ICAgIHJldHVybiBvcGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnIHwgT19DUkVBVCB8IE9f
RVhDTCwgcGVybWlzc2lvbkZsYWcpOwogfQogCisKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmls
ZUhhbmRsZSYgaGFuZGxlKQogewogICAgIGlmIChpc0hhbmRsZVZhbGlkKGhhbmRsZSkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCA5MzM0YWMwMjlkNTcuLjk4ZDU2OTUy
Yjg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtNDIxLDcgKzQyMSw3
IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVI
YW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4gcHJvcG9zZWRQYXRoOwogfQogCi1QbGF0Zm9ybUZp
bGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkK
K1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVu
TW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbikKIHsKICAgICBEV09SRCBkZXNpcmVkQWNj
ZXNzID0gMDsKICAgICBEV09SRCBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQzNiwxNCAr
NDM2LDM2IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19XUklU
RTsKICAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CiAgICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBH
RU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFOworICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9u
ID0gT1BFTl9BTFdBWVM7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFN0cmluZyBkZXN0
aW5hdGlvbiA9IHBhdGg7CiAgICAgcmV0dXJuIENyZWF0ZUZpbGUoZGVzdGluYXRpb24ud2lkZUNo
YXJhY3RlcnMoKS5kYXRhKCksIGRlc2lyZWRBY2Nlc3MsIHNoYXJlTW9kZSwgMCwgY3JlYXRpb25E
aXNwb3NpdGlvbiwgRklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKIH0KIAorUGxhdGZvcm1GaWxl
SGFuZGxlIGNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwg
RmlsZUFjY2Vzc1Blcm1pc3Npb24pCit7CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9IDA7Cisg
ICAgRFdPUkQgc2hhcmVNb2RlID0gMDsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEZp
bGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfUkVBRDsK
KyAgICAgICAgc2hhcmVNb2RlID0gRklMRV9TSEFSRV9SRUFEOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBHRU5F
UklDX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdy
aXRlOgorICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklU
RTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIENyZWF0ZUZpbGUocGF0aC53
aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgZGVzaXJlZEFjY2Vzcywgc2hhcmVNb2RlLCAwLCBDUkVB
VEVfTkVXLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDApOworfQorCiB2b2lkIGNsb3NlRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBpZiAoaXNIYW5kbGVWYWxpZChoYW5k
bGUpKSB7CkBAIC01NDksOSArNTcxLDE0IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3Rvcnko
Y29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsdGVyKQogICAgIHJldHVy
biBlbnRyaWVzOwogfQogCi1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmLCB1
aW50NjRfdCYpCitib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVp
bnQ2NF90JiBmcmVlU3BhY2UpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFVMQVJHRV9JTlRF
R0VSIGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFj
ZUV4VyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9D
YWxsZXIsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBm
cmVlU3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENT
dHJpbmcmIGZzRmlsZSkKQEAgLTYwMywxNSArNjMwLDcgQEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUo
dm9pZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIp
OwogfQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxl
UGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKLXsKLSAgICBhdXRvIGZp
bGUgPSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklD
X1JFQUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwg
bnVsbHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAg
ICBjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5k
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCitib29sIE1hcHBl
ZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVP
cGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZh
bGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyNSwxMSArNjQ0LDI4IEBA
IGJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhh
bmRsZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGF1dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9S
RUFET05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdPUkQgcGFnZVByb3RlY3Rpb24gPSBQQUdF
X1JFQURPTkxZOworICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAg
IHN3aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAg
ICAgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgICAgICBkZXNpcmVkQWNjZXNz
ID0gRklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6
OldyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRFdSSVRFOworICAgICAg
ICBkZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFH
RV9SRUFEV1JJVEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURSB8IEZJ
TEVfTUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9
IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAs
IG51bGxwdHIpOwogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwg
MCwgc2l6ZSk7CisgICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJl
ZEFjY2VzcywgMCwgMCwgc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYg
KCFtX2ZpbGVEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtl
ci5jcHAKaW5kZXggOGQ3ZDdhYzY4Mzg1Li42ODhmZWRkNTlmYTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0
aFdhbGtlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIFBhdGhXYWxr
ZXI6OlBhdGhXYWxrZXIoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcGF0
dGVybikKIHsKLSAgICBTdHJpbmcgcGF0aCA9IGRpcmVjdG9yeSArICJcXCIgKyBwYXR0ZXJuOwor
ICAgIFN0cmluZyBwYXRoID0gbWFrZVN0cmluZyhkaXJlY3RvcnksICdcXCcsIHBhdHRlcm4pOwog
ICAgIG1faGFuZGxlID0gOjpGaW5kRmlyc3RGaWxlVyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0
YSgpLCAmbV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2MTcyYWNkZDM0NjIuLjRjM2FkOTBlNTJh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wMi0xOCAgQ2hyaXN0b3BoZXIgUmVp
ZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdv
cmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoK
KyAgICAgICAgRW5zdXJlIHRoYXQgdGhlIENhY2hlU3RvcmFnZSBkaXJlY3RvcnkgaXMgYWN0dWFs
bHkgYmVpbmcgY3JlYXRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGEuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhQ29jb2EubW06CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YVNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uY3BwOgorICAgICAgICBVc2UgbW9yZSBGaWxlU3lzdGVtIGZ1bmN0aW9uYWxp
dHkgdG8gc2hhcmUgY29kZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwOgorICAgICAgICBVc2UgT3B0aW9u
YWw8VmVjdG9yPiBmb3IgbV9idWZmZXIgc2luY2Ugd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGlz
RW1wdHkgYW5kIGlzTnVsbC4KKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5v
bG9neSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTFkZjNiODBhMzZhLi5lNDQyMzRjNWU2Nzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CkBAIC00NTQsOCArNDU0LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWluCiAgICAgYXV0byBp
c05ld0VudHJ5ID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHNlc3Npb25J
RCwgW2RlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgJmNhY2hlUm9vdFBhdGhd
IHsKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+
KGNhY2hlUm9vdFBhdGgsIGRlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSk7CiAg
ICAgfSkuaXNOZXdFbnRyeTsKLSAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICBpZiAoaXNOZXdFbnRy
eSkgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY2FjaGVS
b290UGF0aEhhbmRsZSk7CisgICAgICAgIGlmICghY2FjaGVSb290UGF0aC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGNhY2hlUm9vdFBhdGgpKTsKKyAgICB9
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCmluZGV4IDc1YWE5MDVh
YjY4YS4uODgzZDYzOGE5YmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAog
I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9t
TnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmICFPUyhXSU5ET1dT
KQogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CkBAIC0zOSwyNiArMzgsMjMgQEAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLSNpZiAhT1MoV0lORE9XUykKIERh
dGEgRGF0YTo6bWFwVG9GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBpbnQg
ZmQgPSBvcGVuKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRh
KCksIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IgLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0gICAg
aWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChmdHJ1bmNhdGUoZmQs
IG1fc2l6ZSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBhdXRvIGhhbmRsZSA9IEZp
bGVTeXN0ZW06OmNyZWF0ZUZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBpZiAo
IUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxlKSB8fCAhRmlsZVN5c3RlbTo6dHJ1bmNh
dGVGaWxlKGhhbmRsZSwgbV9zaXplKSkgeworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUo
aGFuZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgCiAgICAgRmlsZVN5c3Rl
bTo6bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgocGF0aCk7Ci0KLSAgICB2b2lkKiBtYXAg
PSBtbWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJF
RCwgZmQsIDApOwotICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShm
ZCk7CisgICAgYm9vbCBzdWNjZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1h
cHBlZEZpbGUoaGFuZGxlLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlNoYXJlZCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNj
ZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAorICAgIHZvaWQqIG1hcCA9IGNvbnN0X2Nhc3Q8dm9pZCo+KG1h
cHBlZEZpbGUuZGF0YSgpKTsKICAgICB1aW50OF90KiBtYXBEYXRhID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KG1hcCk7CiAgICAgYXBwbHkoWyZtYXBEYXRhXShjb25zdCB1aW50OF90KiBieXRlcywg
c2l6ZV90IGJ5dGVzU2l6ZSkgewogICAgICAgICBtZW1jcHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVz
U2l6ZSk7CkBAIC02Niw1MiArNjIsMjMgQEAgRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIAorI2lmIE9T
KFdJTkRPV1MpCisgICAgRFdPUkQgb2xkUHJvdGVjdGlvbjsKKyAgICBWaXJ0dWFsUHJvdGVjdCht
YXAsIG1fc2l6ZSwgRklMRV9NQVBfUkVBRCwgJm9sZFByb3RlY3Rpb24pOworICAgIEZsdXNoVmll
d09mRmlsZShtYXAsIG1fc2l6ZSk7CisjZWxzZQogICAgIC8vIERyb3AgdGhlIHdyaXRlIHBlcm1p
c3Npb24uCiAgICAgbXByb3RlY3QobWFwLCBtX3NpemUsIFBST1RfUkVBRCk7CiAKICAgICAvLyBG
bHVzaCAoYXN5bmNocm9ub3VzbHkpIHRvIGZpbGUsIHR1cm5pbmcgdGhpcyBpbnRvIGNsZWFuIG1l
bW9yeS4KICAgICBtc3luYyhtYXAsIG1fc2l6ZSwgTVNfQVNZTkMpOwotCi0gICAgcmV0dXJuIERh
dGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBmZCk7Ci19Ci0jZWxzZQotRGF0YSBEYXRhOjptYXBU
b0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAotewotICAgIGF1dG8gZmlsZSA9IEZpbGVT
eXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwot
ICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSwgc2l6ZSgpKSA8IDApCi0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgcmV0dXJuIERhdGEoVmVjdG9yPHVpbnQ4X3Q+KG1fYnVmZmVyKSk7Ci19CiAjZW5k
aWYKIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBtYXBGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17
Ci0gICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwotICAgIGlmIChmc3Rh
dChmZCwgJnN0YXQpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQotICAgIHNpemVfdCBzaXplID0gc3RhdC5zdF9zaXplOwotICAgIGlmICghc2l6
ZSkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBEYXRhOjplbXB0eSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIDAsIHNpemUpOworICAgIHJl
dHVybiBEYXRhOjphZG9wdE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2Vu
ZGlmCiAKLURhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCitEYXRhIG1hcEZpbGUoY29u
c3QgY2hhciogcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9XUykKLSAgICByZXR1cm4gbWFwRmlsZShG
aWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSNlbHNl
CiAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQo
ZmlsZSkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMTksMzEgKzg2LDI4IEBAIERhdGEgbWFw
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZShmaWxlLCBzaXplKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gYWRvcHRBbmRN
YXBGaWxlKGZpbGUsIDAsIHNpemUpOwotI2VuZGlmCiB9CiAKLSNpZiAhT1MoV0lORE9XUykKLURh
dGEgYWRvcHRBbmRNYXBGaWxlKGludCBmZCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitE
YXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBtYXBGaWxlKEZp
bGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOworfQorCitE
YXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoIXNpemUpIHsKLSAgICAg
ICAgY2xvc2UoZmQpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAg
ICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CiAgICAgfQotCi0gICAgdm9pZCogbWFwID0gbW1h
cChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAg
ICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgIGJvb2wg
c3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRs
ZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
TW9kZTo6UHJpdmF0ZSwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZp
bGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAsIHNpemUsIGZkKTsKKyAgICByZXR1cm4g
RGF0YTo6YWRvcHRNYXAoV1RGTW92ZShtYXBwZWRGaWxlKSwgaGFuZGxlKTsKIH0KLSNlbHNlCi1E
YXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwg
c2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zm
c2V0LCBzaXplKTsKLX0KLSNlbmRpZgogCiBTSEExOjpEaWdlc3QgY29tcHV0ZVNIQTEoY29uc3Qg
RGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsKQEAgLTE3OSw0MCArMTQzLDI1IEBAIHN0
YXRpYyBTYWx0IG1ha2VTYWx0KCkKIAogT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29u
c3QgU3RyaW5nJiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIGF1dG8gY3BhdGggPSBG
aWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgYXV0byBmZCA9
IG9wZW4oY3BhdGguZGF0YSgpLCBPX1JET05MWSwgMCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1
dG8gYnl0ZXNSZWFkID0gcmVhZChmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKTsKLSAgICBj
bG9zZShmZCk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0
LnNpemUoKSkpIHsKLSAgICAgICAgc2FsdCA9IG1ha2VTYWx0KCk7Ci0KLSAgICAgICAgdW5saW5r
KGNwYXRoLmRhdGEoKSk7Ci0gICAgICAgIGZkID0gb3BlbihjcGF0aC5kYXRhKCksIE9fV1JPTkxZ
IHwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICAgICAgYm9vbCBz
dWNjZXNzID0gd3JpdGUoZmQsIHNhbHQuZGF0YSgpLCBzYWx0LnNpemUoKSkgPT0gc3RhdGljX2Nh
c3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGlm
ICghc3VjY2VzcykKKyAgICBpZiAoZmlsZUV4aXN0cyhwYXRoKSkgeworICAgICAgICBhdXRvIGZp
bGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OlJlYWQpOworICAgICAgICBTYWx0IHNhbHQ7CisgICAgICAgIGF1dG8gYnl0ZXNSZWFkID0gRmls
ZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQu
ZGF0YSgpKSwgc2FsdC5zaXplKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmls
ZSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgIT0gc2FsdC5zaXplKCkpCiAgICAgICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgICAgIHJldHVybiBzYWx0OwogICAgIH0KLSAgICByZXR1cm4gc2Fs
dDsKLSNlbHNlCi0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmls
ZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBi
eXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisKKyAgICBTYWx0IHNhbHQgPSBt
YWtlU2FsdCgpOworICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJt
aXNzaW9uOjpVc2VyKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgp
KSA9PSBzYWx0LnNpemUoKTsKICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAg
aWYgKGJ5dGVzUmVhZCAhPSBzYWx0LnNpemUoKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQo
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKLSAgICAgICAgZmlsZSA9IEZpbGVTeXN0ZW06Om9w
ZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9j
YXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKLSAg
ICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3Mp
Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgIH0KICAgICByZXR1cm4gc2FsdDsKLSNlbmRp
ZgogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKaW5kZXggZDc4ZDk4
YjYxNzUwLi4zN2I1OTY2NTZhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNvdXAuaD4KICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisj
aW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNoYXJlZE1lbW9yeTsKQEAgLTUzLDE5ICs1OCwx
NiBAQCBwdWJsaWM6CiAgICAgfkRhdGEoKSB7IH0KIAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7
Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgc3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBz
aXplX3QsIGludCBmZCk7Ci0jZW5kaWYKKyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcChGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YSYmLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBN
YXAgfTsKICAgICBEYXRhKE9TT2JqZWN0UHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9
IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQ
dHI8U291cEJ1ZmZlcj4mJiwgaW50IGZkID0gLTEpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBl
eHBsaWNpdCBEYXRhKFZlY3Rvcjx1aW50OF90PiYmKTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBs
YXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQ
dHI8U291cEJ1ZmZlcj4mJiwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmls
ZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAg
ICBEYXRhKFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YT4mJik7CiAjZW5kaWYKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KQEAgLTk0LDEwICs5NiwxMCBAQCBwcml2YXRl
OgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+
IG1fYnVmZmVyOwotICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKKyAgICBGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlRGVzY3JpcHRvciB7IEZpbGVTeXN0ZW06Omlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsKICNlbmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAg
VmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVyOworI2lmIFVTRShDVVJMKQorICAgIEJveDxWYXJpYW50
PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+PiBtX2J1ZmZlcjsK
ICNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9Owog
ICAgIHNpemVfdCBtX3NpemUgeyAwIH07CkBAIC0xMDYsMTcgKzEwOCw4IEBAIHByaXZhdGU6CiAK
IERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYsIGNvbnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNF
cXVhbChjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYpOwotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBh
ZG9wdEFuZE1hcEZpbGUoaW50LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2Vsc2UKIERhdGEg
YWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9m
ZnNldCwgc2l6ZV90KTsKLSNlbmRpZgotI2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQot
RGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVhbSosIHNpemVfdCBvZmZzZXQsIHNpemVf
dCk7Ci0jZW5kaWYKLSNpZiAhT1MoV0lORE9XUykKIERhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBw
YXRoKTsKLSNlbmRpZgogRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5n
IFNhbHQgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDg+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQppbmRl
eCA2YTM5Zjg4NzAwODcuLmNiNGFjMzhjNmE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KQEAg
LTkyLDExICs5MiwxMyBAQCBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0IERh
dGEmIGIpCiAgICAgcmV0dXJuIHsgYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZV9j
b25jYXQoYS5kaXNwYXRjaERhdGEoKSwgYi5kaXNwYXRjaERhdGEoKSkpIH07CiB9CiAKLURhdGEg
RGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRh
OjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBl
ZEZpbGUuc2l6ZSgpOworICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwog
ICAgIEFTU0VSVChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7Ci0gICAgY2xv
c2UoZmQpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CiAgICAgYXV0byBib2R5TWFw
ID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2NyZWF0ZShtYXAsIHNpemUsIGRpc3BhdGNo
X2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIFtt
YXAsIHNpemVdIHsKICAgICAgICAgbXVubWFwKG1hcCwgc2l6ZSk7CiAgICAgfSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFDdXJsLmNwcAppbmRleCBjZjQzMTU2YzVhMDMuLjE5MjQ4MmJmOWY0MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3Vy
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhQ3VybC5jcHAKQEAgLTMwLDQwICszMCw0MiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKQorICAgIDogbV9idWZmZXIoQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+
LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4+OjpjcmVhdGUoVmVjdG9yPHVpbnQ4X3Q+KHNp
emUpKSkKKyAgICAsIG1fc2l6ZShzaXplKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShzaXplKTsK
LSAgICBtX3NpemUgPSBzaXplOwotICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIGRhdGEsIHNp
emUpOworICAgIG1lbWNweShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KCptX2J1ZmZlcikuZGF0
YSgpLCBkYXRhLCBzaXplKTsKIH0KIAotRGF0YTo6RGF0YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhOjpEYXRhKFZh
cmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJiBkYXRh
KQorICAgIDogbV9idWZmZXIoQm94PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YT4+OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpCisgICAgLCBtX2lzTWFw
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+KCptX2J1
ZmZlcikpCiB7Ci0gICAgbV9idWZmZXIucmVzaXplKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7
Ci0gICAgRmlsZVN5c3RlbTo6c2Vla0ZpbGUoZmlsZSwgb2Zmc2V0LCBGaWxlU3lzdGVtOjpGaWxl
U2Vla09yaWdpbjo6QmVnaW5uaW5nKTsKLSAgICBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmls
ZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9idWZmZXIuZGF0YSgpKSwgc2l6ZSk7Ci0gICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotfQotCi1EYXRhOjpEYXRhKFZlY3Rvcjx1aW50
OF90PiYmIGJ1ZmZlcikKLSAgICA6IG1fYnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKLXsKLSAgICBt
X3NpemUgPSBtX2J1ZmZlci5zaXplKCk7CisgICAgbV9zaXplID0gV1RGOjpzd2l0Y2hPbigqbV9i
dWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKSAtPiBzaXpl
X3QgeyByZXR1cm4gYnVmZmVyLnNpemUoKTsgfSwKKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEmIG1hcHBlZEZpbGUpIC0+IHNpemVfdCB7IHJldHVybiBtYXBwZWRG
aWxlLnNpemUoKTsgfQorICAgICk7CiB9CiAKIERhdGEgRGF0YTo6ZW1wdHkoKQogewotICAgIHJl
dHVybiB7IH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICByZXR1cm4geyBXVEZN
b3ZlKGJ1ZmZlcikgfTsKIH0KIAogY29uc3QgdWludDhfdCogRGF0YTo6ZGF0YSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKCptX2J1ZmZlciwK
KyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4
X3QqIHsgcmV0dXJuIGJ1ZmZlci5kYXRhKCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBwZWRGaWxlKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obWFwcGVkRmlsZS5kYXRhKCkpOyB9CisgICAg
KTsKIH0KIAogYm9vbCBEYXRhOjppc051bGwoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZl
ci5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2J1ZmZlcjsKIH0KIAogYm9vbCBEYXRhOjphcHBs
eShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYgYXBwbGllcikg
Y29uc3QKQEAgLTcxLDIxICs3MywzNyBAQCBib29sIERhdGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9u
PGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBsaWVyKSBjb25zdAogICAgIGlmIChp
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSksIG1fYnVmZmVy
LnNpemUoKSk7CisgICAgcmV0dXJuIGFwcGxpZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YSgpKSwgc2l6ZSgpKTsKIH0KIAogRGF0YSBEYXRhOjpzdWJyYW5nZShzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKIHsKLSAgICByZXR1cm4geyBtX2J1ZmZlci5kYXRh
KCkgKyBvZmZzZXQsIHNpemUgfTsKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgcmV0dXJuIHsgZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CiB9CiAKIERhdGEg
Y29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKIHsKKyAgICBpZiAoYS5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIGI7CisgICAgaWYgKGIuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBhOworCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihhLnNpemUoKSArIGIuc2l6
ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYS5kYXRhKCksIGEuc2l6ZSgpKTsKICAg
ICBtZW1jcHkoYnVmZmVyLmRhdGEoKSArIGEuc2l6ZSgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOwog
ICAgIHJldHVybiBEYXRhKFdURk1vdmUoYnVmZmVyKSk7CiB9CiAKK0RhdGEgRGF0YTo6YWRvcHRN
YXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBtYXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmQpCit7CisgICAgQVNTRVJUKG1hcHBlZEZpbGUuZGF0YSgpKTsK
KyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZSht
YXBwZWRGaWxlKSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAppbmRleCA1MTVjMDllYmJmZDMuLmQz
Yjc5ZTAxNGE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKQEAgLTQ4LDExICs0OCwxMSBAQCBE
YXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogICAgIG1fYnVmZmVy
ID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGNvcGllZERhdGEsIHNpemUs
IGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9CiAKLURhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVm
ZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQorRGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYg
YnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZl
cihidWZmZXIpCiAgICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZl
ciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKLSAgICAsIG1faXNNYXAobV9zaXplICYmIGZkICE9IC0x
KQorICAgICwgbV9pc01hcChtX3NpemUgJiYgRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkp
CiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+
TWFwV3JhcHBlcigpCiAgICAgewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICAgICAg
Y2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmls
ZURlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsK
LSAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFu
ZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIAogc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihN
YXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTIxLDggKzEyMSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxl
dGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9
CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQor
RGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZp
bGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6
ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOworICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hh
bmRsZSgpOwogICAgIEFTU0VSVChtYXApOwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7
CiAgICAgTWFwV3JhcHBlciogd3JhcHBlciA9IG5ldyBNYXBXcmFwcGVyIHsgbWFwLCBzaXplLCBm
ZCB9OwpAQCAtMTMwLDIxICsxMzIsMTQgQEAgRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBmZCB9
OwogfQogCi0jaWYgVVNFKEdMSUIpICYmICFQTEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFw
RmlsZShHRmlsZUlPU3RyZWFtKiBzdHJlYW0sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQot
ewotICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRf
c3RyZWFtKEdfSU9fU1RSRUFNKHN0cmVhbSkpOwotICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlw
dG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOwot
ICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYK
LQogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29u
c3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwgIWlzTWFwKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIq
PihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVyLT5sZW5ndGgsIG1fZmlsZURlc2NyaXB0b3IpOwor
ICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3Ry
ZWFtKEdfSU9fU1RSRUFNKG1fZmlsZURlc2NyaXB0b3IpKTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVf
ZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19GSUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJl
YW0pKTsKKyAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+
KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgZmQpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCmluZGV4IGJlODQzNzFh
ODYzMC4uN2EwZWM1ZTE0ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKQEAgLTUzLDQ4
ICs1MywxMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
IAotI2lmICFPUyhXSU5ET1dTKQotc3RhdGljIERpcmVjdG9yeUVudHJ5VHlwZSBkaXJlY3RvcnlF
bnRyeVR5cGUodWludDhfdCBkdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGR0eXBlKSB7Ci0gICAgY2Fz
ZSBEVF9ESVI6Ci0gICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeTsK
LSAgICBjYXNlIERUX1JFRzoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6Rmls
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICB9Ci0gICAgcmV0dXJuIERpcmVj
dG9yeUVudHJ5VHlwZTo6RmlsZTsKLX0KLSNlbmRpZgotCiB2b2lkIHRyYXZlcnNlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwg
RGlyZWN0b3J5RW50cnlUeXBlKT4mIGZ1bmN0aW9uKQogewotI2lmICFPUyhXSU5ET1dTKQotICAg
IERJUiogZGlyID0gb3BlbmRpcihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIGRpcmVu
dCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKLSAgICAgICAgaWYgKGRw
LT5kX3R5cGUgIT0gRFRfRElSICYmIGRwLT5kX3R5cGUgIT0gRFRfUkVHKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAg
ICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBuYW1lU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChuYW1lKTsKLSAgICAgICAgaWYgKG5hbWVTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24obmFtZVN0cmluZywgZGlyZWN0b3J5RW50cnlUeXBl
KGRwLT5kX3R5cGUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLSNlbHNlCi0gICAgYXV0
byBlbnRyaWVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoKTsKKyAgICBhdXRvIGVu
dHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9zKTsKICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogZW50cmllcykgewogICAgICAgICBhdXRvIHR5cGUgPSBGaWxlU3lzdGVt
OjpmaWxlSXNEaXJlY3RvcnkoZW50cnksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3M6Ok5vKSA/IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5IDogRGlyZWN0b3J5RW50
cnlUeXBlOjpGaWxlOwotICAgICAgICBmdW5jdGlvbihlbnRyeSwgdHlwZSk7CisgICAgICAgIGZ1
bmN0aW9uKEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShlbnRyeSksIHR5cGUpOwogICAgIH0K
LSNlbmRpZgogfQogCiB2b2lkIGRlbGV0ZURpcmVjdG9yeVJlY3Vyc2l2ZWx5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAzM2M5YTBjYmU3ZTEuLjk0NmEyZTVjN2EyOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAyLTIwICBD
aHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJ
bXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGZvciBGaWxlU3lzdGVt
OjpjcmVhdGVGaWxlCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lz
dGVtLmNwcDoKKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5vbG9neSB0byAi
cmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0ZpbGVTeXN0ZW0uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5
c3RlbS5jcHAKaW5kZXggZDBlNTE1MWE5OTkyLi4wODM5MmE4ZmEzZmIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCkBAIC0xNDUsNCArMTQ1LDEwIEBA
IFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgVW5pY29kZURpcmVjdG9yeU5hbWUpCiAgICAgRVhQRUNU
X1RSVUUoZXhwZWN0ZWREaXJlY3RvcnlOYW1lID09IGRpcmVjdG9yeU5hbWUpOwogfQogCitURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIENyZWF0ZUZpbGVXaXRoRXhpc3RpbmdQYXRoKQoreworICAgIGF1
dG8gaGFuZGxlID0gRmlsZVN5c3RlbTo6Y3JlYXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5
c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjppc0hhbmRsZVZhbGlkKGhhbmRsZSkpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391632</attachid>
            <date>2020-02-25 00:49:03 -0800</date>
            <delta_ts>2020-02-25 14:18:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>37162</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWE2MzVkNDViOTguLjM5YTg2NjVmNjAwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKwor
ICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBVcGRhdGUgV2ViR0wyIHJlc3Vs
dHMgd2l0aCBBTkdMRSBiYWNrZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA2ODZiN2M5ZDE3NWUuLjBiZGVlNTU0YTljNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTYx
LDcgKzExNjEsMjAgQEAgY3J5cHRvL3N1YnRsZS93cmFwLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVy
cy5odG1sIFsgU2tpcCBdCiAKIGh0dHAvdGVzdHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVz
dHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAgXQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQor
CisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgoraHR0cC90ZXN0cy9jYWNoZS9jYW5jZWwtbXVs
dGlwbGUtcG9zdC14aHJzLmh0bWwgWyBGYWlsdXJlIF0KKworIyBmYWlscyBiZWNhdXNlIG9mIGNv
bnZlcnNpb24gdG8gZXBvY2ggYmVoYXZpb3Igc3BlY2lmaWMgdG8gTWFjCitodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1sYXN0LW1vZGlmaWVkLmh0bWwgWyBGYWlsdXJlIF0K
KworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0dHAvdGVzdHMvY2FjaGUvaWZyYW1lLTMw
NC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL25ldHdvcmstZXJyb3It
ZHVyaW5nLXJldmFsaWRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL3Bh
cnRpdGlvbmVkLWNhY2hlLWlmcmFtZS5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hl
L3BhcnRpdGlvbmVkLWNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvd2ls
bHNlbmRyZXF1ZXN0LXJldHVybnMtbnVsbC1mb3ItbWVtb3J5LWNhY2hlLWxvYWQuaHRtbCBbIEZh
aWx1cmUgXQorCiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y2FudmFzIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRz
YW5kYm94IFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYxNzQ2NzEwYjFiZC4uOTUyZjkyZmMxOGRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBz
b255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5
IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6Cisg
ICAgICAgIEFkZGVkIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIGZsYWcgd2hlbiBvcGVuaW5nIGZpbGVz
LgorICAgICAgICBSZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgdGhlIGxpc3REaXJlY3Rvcnkg
ZmlsdGVyIHNpbmNlIHRoZSBkZWZhdXQKKyAgICAgICAgU3RyaW5nKCkgZmlsdGVyIGRvZXNuJ3Qg
bWF0Y2ggYWxsIGZpbGVzIG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICBBZGRlZCBGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSB0byBiZSB1c2VkIHdpdGggUmVhZFdyaXRlIE1hcHBlZEZpbGVE
YXRhLgorICAgICAgICBBZGRlZCBvbmx5Q3JlYXRlRmlsZSBmbGFnIHRvIG9wZW5GaWxlIHdoaWNo
IGNhdXNlcyBvcGVuRmlsZSB0byBmYWlsIGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorCisg
ICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICBBZGRlZCAoU19JUlVTUiB8IFNfSVdVU1Ip
IGZpbGUgb3BlbiBtb2Rlcy4KKworICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6
CisgICAgICAgIEltcGxlbWVudCBnZXRWb2x1bWVGcmVlU3BhY2Ugc2luY2Ugc29tZSBvZiB0aGUg
dGVzdHMgdXNlIGl0IHdoZW4gdG9nZ2xpbmcgY2FjaGUuCisgICAgICAgIAorICAgICAgICAqIHd0
Zi93aW4vUGF0aFdhbGtlci5jcHA6CisKIDIwMjAtMDItMTggIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBmcm9tICJsYXllciBmbHVzaCIgdGVy
bWlub2xvZ3kgdG8gInJlbmRlcmluZyB1cGRhdGUiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcy
Zjk1M2VhYjNmYy4uODQ4NTIxZTI3MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxl
U3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcApAQCAtMjg3LDE3
ICsyODcsMTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiAgICAgdW5tYXBW
aWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOwogfQogCi0jaWYgSEFWRShNTUFQKQot
Ci1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwg
TWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK01hcHBlZEZpbGVEYXRhOjpNYXBw
ZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2Rl
LCBib29sJiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxlUGF0aCwgRmls
ZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRs
ZShmZCwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAgICAgY2xvc2VGaWxlKGZkKTsKIH0KIAot
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhBVkUoTU1BUCkKKworYm9vbCBNYXBwZWRG
aWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Bl
bk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUpCiB7CiAgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNCw3ICszMjQs
MjQgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfRklMRSB8
IChtb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZB
VEUpLCBmZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIHN3
aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAg
cGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmls
ZU9wZW5Nb2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1dSSVRFOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAg
ICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CisgICAgICAgIGJyZWFr
OworI2lmIE9TKERBUldJTikKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seToKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkKiBk
YXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9
PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQs
IDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmZjLi5mM2FiYjMyYWMxNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmgKQEAgLTc5LDExICs3OSwxNyBAQCBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUg
aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogZW51bSBjbGFzcyBGaWxlT3Blbk1vZGUg
ewogICAgIFJlYWQsCiAgICAgV3JpdGUsCisgICAgUmVhZFdyaXRlLAogI2lmIE9TKERBUldJTikK
ICAgICBFdmVudHNPbmx5LAogI2VuZGlmCiB9OwogCitlbnVtIGNsYXNzIEZpbGVBY2Nlc3NQZXJt
aXNzaW9uIDogYm9vbCB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0gY2xhc3MgRmls
ZVNlZWtPcmlnaW4gewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAtMTMxLDcgKzEz
Nyw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3Vw
KCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNsdWRlZCBmcm9t
IGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPFN0cmlu
Zz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVy
ID0gU3RyaW5nKCkpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7CiAKIFdURl9F
WFBPUlRfUFJJVkFURSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmKTsKIFN0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IGNo
YXIqKTsKQEAgLTE0MCw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZhbGlkKGNvbnN0
IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0gaQogCiAvLyBQ
cmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGgsIG5vdCB0
aGUgZnVsbCBwYXRoLgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVtcG9yYXJ5Rmls
ZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
RmlsZU9wZW5Nb2RlKTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3Bl
bkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNz
aW9uID0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCwgYm9vbCBvbmx5Q3JlYXRlRmlsZSA9IGZh
bHNlKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUmKTsKIC8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBmaWxlIGlmIHN1Y2Nlc3NmdWwsIC0xIG90aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJ
VkFURSBsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zm
c2V0LCBGaWxlU2Vla09yaWdpbik7CkBAIC0yMDYsNiArMjEyLDcgQEAgcHVibGljOgogICAgIE1h
cHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBN
YXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSwgYm9v
bCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRm
b3JtRmlsZUhhbmRsZSwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVu
TW9kZSwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB+TWFwcGVkRmlsZURhdGEoKTsKICAgICBNYXBwZWRGaWxlRGF0YSYgb3BlcmF0b3I9KE1h
cHBlZEZpbGVEYXRhJiYpOwogCkBAIC0yMTYsMTUgKzIyMywyMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCogbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxlRGF0YSwgbnVsbHB0
cik7IH0KIAogcHJpdmF0ZToKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFu
ZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1v
ZGUsIE1hcHBlZEZpbGVNb2RlKTsKIAogICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07
CiAgICAgdW5zaWduZWQgbV9maWxlU2l6ZSB7IDAgfTsKIH07CiAKLWlubGluZSBNYXBwZWRGaWxl
RGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK2lubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVk
RmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9k
ZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUs
IEZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7Cit9CisKK2lubGluZSBNYXBwZWRGaWxlRGF0
YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2Rl
IG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQogewotICAg
IHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1h
cEZpbGVIYW5kbGUoaGFuZGxlLCBvcGVuTW9kZSwgbWFwTW9kZSk7CiB9CiAKIGlubGluZSBNYXBw
ZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoTWFwcGVkRmlsZURhdGEmJiBvdGhlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwIGIvU291cmNlL1dU
Ri93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKaW5kZXggODZjMDRmOWQ1ZTEzLi5iMDcxMDFl
YWY2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0zMzgsNyAr
MzM4LDcgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh0
ZW1wUGF0aC5nZXQoKSk7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJt
aXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgb25seUNyZWF0ZUZpbGUpCiB7CiAgICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKICAgICBpZiAoIXZhbGlkUmVw
cmVzZW50YXRpb24oZmlsZW5hbWUpKQpAQCAtMzQ2LDEzICszNDYsMjAgQEAgUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiAK
ICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
ZmlsZW5hbWUuZGF0YSgpKSk7CiAgICAgR1JlZlB0cjxHRmlsZUlPU3RyZWFtPiBpb1N0cmVhbTsK
KyAgICBHRmlsZUNyZWF0ZUZsYWdzIHBlcm1pc3Npb25GbGFnID0gKHBlcm1pc3Npb24gPT0gRmls
ZUFjY2Vzc1Blcm1pc3Npb246OkFsbCkgPyBHX0ZJTEVfQ1JFQVRFX05PTkUgOiBHX0ZJTEVfQ1JF
QVRFX1BSSVZBVEU7CisKKyAgICBpZiAob25seUNyZWF0ZUZpbGUpIHsKKyAgICAgICAgaW9TdHJl
YW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgcGVybWlz
c2lvbkZsYWcsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgcmV0dXJuIGlvU3RyZWFtLmxl
YWtSZWYoKTsKKyAgICB9CisKICAgICBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAg
ICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1v
ZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8
IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUpIHsKICAgICAgICAgaWYgKGdfZmlsZV90
ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGljX2Nhc3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9F
WElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCiAgICAgICAgICAgICBpb1N0cmVhbSA9
IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cikpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihn
X2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51
bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmls
ZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBu
dWxscHRyKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGlvU3RyZWFtLmxlYWtSZWYoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IDI3ODM5ODgzYTFhMi4uMzU1
MThjZjdkNTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAg
LTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBy
ZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJt
aXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgb25seUNyZWF0ZUZpbGUpCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIApAQCAtODcsMTYgKzg3LDMz
IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVP
cGVuTW9kZSBtb2RlKQogICAgICAgICByZXR1cm4gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsK
IAogICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOwotICAgIGlmIChtb2RlID09IEZpbGVPcGVuTW9k
ZTo6UmVhZCkKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVh
ZDoKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwotICAgIGVsc2UgaWYgKG1vZGUg
PT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Bl
bk1vZGU6OldyaXRlOgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fV1JPTkxZIHwgT19DUkVB
VCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVh
ZFdyaXRlOgorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fUkRXUiB8IE9fQ1JFQVQpOworICAg
ICAgICBicmVhazsKICNpZiBPUyhEQVJXSU4pCi0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Bl
bk1vZGU6OkV2ZW50c09ubHkpCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHk6CiAg
ICAgICAgIHBsYXRmb3JtRmxhZyB8PSBPX0VWVE9OTFk7CisgICAgICAgIGJyZWFrOwogI2VuZGlm
CisgICAgfQorCisgICAgaWYgKG9ubHlDcmVhdGVGaWxlKQorICAgICAgICBwbGF0Zm9ybUZsYWcg
fD0gKE9fQ1JFQVQgfCBPX0VYQ0wpOworCisgICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAg
ICBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAg
cGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJt
aXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25G
bGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8
IFNfSVdPVEgpOwogCi0gICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcs
IDA2NjYpOworICAgIHJldHVybiBvcGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJt
aXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIv
U291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IDkzMzRhYzAyOWQ1Ny4u
ODRmNmVhNDc2N2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdp
bi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC00MjEs
NyArNDIxLDcgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRm
b3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJldHVybiBwcm9wb3NlZFBhdGg7CiB9CiAKLVBs
YXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9k
ZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
RmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uLCBib29sIG9ubHlDcmVhdGVG
aWxlKQogewogICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSAwOwogICAgIERXT1JEIGNyZWF0aW9u
RGlzcG9zaXRpb24gPSAwOwpAQCAtNDM2LDEwICs0MzYsMTUgQEAgUGxhdGZvcm1GaWxlSGFuZGxl
IG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiAgICAgICAg
IGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRFOwogICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0
aW9uID0gQ1JFQVRFX0FMV0FZUzsKICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZToKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEU7
CisgICAgICAgIGNyZWF0aW9uRGlzcG9zaXRpb24gPSBPUEVOX0FMV0FZUzsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogCisgICAgaWYgKG9ubHlDcmVhdGVGaWxlKQorICAgICAgICBjcmVhdGlvbkRp
c3Bvc2l0aW9uID0gQ1JFQVRFX05FVzsKKwogICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IHBhdGg7
CiAgICAgcmV0dXJuIENyZWF0ZUZpbGUoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRh
KCksIGRlc2lyZWRBY2Nlc3MsIHNoYXJlTW9kZSwgMCwgY3JlYXRpb25EaXNwb3NpdGlvbiwgRklM
RV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKIH0KQEAgLTU0OSw5ICs1NTQsMTQgQEAgVmVjdG9yPFN0
cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5n
JiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wgZ2V0Vm9sdW1lRnJlZVNw
YWNlKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90JikKK2Jvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNv
bnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKIHsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgVUxBUkdFX0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7CisgICAg
aWYgKCFHZXREaXNrRnJlZVNwYWNlRXhXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZm
cmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlciwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZyZWVTcGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVy
LlF1YWRQYXJ0OworICAgIHJldHVybiB0cnVlOwogfQogCiBPcHRpb25hbDxpbnQzMl90PiBnZXRG
aWxlRGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQpAQCAtNjAzLDE1ICs2MTMsNyBAQCBi
b29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkKICAgICByZXR1cm4gVW5t
YXBWaWV3T2ZGaWxlKGJ1ZmZlcik7CiB9CiAKLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0
YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNj
ZXNzKQotewotICAgIGF1dG8gZmlsZSA9IENyZWF0ZUZpbGUoZmlsZVBhdGgud2lkZUNoYXJhY3Rl
cnMoKS5kYXRhKCksIEdFTkVSSUNfUkVBRCwgMCwgbnVsbHB0ciwgT1BFTl9FWElTVElORywgRklM
RV9BVFRSSUJVVEVfTk9STUFMLCBudWxscHRyKTsKLQotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFu
ZGxlKGZpbGUsIG1vZGUpOwotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBNYXBwZWRG
aWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRG
aWxlTW9kZSkKK2Jvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSkKIHsK
ICAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNjI1LDExICs2MjcsMjggQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgYXV0byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFu
ZGxlLCBudWxscHRyLCBQQUdFX1JFQURPTkxZLCAwLCAwLCBudWxscHRyKTsKKyAgICBEV09SRCBw
YWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRE9OTFk7CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9
IEZJTEVfTUFQX1JFQUQ7CisgICAgc3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9w
ZW5Nb2RlOjpSZWFkOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRE9OTFk7Cisg
ICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFH
RV9SRUFEV1JJVEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAg
cGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURXUklURTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9
IEZJTEVfTUFQX1dSSVRFIHwgRklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgYXV0byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBw
YWdlUHJvdGVjdGlvbiwgMCwgMCwgbnVsbHB0cik7CiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5n
LCBGSUxFX01BUF9SRUFELCAwLCAwLCBzaXplKTsKKyAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09m
RmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCBzaXplKTsKICAgICBDbG9zZUhhbmRs
ZShtYXBwaW5nKTsKICAgICBpZiAoIW1fZmlsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcAppbmRleCA4ZDdkN2FjNjgzODUuLjY4OGZlZGQ1OWZh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0b3J5
ICsgIlxcIiArIHBhdHRlcm47CisgICAgU3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9y
eSwgJ1xcJywgcGF0dGVybik7CiAgICAgbV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgu
d2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYxNzJh
Y2RkMzQ2Mi4uNGMzYWQ5MGU1MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTAy
LTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBb
V2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICBFbnN1cmUgdGhhdCB0aGUgQ2FjaGVTdG9yYWdl
IGRpcmVjdG9yeSBpcyBhY3R1YWxseSBiZWluZyBjcmVhdGVkLgorCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIFVzZSBtb3JlIEZp
bGVTeXN0ZW0gZnVuY3Rpb25hbGl0eSB0byBzaGFyZSBjb2RlIGFjcm9zcyBwbGF0Zm9ybXMuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHA6
CisgICAgICAgIFVzZSBPcHRpb25hbDxWZWN0b3I+IGZvciBtX2J1ZmZlciBzaW5jZSB3ZSBuZWVk
IHRvIGRpZmZlcmVudGlhdGUgaXNFbXB0eSBhbmQgaXNOdWxsLgorCiAyMDIwLTAyLTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgZnJvbSAi
bGF5ZXIgZmx1c2giIHRlcm1pbm9sb2d5IHRvICJyZW5kZXJpbmcgdXBkYXRlIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA5MWRmM2I4
MGEzNmEuLmU0NDIzNGM1ZTY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQ1NCw4ICs0NTQsMTEgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCB1aW4KICAgICBhdXRvIGlzTmV3RW50cnkgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhLCAmY2FjaGVSb290UGF0aF0gewogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9KS5pc05ld0VudHJ5OwotICAgIGlmIChpc05ld0VudHJ5
KQorICAgIGlmIChpc05ld0VudHJ5KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQYXRoSGFuZGxlKTsKKyAgICAgICAgaWYgKCFjYWNoZVJv
b3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgY2Fj
aGVSb290UGF0aCkpOworICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YS5jcHAKaW5kZXggNzVhYTkwNWFiNjhhLi41N2JlM2QyN2M3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx3dGYvQ3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5o
PgogCiAjaWYgIU9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTM5LDI2ICsz
OCwyMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAot
I2lmICFPUyhXSU5ET1dTKQogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KSBjb25zdAogewotICAgIGludCBmZCA9IG9wZW4oRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJV
U1IgfCBTX0lXVVNSKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOwor
ICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9u
OjpVc2VyLCB0cnVlKTsKKyAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxl
KSB8fCAhRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgbV9zaXplKSkgeworICAgICAg
ICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAgICAgCiAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgo
cGF0aCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFE
IHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwotICAgIGlmIChtYXAgPT0gTUFQX0ZB
SUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNjZXNzOworICAgIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBGaWxlU3lzdGVtOjpGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlNoYXJlZCwg
c3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIHZvaWQqIG1h
cCA9IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKICAgICB1aW50OF90KiBt
YXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CiAgICAgYXBwbHkoWyZtYXBEYXRh
XShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzU2l6ZSkgewogICAgICAgICBtZW1j
cHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVzU2l6ZSk7CkBAIC02Niw1MiArNjIsMjMgQEAgRGF0YSBE
YXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIAorI2lmIE9TKFdJTkRPV1MpCisgICAgRFdPUkQgb2xkUHJvdGVjdGlv
bjsKKyAgICBWaXJ0dWFsUHJvdGVjdChtYXAsIG1fc2l6ZSwgRklMRV9NQVBfUkVBRCwgJm9sZFBy
b3RlY3Rpb24pOworICAgIEZsdXNoVmlld09mRmlsZShtYXAsIG1fc2l6ZSk7CisjZWxzZQogICAg
IC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCiAgICAgbXByb3RlY3QobWFwLCBtX3NpemUs
IFBST1RfUkVBRCk7CiAKICAgICAvLyBGbHVzaCAoYXN5bmNocm9ub3VzbHkpIHRvIGZpbGUsIHR1
cm5pbmcgdGhpcyBpbnRvIGNsZWFuIG1lbW9yeS4KICAgICBtc3luYyhtYXAsIG1fc2l6ZSwgTVNf
QVNZTkMpOwotCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBmZCk7Ci19
Ci0jZWxzZQotRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAot
ewotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxp
ZChmaWxlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6d3JpdGVU
b0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSwgc2l6ZSgp
KSA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIERhdGEoVmVjdG9yPHVpbnQ4
X3Q+KG1fYnVmZmVyKSk7Ci19CiAjZW5kaWYKIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBtYXBG
aWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05M
WSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBzdHJ1Y3Qg
c3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQpIDwgMCkgewotICAgICAgICBjbG9z
ZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHNpemVfdCBzaXplID0gc3Rh
dC5zdF9zaXplOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAg
IHJldHVybiBEYXRhOjplbXB0eSgpOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdEFuZE1hcEZp
bGUoZmQsIDAsIHNpemUpOworICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChXVEZNb3ZlKG1hcHBl
ZEZpbGUpLCBoYW5kbGUpOwogfQotI2VuZGlmCiAKLURhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgpCitEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9X
UykKLSAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3Bl
bkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAgICBpZiAoIUZp
bGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0x
MTksMzEgKzg2LDI4IEBAIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYg
KCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBzaXplKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZpbGUsIDAsIHNpemUpOwotI2VuZGlmCiB9
CiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCBmZCwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoKS5kYXRhKCkpOworfQorCitEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsK
ICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CiAgICAg
fQotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9Q
UklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAg
ICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJpdmF0ZSwgc3VjY2Vzcyk7CisgICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAs
IHNpemUsIGZkKTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAoV1RGTW92ZShtYXBwZWRGaWxl
KSwgaGFuZGxlKTsKIH0KLSNlbHNlCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0g
ICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zmc2V0LCBzaXplKTsKLX0KLSNlbmRpZgogCiBTSEExOjpE
aWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsK
QEAgLTE3OSw0MCArMTQzLDI1IEBAIHN0YXRpYyBTYWx0IG1ha2VTYWx0KCkKIAogT3B0aW9uYWw8
U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogewotI2lmICFPUyhXSU5E
T1dTKQotICAgIGF1dG8gY3BhdGggPSBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7Ci0gICAgYXV0byBmZCA9IG9wZW4oY3BhdGguZGF0YSgpLCBPX1JET05MWSwgMCk7
Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0gcmVhZChmZCwgc2FsdC5kYXRh
KCksIHNhbHQuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBz
dGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0LnNpemUoKSkpIHsKLSAgICAgICAgc2FsdCA9IG1ha2VT
YWx0KCk7Ci0KLSAgICAgICAgdW5saW5rKGNwYXRoLmRhdGEoKSk7Ci0gICAgICAgIGZkID0gb3Bl
bihjcGF0aC5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBT
X0lXVVNSKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gd3JpdGUoZmQsIHNhbHQuZGF0YSgpLCBz
YWx0LnNpemUoKSkgPT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpOwotICAgICAg
ICBjbG9zZShmZCk7Ci0gICAgICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAoZmlsZUV4aXN0cyhw
YXRoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBG
aWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgICAgICBTYWx0IHNhbHQ7CisgICAg
ICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOworICAgICAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgIT0gc2Fs
dC5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIHJldHVybiBzYWx0
OwogICAgIH0KLSAgICByZXR1cm4gc2FsdDsKLSNlbHNlCi0gICAgYXV0byBmaWxlID0gRmlsZVN5
c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLSAg
ICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBieXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZp
bGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUo
KSk7CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGF1dG8gZmlsZSA9IEZpbGVT
eXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZp
bGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBib29sIHN1Y2Nlc3Mg
PSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihz
YWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKICAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBzYWx0LnNpemUoKSkgewot
ICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKLSAgICAg
ICAgZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVu
TW9kZTo6V3JpdGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6
ZSgpKSA9PSBzYWx0LnNpemUoKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUp
OwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgIH0K
ICAgICByZXR1cm4gc2FsdDsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhLmgKaW5kZXggZDc4ZDk4YjYxNzUwLi4zN2I1OTY2NTZhNWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5o
CkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNvdXAuaD4KICNl
bmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0
Zi9WYXJpYW50Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNoYXJl
ZE1lbW9yeTsKQEAgLTUzLDE5ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgfkRhdGEoKSB7IH0KIAog
ICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgc3RhdGljIERh
dGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGludCBmZCk7Ci0jZW5kaWYKKyAgICBzdGF0
aWMgRGF0YSBhZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmLCBGaWxlU3lzdGVt
OjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW51bSBj
bGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBEYXRhKE9TT2JqZWN0UHRyPGRpc3Bh
dGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5kaWYKICNpZiBV
U0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50IGZkID0gLTEpOwot
I2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBEYXRhKFZlY3Rvcjx1aW50OF90PiYmKTsK
LSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBEYXRhKFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJik7CiAjZW5kaWYKICAgICBib29sIGlzTnVsbCgp
IGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KQEAg
LTk0LDEwICs5NiwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAgbXV0
YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVyOwotICAgIGludCBtX2ZpbGVEZXNjcmlw
dG9yIHsgLTEgfTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlRGVz
Y3JpcHRvciB7IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsKICNlbmRp
ZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVyOworI2lmIFVT
RShDVVJMKQorICAgIEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGE+PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWludDhf
dCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CkBAIC0xMDYs
MTcgKzEwOCw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYsIGNv
bnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYpOwot
I2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50LCBzaXplX3Qgb2Zmc2V0
LCBzaXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRm
b3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgotI2lmIFVTRShH
TElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0cmVh
bSosIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiAhT1MoV0lORE9XUykKIERh
dGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNlbmRpZgogRGF0YSBtYXBGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDg+Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4NzAwODcuLmNiNGFjMzhjNmE1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhQ29jb2EubW0KQEAgLTkyLDExICs5MiwxMyBAQCBEYXRhIGNvbmNhdGVuYXRl
KGNvbnN0IERhdGEmIGEsIGNvbnN0IERhdGEmIGIpCiAgICAgcmV0dXJuIHsgYWRvcHRPU09iamVj
dChkaXNwYXRjaF9kYXRhX2NyZWF0ZV9jb25jYXQoYS5kaXNwYXRjaERhdGEoKSwgYi5kaXNwYXRj
aERhdGEoKSkpIH07CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3Qg
c2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsK
KyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOworICAgIHZvaWQqIG1hcCA9IG1h
cHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIEFTU0VSVChtYXApOwogICAgIEFTU0VSVChtYXAg
IT0gTUFQX0ZBSUxFRCk7Ci0gICAgY2xvc2UoZmQpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmls
ZShmZCk7CiAgICAgYXV0byBib2R5TWFwID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9kYXRhX2Ny
ZWF0ZShtYXAsIHNpemUsIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVf
UFJJT1JJVFlfREVGQVVMVCwgMCksIFttYXAsIHNpemVdIHsKICAgICAgICAgbXVubWFwKG1hcCwg
c2l6ZSk7CiAgICAgfSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcAppbmRleCBjZjQzMTU2YzVhMDMu
LjE5MjQ4MmJmOWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHAKQEAgLTMwLDQwICszMCw0MiBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCiBEYXRhOjpE
YXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorICAgIDogbV9idWZmZXIoQm94
PFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4+Ojpj
cmVhdGUoVmVjdG9yPHVpbnQ4X3Q+KHNpemUpKSkKKyAgICAsIG1fc2l6ZShzaXplKQogewotICAg
IG1fYnVmZmVyLnJlc2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIG1lbWNweSht
X2J1ZmZlci5kYXRhKCksIGRhdGEsIHNpemUpOworICAgIG1lbWNweShXVEY6OmdldDxWZWN0b3I8
dWludDhfdD4+KCptX2J1ZmZlcikuZGF0YSgpLCBkYXRhLCBzaXplKTsKIH0KIAotRGF0YTo6RGF0
YShGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6
ZV90IHNpemUpCitEYXRhOjpEYXRhKFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YT4mJiBkYXRhKQorICAgIDogbV9idWZmZXIoQm94PFZhcmlhbnQ8VmVj
dG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4+OjpjcmVhdGUoV1RGTW92
ZShkYXRhKSkpCisgICAgLCBtX2lzTWFwKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGE+KCptX2J1ZmZlcikpCiB7Ci0gICAgbV9idWZmZXIucmVzaXplKHNp
emUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgRmlsZVN5c3RlbTo6c2Vla0ZpbGUoZmlsZSwg
b2Zmc2V0LCBGaWxlU3lzdGVtOjpGaWxlU2Vla09yaWdpbjo6QmVnaW5uaW5nKTsKLSAgICBGaWxl
U3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9idWZm
ZXIuZGF0YSgpKSwgc2l6ZSk7Ci0gICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotfQot
Ci1EYXRhOjpEYXRhKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKLSAgICA6IG1fYnVmZmVyKFdU
Rk1vdmUoYnVmZmVyKSkKLXsKLSAgICBtX3NpemUgPSBtX2J1ZmZlci5zaXplKCk7CisgICAgbV9z
aXplID0gV1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgYnVmZmVyKSAtPiBzaXplX3QgeyByZXR1cm4gYnVmZmVyLnNpemUoKTsgfSwKKyAg
ICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIG1hcHBlZEZpbGUpIC0+
IHNpemVfdCB7IHJldHVybiBtYXBwZWRGaWxlLnNpemUoKTsgfQorICAgICk7CiB9CiAKIERhdGEg
RGF0YTo6ZW1wdHkoKQogewotICAgIHJldHVybiB7IH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1
ZmZlcjsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKIH0KIAogY29uc3QgdWludDhf
dCogRGF0YTo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsKKyAg
ICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKCptX2J1ZmZlciwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIGJ1ZmZlci5kYXRhKCk7IH0sCisg
ICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBwZWRGaWxlKSAt
PiBjb25zdCB1aW50OF90KiB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obWFw
cGVkRmlsZS5kYXRhKCkpOyB9CisgICAgKTsKIH0KIAogYm9vbCBEYXRhOjppc051bGwoKSBjb25z
dAogewotICAgIHJldHVybiBtX2J1ZmZlci5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2J1ZmZl
cjsKIH0KIAogYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpPiYgYXBwbGllcikgY29uc3QKQEAgLTcxLDIxICs3MywzNyBAQCBib29sIERh
dGE6OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBh
cHBsaWVyKSBjb25zdAogICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBhcHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1f
YnVmZmVyLmRhdGEoKSksIG1fYnVmZmVyLnNpemUoKSk7CisgICAgcmV0dXJuIGFwcGxpZXIocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSgpKSwgc2l6ZSgpKTsKIH0KIAogRGF0
YSBEYXRhOjpzdWJyYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4geyBtX2J1ZmZlci5kYXRhKCkgKyBvZmZzZXQsIHNpemUgfTsKKyAgICBpZiAoIW1f
YnVmZmVyKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgZGF0YSgpICsgb2Zm
c2V0LCBzaXplIH07CiB9CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3Qg
RGF0YSYgYikKIHsKKyAgICBpZiAoYS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGI7CisgICAg
aWYgKGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhOworCiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGJ1ZmZlcihhLnNpemUoKSArIGIuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwg
YS5kYXRhKCksIGEuc2l6ZSgpKTsKICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSArIGEuc2l6ZSgp
LCBiLmRhdGEoKSwgYi5zaXplKCkpOwogICAgIHJldHVybiBEYXRhKFdURk1vdmUoYnVmZmVyKSk7
CiB9CiAKK0RhdGEgRGF0YTo6YWRvcHRNYXAoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBt
YXBwZWRGaWxlLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCit7CisgICAgQVNT
RVJUKG1hcHBlZEZpbGUuZGF0YSgpKTsKKyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmQpOwor
CisgICAgcmV0dXJuIHsgV1RGTW92ZShtYXBwZWRGaWxlKSB9OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FjaGUKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNw
cAppbmRleCA1MTVjMDllYmJmZDMuLmQzYjc5ZTAxNGE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5j
cHAKQEAgLTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRo
X293bmVyKGNvcGllZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9CiAKLURh
dGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQorRGF0YTo6RGF0
YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2ZpbGVEZXNjcmlwdG9y
KGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKLSAgICAsIG1f
aXNNYXAobV9zaXplICYmIGZkICE9IC0xKQorICAgICwgbV9pc01hcChtX3NpemUgJiYgRmlsZVN5
c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHN0
cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewogICAgICAgICBtdW5t
YXAobWFwLCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAgICAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIHZvaWQq
IG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgICAgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIAogc3RhdGlj
IHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTIxLDggKzEy
MSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIp
CiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFw
LCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRs
ZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOworICAgIHZvaWQq
IG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIEFTU0VSVChtYXApOwogICAgIEFT
U0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CiAgICAgTWFwV3JhcHBlciogd3JhcHBlciA9IG5ldyBN
YXBXcmFwcGVyIHsgbWFwLCBzaXplLCBmZCB9OwpAQCAtMTMwLDIxICsxMzIsMTQgQEAgRGF0YSBE
YXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAgcmV0dXJu
IHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0jaWYgVVNFKEdMSUIpICYmICFQTEFURk9S
TShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiBzdHJlYW0sIHNpemVf
dCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0g
PSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKHN0cmVhbSkpOwotICAg
IGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRP
Ul9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIG9m
ZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0YTo6dHJ5
Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwgIWlzTWFw
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6
d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVyLT5sZW5n
dGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0gPSBn
X2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fZmlsZURlc2NyaXB0b3Ip
KTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19GSUxFX0RF
U0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3
cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0
aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVT
eXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzMC4uN2EwZWM1ZTE0ZjMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RmlsZVN5c3RlbS5jcHAKQEAgLTUzLDQ4ICs1MywxMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotI2lmICFPUyhXSU5ET1dTKQotc3RhdGljIERpcmVj
dG9yeUVudHJ5VHlwZSBkaXJlY3RvcnlFbnRyeVR5cGUodWludDhfdCBkdHlwZSkKLXsKLSAgICBz
d2l0Y2ggKGR0eXBlKSB7Ci0gICAgY2FzZSBEVF9ESVI6Ci0gICAgICAgIHJldHVybiBEaXJlY3Rv
cnlFbnRyeVR5cGU6OkRpcmVjdG9yeTsKLSAgICBjYXNlIERUX1JFRzoKLSAgICAgICAgcmV0dXJu
IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsK
LSAgICB9Ci0gICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKLX0KLSNlbmRpZgot
CiB2b2lkIHRyYXZlcnNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRnVuY3Rp
b248dm9pZCAoY29uc3QgU3RyaW5nJiwgRGlyZWN0b3J5RW50cnlUeXBlKT4mIGZ1bmN0aW9uKQog
ewotI2lmICFPUyhXSU5ET1dTKQotICAgIERJUiogZGlyID0gb3BlbmRpcihGaWxlU3lzdGVtOjpm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIGRpcmVudCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIo
ZGlyKSkpIHsKLSAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gRFRfRElSICYmIGRwLT5kX3R5cGUg
IT0gRFRfUkVHKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5h
bWUgPSBkcC0+ZF9uYW1lOwotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJj
bXAobmFtZSwgIi4uIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBuYW1l
U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICAgICAgaWYgKG5hbWVTdHJpbmcu
aXNOdWxsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24obmFtZVN0
cmluZywgZGlyZWN0b3J5RW50cnlUeXBlKGRwLT5kX3R5cGUpKTsKLSAgICB9Ci0gICAgY2xvc2Vk
aXIoZGlyKTsKLSNlbHNlCi0gICAgYXV0byBlbnRyaWVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVj
dG9yeShwYXRoKTsKKyAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5
KHBhdGgsICIqIl9zKTsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogZW50cmllcykgewogICAgICAg
ICBhdXRvIHR5cGUgPSBGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZW50cnksIEZpbGVTeXN0
ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSA/IERpcmVjdG9yeUVudHJ5VHlwZTo6
RGlyZWN0b3J5IDogRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgICAgICBmdW5jdGlvbihl
bnRyeSwgdHlwZSk7CisgICAgICAgIGZ1bmN0aW9uKEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFt
ZShlbnRyeSksIHR5cGUpOwogICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIGRlbGV0ZURpcmVjdG9y
eVJlY3Vyc2l2ZWx5KGNvbnN0IFN0cmluZyYgcGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzM2M5YTBjYmU3ZTEuLjk0NmEyZTVjN2EyOCAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDIwLTAyLTIwICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255
LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVz
aW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5
NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCB0ZXN0IGZvciBGaWxlU3lzdGVtOjpjcmVhdGVGaWxlCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKwogMjAyMC0wMi0xOCAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVy
IGZsdXNoIiB0ZXJtaW5vbG9neSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKaW5kZXggZDBlNTE1MWE5OTkyLi5jMmVl
MzRkN2U0MDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVT
eXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0u
Y3BwCkBAIC0xNDUsNCArMTQ1LDEwIEBAIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgVW5pY29kZURp
cmVjdG9yeU5hbWUpCiAgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWREaXJlY3RvcnlOYW1lID09IGRp
cmVjdG9yeU5hbWUpOwogfQogCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIG9wZW5FeGlzdGluZ0Zp
bGVXaXRoT25seUNyZWF0ZUZpbGUpCit7CisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpv
cGVuRmlsZSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkV3Jp
dGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwsIHRydWUpOworICAgIEVY
UEVDVF9GQUxTRShGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGhhbmRsZSkpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391685</attachid>
            <date>2020-02-25 14:18:06 -0800</date>
            <delta_ts>2020-02-26 10:52:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tmp.diff</filename>
            <type>text/plain</type>
            <size>37200</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWE2MzVkNDViOTguLjM5YTg2NjVmNjAwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKwor
ICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wMi0xNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBVcGRhdGUgV2ViR0wyIHJlc3Vs
dHMgd2l0aCBBTkdMRSBiYWNrZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA2ODZiN2M5ZDE3NWUuLjBiZGVlNTU0YTljNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMTYx
LDcgKzExNjEsMjAgQEAgY3J5cHRvL3N1YnRsZS93cmFwLWtleS1tYWxmb3JtZWQtcGFyYW1ldGVy
cy5odG1sIFsgU2tpcCBdCiAKIGh0dHAvdGVzdHMvYXBwY2FjaGUgWyBTa2lwIF0KIGh0dHAvdGVz
dHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAgXQotaHR0cC90ZXN0cy9jYWNoZSBbIFNraXAgXQor
CisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgoraHR0cC90ZXN0cy9jYWNoZS9jYW5jZWwtbXVs
dGlwbGUtcG9zdC14aHJzLmh0bWwgWyBGYWlsdXJlIF0KKworIyBmYWlscyBiZWNhdXNlIG9mIGNv
bnZlcnNpb24gdG8gZXBvY2ggYmVoYXZpb3Igc3BlY2lmaWMgdG8gTWFjCitodHRwL3Rlc3RzL2Nh
Y2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1sYXN0LW1vZGlmaWVkLmh0bWwgWyBGYWlsdXJlIF0K
KworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0dHAvdGVzdHMvY2FjaGUvaWZyYW1lLTMw
NC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL25ldHdvcmstZXJyb3It
ZHVyaW5nLXJldmFsaWRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hlL3Bh
cnRpdGlvbmVkLWNhY2hlLWlmcmFtZS5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2NhY2hl
L3BhcnRpdGlvbmVkLWNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvd2ls
bHNlbmRyZXF1ZXN0LXJldHVybnMtbnVsbC1mb3ItbWVtb3J5LWNhY2hlLWxvYWQuaHRtbCBbIEZh
aWx1cmUgXQorCiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UgWyBTa2lwIF0KIGh0dHAvdGVzdHMv
Y2FudmFzIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRz
YW5kYm94IFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYxNzQ2NzEwYjFiZC4uMTQ1N2Q1MzQ0MzYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBz
b255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5
IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6Cisg
ICAgICAgIEFkZGVkIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIGZsYWcgd2hlbiBvcGVuaW5nIGZpbGVz
LgorICAgICAgICBSZW1vdmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgdGhlIGxpc3REaXJlY3Rvcnkg
ZmlsdGVyIHNpbmNlIHRoZSBkZWZhdXQKKyAgICAgICAgU3RyaW5nKCkgZmlsdGVyIGRvZXNuJ3Qg
bWF0Y2ggYWxsIGZpbGVzIG9uIE1hYyBhbmQgV2luZG93cy4KKworICAgICAgICBBZGRlZCBGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSB0byBiZSB1c2VkIHdpdGggUmVhZFdyaXRlIE1hcHBlZEZpbGVE
YXRhLgorICAgICAgICBBZGRlZCBvbmx5Q3JlYXRlRmlsZSBmbGFnIHRvIG9wZW5GaWxlIHdoaWNo
IGNhdXNlcyBvcGVuRmlsZSB0byBmYWlsIGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorCisg
ICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICBBZGRlZCAoU19JUlVTUiB8IFNfSVdVU1Ip
IGZpbGUgb3BlbiBtb2Rlcy4KKworICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6
CisgICAgICAgIEltcGxlbWVudCBnZXRWb2x1bWVGcmVlU3BhY2Ugc2luY2Ugc29tZSBvZiB0aGUg
dGVzdHMgdXNlIGl0IHdoZW4gdG9nZ2xpbmcgY2FjaGUuCisgICAgICAgIAorICAgICAgICAqIHd0
Zi93aW4vUGF0aFdhbGtlci5jcHA6CisKIDIwMjAtMDItMTggIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBmcm9tICJsYXllciBmbHVzaCIgdGVy
bWlub2xvZ3kgdG8gInJlbmRlcmluZyB1cGRhdGUiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcy
Zjk1M2VhYjNmYy4uODQ4NTIxZTI3MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxl
U3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcApAQCAtMjg3LDE3
ICsyODcsMTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBwZWRGaWxlRGF0YSgpCiAgICAgdW5tYXBW
aWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUpOwogfQogCi0jaWYgSEFWRShNTUFQKQot
Ci1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwg
TWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK01hcHBlZEZpbGVEYXRhOjpNYXBw
ZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2Rl
LCBib29sJiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQgPSBvcGVuRmlsZShmaWxlUGF0aCwgRmls
ZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0gb3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRs
ZShmZCwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoZmQsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAgICAgY2xvc2VGaWxlKGZkKTsKIH0KIAot
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhBVkUoTU1BUCkKKworYm9vbCBNYXBwZWRG
aWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Bl
bk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUpCiB7CiAgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNCw3ICszMjQs
MjQgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfRklMRSB8
IChtb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hBUkVEIDogTUFQX1BSSVZB
VEUpLCBmZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIHN3
aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAg
cGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmls
ZU9wZW5Nb2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1dSSVRFOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAg
ICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CisgICAgICAgIGJyZWFr
OworI2lmIE9TKERBUldJTikKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seToKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkKiBk
YXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlvbiwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9
PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NIQVJFRCA6IE1BUF9QUklWQVRFKSwgZmQs
IDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIxNmZjLi44ZTZhYzVjNzg1MTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmgKQEAgLTc5LDExICs3OSwxNyBAQCBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUg
aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogZW51bSBjbGFzcyBGaWxlT3Blbk1vZGUg
ewogICAgIFJlYWQsCiAgICAgV3JpdGUsCisgICAgUmVhZFdyaXRlLAogI2lmIE9TKERBUldJTikK
ICAgICBFdmVudHNPbmx5LAogI2VuZGlmCiB9OwogCitlbnVtIGNsYXNzIEZpbGVBY2Nlc3NQZXJt
aXNzaW9uIDogYm9vbCB7CisgICAgVXNlciwKKyAgICBBbGwKK307CisKIGVudW0gY2xhc3MgRmls
ZVNlZWtPcmlnaW4gewogICAgIEJlZ2lubmluZywKICAgICBDdXJyZW50LApAQCAtMTMxLDcgKzEz
Nyw3IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE1ldGFkYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpCiBib29sIGNhbkV4Y2x1ZGVGcm9tQmFja3Vw
KCk7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgZmlsZSBjYW4gZXZlciBiZSBleGNsdWRlZCBmcm9t
IGJhY2t1cC4KIGJvb2wgZXhjbHVkZUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJik7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPFN0cmlu
Zz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVy
ID0gU3RyaW5nKCkpOworV1RGX0VYUE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcik7CiAKIFdURl9F
WFBPUlRfUFJJVkFURSBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmKTsKIFN0cmluZyBzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IGNo
YXIqKTsKQEAgLTE0MCw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBpc0hhbmRsZVZhbGlkKGNvbnN0
IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IHJldHVybiBoYW5kbGUgIT0gaQogCiAvLyBQ
cmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGgsIG5vdCB0
aGUgZnVsbCBwYXRoLgogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVtcG9yYXJ5Rmls
ZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
RmlsZU9wZW5Nb2RlKTsKK1dURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3Bl
bkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNz
aW9uID0gRmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCwgYm9vbCBvbmx5Q3JlYXRlRmlsZSA9IGZh
bHNlKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUmKTsKIC8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBmaWxlIGlmIHN1Y2Nlc3NmdWwsIC0xIG90aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJ
VkFURSBsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zm
c2V0LCBGaWxlU2Vla09yaWdpbik7CkBAIC0yMDYsNiArMjEyLDcgQEAgcHVibGljOgogICAgIE1h
cHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBN
YXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSwgYm9v
bCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRm
b3JtRmlsZUhhbmRsZSwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVu
TW9kZSwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB+TWFwcGVkRmlsZURhdGEoKTsKICAgICBNYXBwZWRGaWxlRGF0YSYgb3BlcmF0b3I9KE1h
cHBlZEZpbGVEYXRhJiYpOwogCkBAIC0yMTYsMTUgKzIyMywyMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCogbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9maWxlRGF0YSwgbnVsbHB0
cik7IH0KIAogcHJpdmF0ZToKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFu
ZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1v
ZGUsIE1hcHBlZEZpbGVNb2RlKTsKIAogICAgIHZvaWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07
CiAgICAgdW5zaWduZWQgbV9maWxlU2l6ZSB7IDAgfTsKIH07CiAKLWlubGluZSBNYXBwZWRGaWxl
RGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK2lubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVk
RmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9k
ZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUs
IEZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7Cit9CisKK2lubGluZSBNYXBwZWRGaWxlRGF0
YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2Rl
IG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQogewotICAg
IHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1h
cEZpbGVIYW5kbGUoaGFuZGxlLCBvcGVuTW9kZSwgbWFwTW9kZSk7CiB9CiAKIGlubGluZSBNYXBw
ZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoTWFwcGVkRmlsZURhdGEmJiBvdGhlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwIGIvU291cmNlL1dU
Ri93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKaW5kZXggODZjMDRmOWQ1ZTEzLi5jYjEwYmYx
OWUwNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0zMzgsNyAr
MzM4LDcgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh0
ZW1wUGF0aC5nZXQoKSk7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJt
aXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgb25seUNyZWF0ZUZpbGUpCiB7CiAgICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKICAgICBpZiAoIXZhbGlkUmVw
cmVzZW50YXRpb24oZmlsZW5hbWUpKQpAQCAtMzQ2LDEzICszNDYsMjAgQEAgUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiAK
ICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
ZmlsZW5hbWUuZGF0YSgpKSk7CiAgICAgR1JlZlB0cjxHRmlsZUlPU3RyZWFtPiBpb1N0cmVhbTsK
KyAgICBHRmlsZUNyZWF0ZUZsYWdzIHBlcm1pc3Npb25GbGFnID0gKHBlcm1pc3Npb24gPT0gRmls
ZUFjY2Vzc1Blcm1pc3Npb246OkFsbCkgPyBHX0ZJTEVfQ1JFQVRFX05PTkUgOiBHX0ZJTEVfQ1JF
QVRFX1BSSVZBVEU7CisKKyAgICBpZiAob25seUNyZWF0ZUZpbGUpIHsKKyAgICAgICAgaW9TdHJl
YW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgcGVybWlz
c2lvbkZsYWcsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgcmV0dXJuIGlvU3RyZWFtLmxl
YWtSZWYoKTsKKyAgICB9CisKICAgICBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAg
ICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1v
ZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8
IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUpIHsKICAgICAgICAgaWYgKGdfZmlsZV90
ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGljX2Nhc3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9F
WElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCiAgICAgICAgICAgICBpb1N0cmVhbSA9
IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cikpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihn
X2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51
bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmls
ZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBu
dWxscHRyKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGlvU3RyZWFtLmxlYWtSZWYoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IDI3ODM5ODgzYTFhMi4uYjQ4
MTlhYWJlMWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAg
LTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBy
ZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJt
aXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgb25seUNyZWF0ZUZpbGUpCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIApAQCAtODcsMTYgKzg3LDMz
IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVP
cGVuTW9kZSBtb2RlKQogICAgICAgICByZXR1cm4gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsK
IAogICAgIGludCBwbGF0Zm9ybUZsYWcgPSAwOwotICAgIGlmIChtb2RlID09IEZpbGVPcGVuTW9k
ZTo6UmVhZCkKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVh
ZDoKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fUkRPTkxZOwotICAgIGVsc2UgaWYgKG1vZGUg
PT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Bl
bk1vZGU6OldyaXRlOgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fV1JPTkxZIHwgT19DUkVB
VCB8IE9fVFJVTkMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVh
ZFdyaXRlOgorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fUkRXUiB8IE9fQ1JFQVQpOworICAg
ICAgICBicmVhazsKICNpZiBPUyhEQVJXSU4pCi0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Bl
bk1vZGU6OkV2ZW50c09ubHkpCisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OkV2ZW50c09ubHk6CiAg
ICAgICAgIHBsYXRmb3JtRmxhZyB8PSBPX0VWVE9OTFk7CisgICAgICAgIGJyZWFrOwogI2VuZGlm
CisgICAgfQorCisgICAgaWYgKG9ubHlDcmVhdGVGaWxlKQorICAgICAgICBwbGF0Zm9ybUZsYWcg
fD0gKE9fQ1JFQVQgfCBPX0VYQ0wpOworCisgICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAg
ICBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAg
cGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJt
aXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25G
bGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8
IFNfSVdPVEgpOwogCi0gICAgcmV0dXJuIG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcs
IDA2NjYpOworICAgIHJldHVybiBvcGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJt
aXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIv
U291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IDkzMzRhYzAyOWQ1Ny4u
ZjVhNjM3YWQyNDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdp
bi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC00MjEs
NyArNDIxLDcgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRm
b3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJldHVybiBwcm9wb3NlZFBhdGg7CiB9CiAKLVBs
YXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9k
ZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
RmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uLCBib29sIG9ubHlDcmVhdGVG
aWxlKQogewogICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSAwOwogICAgIERXT1JEIGNyZWF0aW9u
RGlzcG9zaXRpb24gPSAwOwpAQCAtNDM2LDEwICs0MzYsMTUgQEAgUGxhdGZvcm1GaWxlSGFuZGxl
IG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiAgICAgICAg
IGRlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1dSSVRFOwogICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0
aW9uID0gQ1JFQVRFX0FMV0FZUzsKICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0
ZToKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEU7
CisgICAgICAgIGNyZWF0aW9uRGlzcG9zaXRpb24gPSBPUEVOX0FMV0FZUzsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogCisgICAgaWYgKG9ubHlDcmVhdGVGaWxlKQorICAgICAgICBjcmVhdGlvbkRp
c3Bvc2l0aW9uID0gQ1JFQVRFX05FVzsKKwogICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IHBhdGg7
CiAgICAgcmV0dXJuIENyZWF0ZUZpbGUoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRh
KCksIGRlc2lyZWRBY2Nlc3MsIHNoYXJlTW9kZSwgMCwgY3JlYXRpb25EaXNwb3NpdGlvbiwgRklM
RV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKIH0KQEAgLTU0OSw5ICs1NTQsMTQgQEAgVmVjdG9yPFN0
cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5n
JiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wgZ2V0Vm9sdW1lRnJlZVNw
YWNlKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90JikKK2Jvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNv
bnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKIHsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgVUxBUkdFX0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7CisgICAg
aWYgKCFHZXREaXNrRnJlZVNwYWNlRXhXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZm
cmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlciwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZyZWVTcGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVy
LlF1YWRQYXJ0OworICAgIHJldHVybiB0cnVlOwogfQogCiBPcHRpb25hbDxpbnQzMl90PiBnZXRG
aWxlRGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQpAQCAtNjAzLDE1ICs2MTMsNyBAQCBi
b29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkKICAgICByZXR1cm4gVW5t
YXBWaWV3T2ZGaWxlKGJ1ZmZlcik7CiB9CiAKLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0
YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNj
ZXNzKQotewotICAgIGF1dG8gZmlsZSA9IENyZWF0ZUZpbGUoZmlsZVBhdGgud2lkZUNoYXJhY3Rl
cnMoKS5kYXRhKCksIEdFTkVSSUNfUkVBRCwgMCwgbnVsbHB0ciwgT1BFTl9FWElTVElORywgRklM
RV9BVFRSSUJVVEVfTk9STUFMLCBudWxscHRyKTsKLQotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFu
ZGxlKGZpbGUsIG1vZGUpOwotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBNYXBwZWRG
aWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRG
aWxlTW9kZSkKK2Jvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSkKIHsK
ICAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNjI1LDExICs2MjcsMjggQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgYXV0byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFu
ZGxlLCBudWxscHRyLCBQQUdFX1JFQURPTkxZLCAwLCAwLCBudWxscHRyKTsKKyAgICBEV09SRCBw
YWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRE9OTFk7CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9
IEZJTEVfTUFQX1JFQUQ7CisgICAgc3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9w
ZW5Nb2RlOjpSZWFkOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRE9OTFk7Cisg
ICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFH
RV9SRUFEV1JJVEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAg
cGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURXUklURTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9
IEZJTEVfTUFQX1dSSVRFIHwgRklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgYXV0byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBw
YWdlUHJvdGVjdGlvbiwgMCwgMCwgbnVsbHB0cik7CiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5n
LCBGSUxFX01BUF9SRUFELCAwLCAwLCBzaXplKTsKKyAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09m
RmlsZShtYXBwaW5nLCBkZXNpcmVkQWNjZXNzLCAwLCAwLCBzaXplKTsKICAgICBDbG9zZUhhbmRs
ZShtYXBwaW5nKTsKICAgICBpZiAoIW1fZmlsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcAppbmRleCA4ZDdkN2FjNjgzODUuLjY4OGZlZGQ1OWZh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0b3J5
ICsgIlxcIiArIHBhdHRlcm47CisgICAgU3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9y
eSwgJ1xcJywgcGF0dGVybik7CiAgICAgbV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgu
d2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYxNzJh
Y2RkMzQ2Mi4uNGMzYWQ5MGU1MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTAy
LTE4ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBb
V2luXSBJbXBsZW1lbnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTc2ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICBFbnN1cmUgdGhhdCB0aGUgQ2FjaGVTdG9yYWdl
IGRpcmVjdG9yeSBpcyBhY3R1YWxseSBiZWluZyBjcmVhdGVkLgorCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHA6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIFVzZSBtb3JlIEZp
bGVTeXN0ZW0gZnVuY3Rpb25hbGl0eSB0byBzaGFyZSBjb2RlIGFjcm9zcyBwbGF0Zm9ybXMuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ3VybC5jcHA6
CisgICAgICAgIFVzZSBPcHRpb25hbDxWZWN0b3I+IGZvciBtX2J1ZmZlciBzaW5jZSB3ZSBuZWVk
IHRvIGRpZmZlcmVudGlhdGUgaXNFbXB0eSBhbmQgaXNOdWxsLgorCiAyMDIwLTAyLTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgZnJvbSAi
bGF5ZXIgZmx1c2giIHRlcm1pbm9sb2d5IHRvICJyZW5kZXJpbmcgdXBkYXRlIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA5MWRmM2I4
MGEzNmEuLmU0NDIzNGM1ZTY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQ1NCw4ICs0NTQsMTEgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCB1aW4KICAgICBhdXRvIGlzTmV3RW50cnkgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhLCAmY2FjaGVSb290UGF0aF0gewogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9KS5pc05ld0VudHJ5OwotICAgIGlmIChpc05ld0VudHJ5
KQorICAgIGlmIChpc05ld0VudHJ5KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQYXRoSGFuZGxlKTsKKyAgICAgICAgaWYgKCFjYWNoZVJv
b3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgY2Fj
aGVSb290UGF0aCkpOworICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YS5jcHAKaW5kZXggNzVhYTkwNWFiNjhhLi44NzIyY2E2NDhiZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx3dGYvQ3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5o
PgogCiAjaWYgIU9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTM5LDI2ICsz
OCwyMyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAot
I2lmICFPUyhXSU5ET1dTKQogRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KSBjb25zdAogewotICAgIGludCBmZCA9IG9wZW4oRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiAsIFNfSVJV
U1IgfCBTX0lXVVNSKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgaWYgKGZ0cnVuY2F0ZShmZCwgbV9zaXplKSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmQpOwor
ICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9u
OjpVc2VyLCB0cnVlKTsKKyAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxl
KSB8fCAhRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgbV9zaXplKSkgeworICAgICAg
ICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAgICAgCiAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgo
cGF0aCk7Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFE
IHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwotICAgIGlmIChtYXAgPT0gTUFQX0ZB
SUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNjZXNzOworICAgIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBGaWxlU3lzdGVtOjpGaWxl
T3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZU1vZGU6OlNoYXJlZCwg
c3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShoYW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIHZvaWQqIG1h
cCA9IGNvbnN0X2Nhc3Q8dm9pZCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsKICAgICB1aW50OF90KiBt
YXBEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hcCk7CiAgICAgYXBwbHkoWyZtYXBEYXRh
XShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzU2l6ZSkgewogICAgICAgICBtZW1j
cHkobWFwRGF0YSwgYnl0ZXMsIGJ5dGVzU2l6ZSk7CkBAIC02Niw1MiArNjIsMjMgQEAgRGF0YSBE
YXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKIAorI2lmIE9TKFdJTkRPV1MpCisgICAgRFdPUkQgb2xkUHJvdGVjdGlv
bjsKKyAgICBWaXJ0dWFsUHJvdGVjdChtYXAsIG1fc2l6ZSwgRklMRV9NQVBfUkVBRCwgJm9sZFBy
b3RlY3Rpb24pOworICAgIEZsdXNoVmlld09mRmlsZShtYXAsIG1fc2l6ZSk7CisjZWxzZQogICAg
IC8vIERyb3AgdGhlIHdyaXRlIHBlcm1pc3Npb24uCiAgICAgbXByb3RlY3QobWFwLCBtX3NpemUs
IFBST1RfUkVBRCk7CiAKICAgICAvLyBGbHVzaCAoYXN5bmNocm9ub3VzbHkpIHRvIGZpbGUsIHR1
cm5pbmcgdGhpcyBpbnRvIGNsZWFuIG1lbW9yeS4KICAgICBtc3luYyhtYXAsIG1fc2l6ZSwgTVNf
QVNZTkMpOwotCi0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgbV9zaXplLCBmZCk7Ci19
Ci0jZWxzZQotRGF0YSBEYXRhOjptYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAot
ewotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxp
ZChmaWxlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6d3JpdGVU
b0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSwgc2l6ZSgp
KSA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIERhdGEoVmVjdG9yPHVpbnQ4
X3Q+KG1fYnVmZmVyKSk7Ci19CiAjZW5kaWYKIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBtYXBG
aWxlKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05M
WSwgMCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBzdHJ1Y3Qg
c3RhdCBzdGF0OwotICAgIGlmIChmc3RhdChmZCwgJnN0YXQpIDwgMCkgewotICAgICAgICBjbG9z
ZShmZCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHNpemVfdCBzaXplID0gc3Rh
dC5zdF9zaXplOwotICAgIGlmICghc2l6ZSkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAg
IHJldHVybiBEYXRhOjplbXB0eSgpOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdEFuZE1hcEZp
bGUoZmQsIDAsIHNpemUpOworICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChXVEZNb3ZlKG1hcHBl
ZEZpbGUpLCBoYW5kbGUpOwogfQotI2VuZGlmCiAKLURhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgpCitEYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKIHsKLSNpZiAhT1MoV0lORE9X
UykKLSAgICByZXR1cm4gbWFwRmlsZShGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpKTsKLSNlbHNlCiAgICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3Bl
bkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAgICBpZiAoIUZp
bGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0x
MTksMzEgKzg2LDI4IEBAIERhdGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYg
KCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlLCBzaXplKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICByZXR1cm4gYWRvcHRBbmRNYXBGaWxlKGZpbGUsIDAsIHNpemUpOwotI2VuZGlmCiB9
CiAKLSNpZiAhT1MoV0lORE9XUykKLURhdGEgYWRvcHRBbmRNYXBGaWxlKGludCBmZCwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90IHNpemUpCitEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoKS5kYXRhKCkpOworfQorCitEYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsK
ICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7CiAgICAg
fQotCi0gICAgdm9pZCogbWFwID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9Q
UklWQVRFLCBmZCwgb2Zmc2V0KTsKLSAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKLSAgICAg
ICAgY2xvc2UoZmQpOworICAgIGJvb2wgc3VjY2VzczsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSBtYXBwZWRGaWxlKGhhbmRsZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6UHJpdmF0ZSwgc3VjY2Vzcyk7CisgICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBEYXRhOjphZG9wdE1hcChtYXAs
IHNpemUsIGZkKTsKKyAgICByZXR1cm4gRGF0YTo6YWRvcHRNYXAoV1RGTW92ZShtYXBwZWRGaWxl
KSwgaGFuZGxlKTsKIH0KLSNlbHNlCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpCi17Ci0g
ICAgcmV0dXJuIERhdGEoZmlsZSwgb2Zmc2V0LCBzaXplKTsKLX0KLSNlbmRpZgogCiBTSEExOjpE
aWdlc3QgY29tcHV0ZVNIQTEoY29uc3QgRGF0YSYgZGF0YSwgY29uc3QgU2FsdCYgc2FsdCkKIHsK
QEAgLTE3OSw0MCArMTQzLDI1IEBAIHN0YXRpYyBTYWx0IG1ha2VTYWx0KCkKIAogT3B0aW9uYWw8
U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogewotI2lmICFPUyhXSU5E
T1dTKQotICAgIGF1dG8gY3BhdGggPSBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7Ci0gICAgYXV0byBmZCA9IG9wZW4oY3BhdGguZGF0YSgpLCBPX1JET05MWSwgMCk7
Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNSZWFkID0gcmVhZChmZCwgc2FsdC5kYXRh
KCksIHNhbHQuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7Ci0gICAgaWYgKGJ5dGVzUmVhZCAhPSBz
dGF0aWNfY2FzdDxzc2l6ZV90PihzYWx0LnNpemUoKSkpIHsKLSAgICAgICAgc2FsdCA9IG1ha2VT
YWx0KCk7Ci0KLSAgICAgICAgdW5saW5rKGNwYXRoLmRhdGEoKSk7Ci0gICAgICAgIGZkID0gb3Bl
bihjcGF0aC5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBT
X0lXVVNSKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gd3JpdGUoZmQsIHNhbHQuZGF0YSgpLCBz
YWx0LnNpemUoKSkgPT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4oc2FsdC5zaXplKCkpOwotICAgICAg
ICBjbG9zZShmZCk7Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQotICAgIHJldHVybiBzYWx0OwotI2Vsc2UKLSAgICBhdXRvIGZpbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwot
ICAgIFNhbHQgc2FsdDsKLSAgICBhdXRvIGJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9t
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6
ZSgpKTsKLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgaWYgKGJ5dGVzUmVh
ZCAhPSBzYWx0LnNpemUoKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKKyAgICBpZiAo
ZmlsZUV4aXN0cyhwYXRoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVu
RmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgICAgICBTYWx0
IHNhbHQ7CisgICAgICAgIGF1dG8gYnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxl
KGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkp
OworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAgICAgIGlmIChieXRl
c1JlYWQgPT0gc2FsdC5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gc2FsdDsKIAogICAgICAg
ICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHBhdGgpOwotICAgICAgICBmaWxlID0gRmlsZVN5c3Rl
bTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAg
ICAgIGJvb2wgc3VjY2VzcyA9IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpID09IHNhbHQuc2l6ZSgp
OwotICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgU2FsdCBzYWx0ID0g
bWFrZVNhbHQoKTsKKyAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBG
aWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVy
bWlzc2lvbjo6VXNlcik7CisgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5c3RlbTo6d3JpdGVUb0Zp
bGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUo
KSkgPT0gc2FsdC5zaXplKCk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOworICAg
IGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIHJldHVybiBzYWx0Owot
I2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaAppbmRleCBk
NzhkOThiNjE3NTAuLjM3YjU5NjY1NmE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKQEAgLTM5LDYgKzM5LDExIEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyU291cC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoQ1VS
TCkKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU2hhcmVkTWVtb3J5OwpAQCAtNTMsMTkg
KzU4LDE2IEBAIHB1YmxpYzoKICAgICB+RGF0YSgpIHsgfQogCiAgICAgc3RhdGljIERhdGEgZW1w
dHkoKTsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcCh2b2lkKiBt
YXAsIHNpemVfdCwgaW50IGZkKTsKLSNlbmRpZgorICAgIHN0YXRpYyBEYXRhIGFkb3B0TWFwKEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRs
ZSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBlbnVtIGNsYXNzIEJhY2tpbmcgeyBCdWZm
ZXIsIE1hcCB9OwogICAgIERhdGEoT1NPYmplY3RQdHI8ZGlzcGF0Y2hfZGF0YV90PiYmLCBCYWNr
aW5nID0gQmFja2luZzo6QnVmZmVyKTsKICNlbmRpZgogI2lmIFVTRShTT1VQKQotICAgIERhdGEo
R1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBpbnQgZmQgPSAtMSk7Ci0jZWxpZiBPUyhXSU5ET1dTKQot
ICAgIGV4cGxpY2l0IERhdGEoVmVjdG9yPHVpbnQ4X3Q+JiYpOwotICAgIERhdGEoRmlsZVN5c3Rl
bTo6UGxhdGZvcm1GaWxlSGFuZGxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QpOworICAgIERhdGEo
R1JlZlB0cjxTb3VwQnVmZmVyPiYmLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQg
PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKTsKKyNlbGlmIFVTRShDVVJM
KQorICAgIERhdGEoVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhPiYmKTsKICNlbmRpZgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQpAQCAtOTQsMTAgKzk2LDEwIEBAIHBy
aXZhdGU6CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICBtdXRhYmxlIEdSZWZQdHI8U291cEJ1
ZmZlcj4gbV9idWZmZXI7Ci0gICAgaW50IG1fZmlsZURlc2NyaXB0b3IgeyAtMSB9OworICAgIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVEZXNjcmlwdG9yIHsgRmlsZVN5c3Rl
bTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OwogI2VuZGlmCi0jaWYgT1MoV0lORE9XUykK
LSAgICBWZWN0b3I8dWludDhfdD4gbV9idWZmZXI7CisjaWYgVVNFKENVUkwpCisgICAgQm94PFZh
cmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4+IG1fYnVm
ZmVyOwogI2VuZGlmCiAgICAgbXV0YWJsZSBjb25zdCB1aW50OF90KiBtX2RhdGEgeyBudWxscHRy
IH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKQEAgLTEwNiwxNyArMTA4LDggQEAgcHJpdmF0
ZToKIAogRGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYpOwogYm9vbCBi
eXRlc0VxdWFsKGNvbnN0IERhdGEmLCBjb25zdCBEYXRhJik7Ci0jaWYgIU9TKFdJTkRPV1MpCi1E
YXRhIGFkb3B0QW5kTWFwRmlsZShpbnQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZWxzZQog
RGF0YSBhZG9wdEFuZE1hcEZpbGUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlLCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3QpOwotI2VuZGlmCi0jaWYgVVNFKEdMSUIpICYmICFQTEFURk9STShX
SU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90KTsKLSNlbmRpZgotI2lmICFPUyhXSU5ET1dTKQogRGF0YSBtYXBGaWxlKGNvbnN0IGNo
YXIqIHBhdGgpOwotI2VuZGlmCiBEYXRhIG1hcEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAog
dXNpbmcgU2FsdCA9IHN0ZDo6YXJyYXk8dWludDhfdCwgOD47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNvY29hLm1t
CmluZGV4IDZhMzlmODg3MDA4Ny4uY2I0YWMzOGM2YTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5t
bQpAQCAtOTIsMTEgKzkyLDEzIEBAIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29u
c3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3Jl
YXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAot
RGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRh
IERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwg
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogeworICAgIHNpemVfdCBzaXplID0g
bWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxl
KCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAg
ICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsKICAgICBhdXRvIGJv
ZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlz
cGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAw
KSwgW21hcCwgc2l6ZV0gewogICAgICAgICBtdW5tYXAobWFwLCBzaXplKTsKICAgICB9KSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNmNDMxNTZjNWEwMy4uMTkyNDgyYmY5ZjQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDdXJsLmNwcApAQCAtMzAsNDAgKzMwLDQyIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIERhdGE6OkRhdGEoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpCisgICAgOiBtX2J1ZmZlcihCb3g8VmFyaWFudDxWZWN0b3I8dWlu
dDhfdD4sIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPj46OmNyZWF0ZShWZWN0b3I8dWludDhf
dD4oc2l6ZSkpKQorICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgbV9idWZmZXIucmVzaXplKHNp
emUpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgbWVtY3B5KG1fYnVmZmVyLmRhdGEoKSwgZGF0
YSwgc2l6ZSk7CisgICAgbWVtY3B5KFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oKm1fYnVmZmVy
KS5kYXRhKCksIGRhdGEsIHNpemUpOwogfQogCi1EYXRhOjpEYXRhKEZpbGVTeXN0ZW06OlBsYXRm
b3JtRmlsZUhhbmRsZSBmaWxlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK0RhdGE6OkRh
dGEoVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPiYm
IGRhdGEpCisgICAgOiBtX2J1ZmZlcihCb3g8VmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhPj46OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSkKKyAgICAsIG1f
aXNNYXAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4o
Km1fYnVmZmVyKSkKIHsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0g
c2l6ZTsKLSAgICBGaWxlU3lzdGVtOjpzZWVrRmlsZShmaWxlLCBvZmZzZXQsIEZpbGVTeXN0ZW06
OkZpbGVTZWVrT3JpZ2luOjpCZWdpbm5pbmcpOwotICAgIEZpbGVTeXN0ZW06OnJlYWRGcm9tRmls
ZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2J1ZmZlci5kYXRhKCkpLCBzaXplKTsK
LSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLURhdGE6OkRhdGEoVmVjdG9y
PHVpbnQ4X3Q+JiYgYnVmZmVyKQotICAgIDogbV9idWZmZXIoV1RGTW92ZShidWZmZXIpKQotewot
ICAgIG1fc2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBtX3NpemUgPSBXVEY6OnN3aXRjaE9u
KCptX2J1ZmZlciwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpIC0+
IHNpemVfdCB7IHJldHVybiBidWZmZXIuc2l6ZSgpOyB9LAorICAgICAgICBbXShjb25zdCBGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFwcGVkRmlsZSkgLT4gc2l6ZV90IHsgcmV0dXJuIG1h
cHBlZEZpbGUuc2l6ZSgpOyB9CisgICAgKTsKIH0KIAogRGF0YSBEYXRhOjplbXB0eSgpCiB7Ci0g
ICAgcmV0dXJuIHsgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAgIHJldHVybiB7
IFdURk1vdmUoYnVmZmVyKSB9OwogfQogCiBjb25zdCB1aW50OF90KiBEYXRhOjpkYXRhKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpOworICAgIGlmICghbV9idWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oKm1fYnVm
ZmVyLAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikgLT4gY29uc3Qg
dWludDhfdCogeyByZXR1cm4gYnVmZmVyLmRhdGEoKTsgfSwKKyAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIG1hcHBlZEZpbGUpIC0+IGNvbnN0IHVpbnQ4X3QqIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtYXBwZWRGaWxlLmRhdGEoKSk7IH0K
KyAgICApOwogfQogCiBib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
YnVmZmVyLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1fYnVmZmVyOwogfQogCiBib29sIERhdGE6
OmFwcGx5KGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+JiBhcHBs
aWVyKSBjb25zdApAQCAtNzEsMjEgKzczLDM3IEBAIGJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVu
Y3Rpb248Ym9vbChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CiAgICAg
aWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGFwcGxp
ZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9idWZmZXIuZGF0YSgpKSwgbV9i
dWZmZXIuc2l6ZSgpKTsKKyAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhKCkpLCBzaXplKCkpOwogfQogCiBEYXRhIERhdGE6OnN1YnJhbmdlKHNp
emVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAogewotICAgIHJldHVybiB7IG1fYnVmZmVy
LmRhdGEoKSArIG9mZnNldCwgc2l6ZSB9OworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICByZXR1cm4geyBkYXRhKCkgKyBvZmZzZXQsIHNpemUgfTsKIH0KIAog
RGF0YSBjb25jYXRlbmF0ZShjb25zdCBEYXRhJiBhLCBjb25zdCBEYXRhJiBiKQogeworICAgIGlm
IChhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYjsKKyAgICBpZiAoYi5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIGE7CisKICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKGEuc2l6ZSgpICsg
Yi5zaXplKCkpOwogICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBhLmRhdGEoKSwgYS5zaXplKCkp
OwogICAgIG1lbWNweShidWZmZXIuZGF0YSgpICsgYS5zaXplKCksIGIuZGF0YSgpLCBiLnNpemUo
KSk7CiAgICAgcmV0dXJuIERhdGEoV1RGTW92ZShidWZmZXIpKTsKIH0KIAorRGF0YSBEYXRhOjph
ZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKK3sKKyAgICBBU1NFUlQobWFwcGVkRmlsZS5kYXRh
KCkpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmZCk7CisKKyAgICByZXR1cm4geyBXVEZN
b3ZlKG1hcHBlZEZpbGUpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCmluZGV4IDUxNWMwOWViYmZk
My4uZDNiNzllMDE0YTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcApAQCAtNDgsMTEgKzQ4LDEx
IEBAIERhdGE6OkRhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiAgICAgbV9i
dWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoY29waWVkRGF0YSwg
c2l6ZSwgY29waWVkRGF0YSwgZmFzdEZyZWUpKTsKIH0KIAotRGF0YTo6RGF0YShHUmVmUHRyPFNv
dXBCdWZmZXI+JiYgYnVmZmVyLCBpbnQgZmQpCitEYXRhOjpEYXRhKEdSZWZQdHI8U291cEJ1ZmZl
cj4mJiBidWZmZXIsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKICAgICA6IG1f
YnVmZmVyKGJ1ZmZlcikKICAgICAsIG1fZmlsZURlc2NyaXB0b3IoZmQpCiAgICAgLCBtX3NpemUo
YnVmZmVyID8gYnVmZmVyLT5sZW5ndGggOiAwKQotICAgICwgbV9pc01hcChtX3NpemUgJiYgZmQg
IT0gLTEpCisgICAgLCBtX2lzTWFwKG1fc2l6ZSAmJiBGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlk
KGZkKSkKIHsKIH0KIApAQCAtMTA4LDEyICsxMDgsMTIgQEAgc3RydWN0IE1hcFdyYXBwZXIgewog
ICAgIH5NYXBXcmFwcGVyKCkKICAgICB7CiAgICAgICAgIG11bm1hcChtYXAsIHNpemUpOwotICAg
ICAgICBjbG9zZShmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmls
ZShmaWxlRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgdm9pZCogbWFwOwogICAgIHNpemVfdCBz
aXplOwotICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZURlc2NyaXB0b3I7CiB9OwogCiBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFw
cGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIpCkBAIC0xMjEsOCArMTIxLDEwIEBAIHN0YXRpYyB2b2lk
IGRlbGV0ZU1hcFdyYXBwZXIoTWFwV3JhcHBlciogd3JhcHBlcikKICAgICBkZWxldGUgd3JhcHBl
cjsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQg
ZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgbWFw
cGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogeworICAgIHNpemVf
dCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCogbWFwID0gbWFwcGVkRmlsZS5s
ZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1hcCAhPSBNQVBfRkFJ
TEVEKTsKICAgICBNYXBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IE1hcFdyYXBwZXIgeyBtYXAsIHNp
emUsIGZkIH07CkBAIC0xMzAsMjEgKzEzMiwxNCBAQCBEYXRhIERhdGE6OmFkb3B0TWFwKHZvaWQq
IG1hcCwgc2l6ZV90IHNpemUsIGludCBmZCkKICAgICByZXR1cm4geyBXVEZNb3ZlKGJ1ZmZlciks
IGZkIH07CiB9CiAKLSNpZiBVU0UoR0xJQikgJiYgIVBMQVRGT1JNKFdJTikKLURhdGEgYWRvcHRB
bmRNYXBGaWxlKEdGaWxlSU9TdHJlYW0qIHN0cmVhbSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNp
emUpCi17Ci0gICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9p
bnB1dF9zdHJlYW0oR19JT19TVFJFQU0oc3RyZWFtKSk7Ci0gICAgaW50IGZkID0gZ19maWxlX2Rl
c2NyaXB0b3JfYmFzZWRfZ2V0X2ZkKEdfRklMRV9ERVNDUklQVE9SX0JBU0VEKGlucHV0U3RyZWFt
KSk7Ci0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgb2Zmc2V0LCBzaXplKTsKLX0KLSNl
bmRpZgotCiBSZWZQdHI8U2hhcmVkTWVtb3J5PiBEYXRhOjp0cnlDcmVhdGVTaGFyZWRNZW1vcnko
KSBjb25zdAogewogICAgIGlmIChpc051bGwoKSB8fCAhaXNNYXAoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8
Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0aCwgbV9maWxlRGVzY3JpcHRv
cik7CisgICAgR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1
dF9zdHJlYW0oR19JT19TVFJFQU0obV9maWxlRGVzY3JpcHRvcikpOworICAgIGludCBmZCA9IGdf
ZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRPUl9CQVNFRChpbnB1
dFN0cmVhbSkpOworICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OndyYXBNYXAoY29uc3RfY2FzdDxj
aGFyKj4obV9idWZmZXItPmRhdGEpLCBtX2J1ZmZlci0+bGVuZ3RoLCBmZCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKaW5kZXggYmU4
NDM3MWE4NjMwLi43YTBlYzVlMTRmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcApAQCAt
NTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMgRGlyZWN0b3J5RW50cnlUeXBlIGRpcmVj
dG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewotICAgIHN3aXRjaCAoZHR5cGUpIHsKLSAg
ICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0
b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBl
OjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIH0KLSAgICByZXR1cm4g
RGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2VuZGlmCi0KIHZvaWQgdHJhdmVyc2VEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJp
bmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rpb24pCiB7Ci0jaWYgIU9TKFdJTkRPV1Mp
Ci0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm47Ci0gICAg
ZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICBp
ZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRfdHlwZSAhPSBEVF9SRUcpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0g
ICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihuYW1lU3RyaW5nLCBkaXJlY3RvcnlFbnRy
eVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIpOwotI2Vsc2UKLSAg
ICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgpOworICAgIGF1
dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOwogICAg
IGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAgIGF1dG8gdHlwZSA9IEZpbGVT
eXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkgOiBEaXJlY3Rv
cnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0aW9uKGVudHJ5LCB0eXBlKTsKKyAgICAg
ICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKGVudHJ5KSwgdHlwZSk7CiAg
ICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkoY29uc3Qg
U3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDMzYzlhMGNiZTdlMS4uOTQ2YTJlNWM3YTI4IDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDIt
MjAgIENocmlzdG9waGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtX
aW5dIEltcGxlbWVudCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NzY4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk0NjczOTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIEZpbGVT
eXN0ZW06OmNyZWF0ZUZpbGUKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Zp
bGVTeXN0ZW0uY3BwOgorCiAyMDIwLTAyLTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgZnJvbSAibGF5ZXIgZmx1c2giIHRlcm1pbm9sb2d5
IHRvICJyZW5kZXJpbmcgdXBkYXRlIgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcAppbmRleCBkMGU1MTUxYTk5OTIuLmZlOGVjY2NlMzQwZSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKQEAgLTE0NSw0ICsxNDUs
MTAgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBVbmljb2RlRGlyZWN0b3J5TmFtZSkKICAgICBF
WFBFQ1RfVFJVRShleHBlY3RlZERpcmVjdG9yeU5hbWUgPT0gZGlyZWN0b3J5TmFtZSk7CiB9CiAK
K1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgb3BlbkV4aXN0aW5nRmlsZVdpdGhPbmx5Q3JlYXRlRmls
ZSkKK3sKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHRlbXBGaWxlUGF0
aCgpLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6Rmls
ZUFjY2Vzc1Blcm1pc3Npb246OkFsbCwgdHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxlKSk7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391756</attachid>
            <date>2020-02-26 10:52:43 -0800</date>
            <delta_ts>2020-02-26 10:57:55 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-197684-20200226105242.patch</filename>
            <type>text/plain</type>
            <size>38362</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODM2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTFhNjM1ZDQ1Yjk4N2M3ZWVmN2I3
MTNjM2UxNjQ0OGQ4MjQ4MGY4MC4uNTEzZTg2OTgxMzA4MGEzMTA3OTNmM2QyMDVmNjgxMWNiMDRh
OGZlMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlk
ICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29y
a0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBT
dXp1a2kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgor
CiAyMDIwLTAyLTE3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2ViR0xdIFVwZGF0ZSBXZWJHTDIgcmVzdWx0cyB3aXRoIEFOR0xFIGJhY2tlbmQKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDY4NmI3Yzlk
MTc1ZTQyZGFlMjI2ZDc3YjBjZDM5ZGNjYTlhMGYzNjEuLjBiZGVlNTU0YTljN2ZiZDVhZTA4MTAw
MTNkM2M2OWJjMDA5NTExODEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNh
aXJvL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwpAQCAtMTE2MSw3ICsxMTYxLDIwIEBAIGNyeXB0by9zdWJ0bGUvd3Jh
cC1rZXktbWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFNraXAgXQogCiBodHRwL3Rlc3RzL2Fw
cGNhY2hlIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2JsaW5rL3NlbmRiZWFjb24gWyBTa2lwIF0KLWh0
dHAvdGVzdHMvY2FjaGUgWyBTa2lwIF0KKworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0
dHAvdGVzdHMvY2FjaGUvY2FuY2VsLW11bHRpcGxlLXBvc3QteGhycy5odG1sIFsgRmFpbHVyZSBd
CisKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2NoIGJlaGF2aW9yIHNwZWNp
ZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbGFzdC1t
b2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uCito
dHRwL3Rlc3RzL2NhY2hlL2lmcmFtZS0zMDQtY3Jhc2guaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90
ZXN0cy9jYWNoZS9uZXR3b3JrLWVycm9yLWR1cmluZy1yZXZhbGlkYXRpb24uaHRtbCBbIEZhaWx1
cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9wYXJ0aXRpb25lZC1jYWNoZS1pZnJhbWUuaHRtbCBbIEZh
aWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9wYXJ0aXRpb25lZC1jYWNoZS5odG1sIFsgRmFpbHVy
ZSBdCitodHRwL3Rlc3RzL2NhY2hlL3dpbGxzZW5kcmVxdWVzdC1yZXR1cm5zLW51bGwtZm9yLW1l
bW9yeS1jYWNoZS1sb2FkLmh0bWwgWyBGYWlsdXJlIF0KKwogaHR0cC90ZXN0cy9jYWNoZS1zdG9y
YWdlIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250
ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmMTc0NjcxMGIx
YmQwM2M3MGU4MWY3ZGU0ZWIzNzYyNTc5ZDJjMzQ0Li42YmExZTcxZWZiZWFmMGU5NGVhNTNhOTMx
NTdiNTQ3MDIzNTc5MjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTAyLTE4ICBDaHJpc3Rv
cGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1l
bnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5jcHA6CisgICAgICAg
ICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkZWQgRmlsZUFjY2Vzc1Blcm1pc3Npb24g
ZmxhZyB3aGVuIG9wZW5pbmcgZmlsZXMuCisgICAgICAgIFJlbW92ZSBkZWZhdWx0IGFyZ3VtZW50
IGZvciB0aGUgbGlzdERpcmVjdG9yeSBmaWx0ZXIgc2luY2UgdGhlIGRlZmF1dAorICAgICAgICBT
dHJpbmcoKSBmaWx0ZXIgZG9lc24ndCBtYXRjaCBhbGwgZmlsZXMgb24gTWFjIGFuZCBXaW5kb3dz
LgorCisgICAgICAgIEFkZGVkIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHRvIGJlIHVzZWQgd2l0
aCBSZWFkV3JpdGUgTWFwcGVkRmlsZURhdGEuCisgICAgICAgIEFkZGVkIGZhaWxJZkZpbGVFeGlz
dHMgZmxhZyB0byBvcGVuRmlsZSB3aGljaCBjYXVzZXMgb3BlbkZpbGUgdG8gZmFpbCBpZiB0aGUg
ZmlsZSBhbHJlYWR5IGV4aXN0cy4KKworICAgICAgICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAg
QWRkZWQgKFNfSVJVU1IgfCBTX0lXVVNSKSBmaWxlIG9wZW4gbW9kZXMuCisKKyAgICAgICAgKiB3
dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICBJbXBsZW1lbnQgZ2V0Vm9sdW1lRnJl
ZVNwYWNlIHNpbmNlIHNvbWUgb2YgdGhlIHRlc3RzIHVzZSBpdCB3aGVuIHRvZ2dsaW5nIGNhY2hl
LgorICAgICAgICAKKyAgICAgICAgKiB3dGYvd2luL1BhdGhXYWxrZXIuY3BwOgorCiAyMDIwLTAy
LTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgZnJvbSAibGF5ZXIgZmx1c2giIHRlcm1pbm9sb2d5IHRvICJyZW5kZXJpbmcgdXBkYXRlIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9GaWxlU3lzdGVtLmNwcAppbmRleCA3MmY5NTNlYWIzZmM5ODg0MmUxMzI4M2Q1NTcyZDk5NjU5
ZWYxMGVlLi44NDg1MjFlMjcyNjU4Zjg4YWJlZDdlZDlhM2YxZjFmNmJiNzljYjdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmNwcApAQCAtMjg3LDE3ICsyODcsMTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBw
ZWRGaWxlRGF0YSgpCiAgICAgdW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUp
OwogfQogCi0jaWYgSEFWRShNTUFQKQotCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2Vz
cykKK01hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQg
PSBvcGVuRmlsZShmaWxlUGF0aCwgRmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0g
b3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAg
ICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZp
bGVIYW5kbGUoZmQsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAg
ICAgY2xvc2VGaWxlKGZkKTsKIH0KIAotYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRs
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhB
VkUoTU1BUCkKKworYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1h
cE1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTMyNCw3ICszMjQsMjQgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6
ZSwgUFJPVF9SRUFELCBNQVBfRklMRSB8IChtb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQg
PyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBmZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0
aW9uID0gUFJPVF9SRUFEOworICAgIHN3aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVP
cGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVBy
b3RlY3Rpb24gPSBQUk9UX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVu
TW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRCB8IFBS
T1RfV1JJVEU7CisgICAgICAgIGJyZWFrOworI2lmIE9TKERBUldJTikKKyAgICBjYXNlIEZpbGVP
cGVuTW9kZTo6RXZlbnRzT25seToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlv
biwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NI
QVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxF
RCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIx
NmZjYmYyNzdkNDA0NzA1ZDFiZjhmYjg5MjQwNWNjOS4uZTk1NTg2NjdkYjcyYjQ5MDIwODFkZTNk
Yzk2ZjBlNjI2YWExZTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaApAQCAtNzksMTEgKzc5LDE3IEBAIGNv
bnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlID0gLTE7CiBl
bnVtIGNsYXNzIEZpbGVPcGVuTW9kZSB7CiAgICAgUmVhZCwKICAgICBXcml0ZSwKKyAgICBSZWFk
V3JpdGUsCiAjaWYgT1MoREFSV0lOKQogICAgIEV2ZW50c09ubHksCiAjZW5kaWYKIH07CiAKK2Vu
dW0gY2xhc3MgRmlsZUFjY2Vzc1Blcm1pc3Npb24gOiBib29sIHsKKyAgICBVc2VyLAorICAgIEFs
bAorfTsKKwogZW51bSBjbGFzcyBGaWxlU2Vla09yaWdpbiB7CiAgICAgQmVnaW5uaW5nLAogICAg
IEN1cnJlbnQsCkBAIC0xMzEsNyArMTM3LDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
TWV0YWRhdGFVUkwoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHVybFN0cmkKIGJv
b2wgY2FuRXhjbHVkZUZyb21CYWNrdXAoKTsgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBmaWxlIGNh
biBldmVyIGJlIGV4Y2x1ZGVkIGZyb20gYmFja3VwLgogYm9vbCBleGNsdWRlRnJvbUJhY2t1cChj
b25zdCBTdHJpbmcmKTsgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCiAKLVdURl9FWFBP
UlRfUFJJVkFURSBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIgPSBTdHJpbmcoKSk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
VmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgZmlsdGVyKTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYpOwogU3RyaW5nIHN0cmluZ0Zyb21GaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oY29uc3QgY2hhciopOwpAQCAtMTQwLDcgKzE0Niw3IEBAIGlubGluZSBi
b29sIGlzSGFuZGxlVmFsaWQoY29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpIHsgcmV0
dXJuIGhhbmRsZSAhPSBpCiAKIC8vIFByZWZpeCBpcyB3aGF0IHRoZSBmaWxlbmFtZSBzaG91bGQg
YmUgcHJlZml4ZWQgd2l0aCwgbm90IHRoZSBmdWxsIHBhdGguCiBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZp
bGVIYW5kbGUmKTsKLVdURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUpOworV1RGX0VYUE9SVF9QUklWQVRF
IFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVu
TW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gPSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsLCBi
b29sIGZhaWxJZkZpbGVFeGlzdHMgPSBmYWxzZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBj
bG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcg
b2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNjZXNzZnVsLCAtMSBv
dGhlcndpc2UuCiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwpAQCAtMjA2LDYg
KzIxMiw3IEBAIHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmKTsK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxl
UGF0aCwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlLCBi
b29sJiBzdWNjZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxh
dGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNj
ZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFw
cGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApAQCAtMjE2LDE1ICsy
MjMsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZp
bGVNb2RlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFuZGxlKFBsYXRm
b3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7CiAKICAgICB2b2lk
KiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmlsZVNpemUgeyAwIH07
CiB9OwogCi1pbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCitpbmxp
bmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgc3VjY2Vz
cyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1vZGUpOwor
fQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9k
ZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUs
IG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgb3Blbk1vZGUsIG1h
cE1vZGUpOwogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBl
ZEZpbGVEYXRhJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVT
eXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmlu
ZGV4IDg2YzA0ZjlkNWUxMzQwZDliNGY5N2YwZDdmNzkwMGUyOGIzMzE3ZDIuLmU0YWIwMGZiZGFk
OWZmYjcxYjUwMjJjY2VjNDFjMTBiNWNhMGY1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5
c3RlbUdsaWIuY3BwCkBAIC0zMzgsNyArMzM4LDcgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxl
KGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh0ZW1wUGF0aC5nZXQoKSk7CiB9CiAKLVBsYXRmb3JtRmls
ZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQor
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgZmFpbElmRmls
ZUV4aXN0cykKIHsKICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwogICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCkBAIC0zNDYs
MTMgKzM0NiwyMCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKIAogICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9w
dEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChmaWxlbmFtZS5kYXRhKCkpKTsKICAgICBHUmVmUHRy
PEdGaWxlSU9TdHJlYW0+IGlvU3RyZWFtOworICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lv
bkZsYWcgPSAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklM
RV9DUkVBVEVfTk9ORSA6IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKworICAgIGlmIChmYWlsSWZG
aWxlRXhpc3RzKSB7CisgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVf
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBudWxscHRyKSk7
CisgICAgICAgIHJldHVybiBpb1N0cmVhbS5sZWFrUmVmKCk7CisgICAgfQorCiAgICAgaWYgKG1v
ZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkKQogICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihn
X2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAg
IGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgeworICAgIGVsc2UgaWYgKG1v
ZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSB8fCBtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZFdy
aXRlKSB7CiAgICAgICAgIGlmIChnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIHN0YXRpY19j
YXN0PEdGaWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxB
UikpKQogICAgICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29wZW5fcmVhZHdy
aXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5n
ZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgICAg
ICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgp
LCBwZXJtaXNzaW9uRmxhZywgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgIH0KIAogICAgIHJldHVy
biBpb1N0cmVhbS5sZWFrUmVmKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcAppbmRleCAyNzgzOTg4M2ExYTJkNjU0MTMwZmQ2ODVmZWFmYTAyYTljNDg2NGZjLi5jOWY1
MDE0MzZhYmNjODA5NGU4NDE0ODBkMjFmZTM2YTQ3MWU4MWZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRmb3Jt
RmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2Rl
KQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgZmFpbElm
RmlsZUV4aXN0cykKIHsKICAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOwogCkBAIC04NywxNiArODcsMzMgQEAgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiAgICAgICAgIHJldHVy
biBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwogCiAgICAgaW50IHBsYXRmb3JtRmxhZyA9IDA7
Ci0gICAgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkKQorICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0g
T19SRE9OTFk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CiAgICAgICAgIHBsYXRm
b3JtRmxhZyB8PSAoT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBsYXRmb3JtRmxh
ZyB8PSAoT19SRFdSIHwgT19DUkVBVCk7CisgICAgICAgIGJyZWFrOwogI2lmIE9TKERBUldJTikK
LSAgICBlbHNlIGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seSkKKyAgICBjYXNl
IEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seToKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fRVZU
T05MWTsKKyAgICAgICAgYnJlYWs7CiAjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoZmFpbElmRmls
ZUV4aXN0cykKKyAgICAgICAgcGxhdGZvcm1GbGFnIHw9IChPX0NSRUFUIHwgT19FWENMKTsKKwor
ICAgIGludCBwZXJtaXNzaW9uRmxhZyA9IDA7CisgICAgaWYgKHBlcm1pc3Npb24gPT0gRmlsZUFj
Y2Vzc1Blcm1pc3Npb246OlVzZXIpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNS
IHwgU19JV1VTUik7CisgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlz
c2lvbjo6QWxsKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAoU19JUlVTUiB8IFNfSVdVU1Ig
fCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RIKTsKIAotICAgIHJldHVybiBv
cGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCAwNjY2KTsKKyAgICByZXR1cm4gb3Blbihm
c1JlcC5kYXRhKCksIHBsYXRmb3JtRmxhZywgcGVybWlzc2lvbkZsYWcpOwogfQogCiB2b2lkIGNs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAppbmRleCA5MzM0YWMwMjlkNTdjMzM2NWY0NTYyODZkZDM4YWFiZjBkNGZhNWY0
Li43YjJhMWY4Y2Y5ZDA4NTViYTYxMGIyYTVkYjVjZDZkN2RlNjIxNGZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC00MjEsNyArNDIxLDcgQEAgU3RyaW5nIG9wZW5UZW1w
b3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAg
IHJldHVybiBwcm9wb3NlZFBhdGg7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxl
IG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nl
c3NQZXJtaXNzaW9uLCBib29sIGZhaWxJZkZpbGVFeGlzdHMpCiB7CiAgICAgRFdPUkQgZGVzaXJl
ZEFjY2VzcyA9IDA7CiAgICAgRFdPUkQgY3JlYXRpb25EaXNwb3NpdGlvbiA9IDA7CkBAIC00MzYs
MTAgKzQzNiwxNSBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNf
V1JJVEU7CiAgICAgICAgIGNyZWF0aW9uRGlzcG9zaXRpb24gPSBDUkVBVEVfQUxXQVlTOwogICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBkZXNpcmVkQWNjZXNz
ID0gR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURTsKKyAgICAgICAgY3JlYXRpb25EaXNwb3Np
dGlvbiA9IE9QRU5fQUxXQVlTOworICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBpZiAoZmFp
bElmRmlsZUV4aXN0cykKKyAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9ORVc7
CisKICAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBwYXRoOwogICAgIHJldHVybiBDcmVhdGVGaWxl
KGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBkZXNpcmVkQWNjZXNzLCBzaGFy
ZU1vZGUsIDAsIGNyZWF0aW9uRGlzcG9zaXRpb24sIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgMCk7
CiB9CkBAIC01NDksOSArNTU0LDE0IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsdGVyKQogICAgIHJldHVybiBl
bnRyaWVzOwogfQogCi1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmLCB1aW50
NjRfdCYpCitib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2
NF90JiBmcmVlU3BhY2UpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFVMQVJHRV9JTlRFR0VS
IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4
VyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxs
ZXIsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVl
U3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJp
bmcmIGZzRmlsZSkKQEAgLTYwMywxNSArNjEzLDcgQEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9p
ZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwog
fQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUg
PSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JF
QUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVs
bHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBj
bG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUo
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZp
bGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVu
TW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlk
KGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyNSwxMSArNjI3LDI4IEBAIGJv
b2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1
dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFE
T05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdPUkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JF
QURPTkxZOworICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3
aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAg
cGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgICAgICBkZXNpcmVkQWNjZXNzID0g
RklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6Oldy
aXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBk
ZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9S
RUFEV1JJVEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURSB8IEZJTEVf
TUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9IENy
ZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAsIG51
bGxwdHIpOwogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwgMCwg
c2l6ZSk7CisgICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFj
Y2VzcywgMCwgMCwgc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYgKCFt
X2ZpbGVEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi93aW4vUGF0aFdhbGtlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5j
cHAKaW5kZXggOGQ3ZDdhYzY4Mzg1OWVlM2U0ZDFkMDRjM2VlMDZhMjlmMGJjNzNlYS4uNjg4ZmVk
ZDU5ZmE4ZDVkZDM1OWQ0YzA5YTk2ZmU0ODZkNTMzYjNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fs
a2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6
UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJu
KQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0b3J5ICsgIlxcIiArIHBhdHRlcm47CisgICAg
U3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9yeSwgJ1xcJywgcGF0dGVybik7CiAgICAg
bV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCks
ICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYxNzJhY2RkMzQ2MjVmN2NmOTRhMThjZjE1ZTI1
ZDMxOGQ3MTlmZDIuLjY1M2FiYmZmYmE5MTZlMTk0NDU0OTBkOGYwNzdjY2MyMWFiZWUyYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDItMTggIENocmlzdG9waGVyIFJlaWQgIDxj
aHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBOZXR3b3JrQ2Fj
aGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTk0NjczOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVr
aS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAg
ICAgRW5zdXJlIHRoYXQgdGhlIENhY2hlU3RvcmFnZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkgYmVp
bmcgY3JlYXRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29j
b2EubW06CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNv
dXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVT
eXN0ZW0uY3BwOgorICAgICAgICBVc2UgbW9yZSBGaWxlU3lzdGVtIGZ1bmN0aW9uYWxpdHkgdG8g
c2hhcmUgY29kZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwOgorICAgICAgICBVc2UgT3B0aW9uYWw8VmVj
dG9yPiBmb3IgbV9idWZmZXIgc2luY2Ugd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGlzRW1wdHkg
YW5kIGlzTnVsbC4KKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5vbG9neSB0
byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTFkZjNiODBhMzZhNjczMWNiNmY4ZDNkYjM5OTQ4MmY4
Y2IwMTViNS4uZTQ0MjM0YzVlNjc4NmFkYmYxNjNmZDRkYzRhOTE2ZGE2YjNiYmZmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQ1
NCw4ICs0NTQsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW4KICAgICBhdXRvIGlzTmV3RW50
cnkgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVm
YXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0gewogICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVS
b290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9KS5p
c05ld0VudHJ5OwotICAgIGlmIChpc05ld0VudHJ5KQorICAgIGlmIChpc05ld0VudHJ5KSB7CiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQYXRo
SGFuZGxlKTsKKyAgICAgICAgaWYgKCFjYWNoZVJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3Jr
UHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgY2FjaGVSb290UGF0aCkpOworICAgIH0KIH0KIAog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVhYTkwNWFiNjhhYzll
YWYxZDExOWIwMTc4NGZhNjE2MGEyOGVmYy4uNTNjZTQ5Y2YzN2U4MWYxYjU0Y2MyZGI3NTllMjhh
MGI5MmRjYzgxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRl
IDxmY250bC5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5o
PgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiAhT1MoV0lORE9XUykKICNpbmNs
dWRlIDxzeXMvbW1hbi5oPgpAQCAtMzksMjYgKzM4LDI0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCiBEYXRhIERhdGE6
Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7Ci0gICAgaW50IGZkID0gb3Bl
bihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBPX0NS
RUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgIGlmIChmZCA8
IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoZnRydW5jYXRlKGZkLCBtX3NpemUp
IDwgMCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgY29uc3RleHByIGJvb2wgZmFpbElmRmls
ZUV4aXN0cyA9IHRydWU7CisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShw
YXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6Rmls
ZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlzdHMpOworICAgIGlmICghRmls
ZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChoYW5kbGUpIHx8ICFGaWxlU3lzdGVtOjp0cnVuY2F0ZUZp
bGUoaGFuZGxlLCBtX3NpemUpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5k
bGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBGaWxlU3lzdGVtOjpt
YWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKTsKLQotICAgIHZvaWQqIG1hcCA9IG1t
YXAobnVsbHB0ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBm
ZCwgMCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsK
KyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVk
RmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlLCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCisgICAgdm9pZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFwcGVk
RmlsZS5kYXRhKCkpOwogICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obWFwKTsKICAgICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXpl
X3QgYnl0ZXNTaXplKSB7CiAgICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXpl
KTsKQEAgLTY2LDUyICs2MywyMyBAQCBEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCisjaWYgT1MoV0lO
RE9XUykKKyAgICBEV09SRCBvbGRQcm90ZWN0aW9uOworICAgIFZpcnR1YWxQcm90ZWN0KG1hcCwg
bV9zaXplLCBGSUxFX01BUF9SRUFELCAmb2xkUHJvdGVjdGlvbik7CisgICAgRmx1c2hWaWV3T2ZG
aWxlKG1hcCwgbV9zaXplKTsKKyNlbHNlCiAgICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lv
bi4KICAgICBtcHJvdGVjdChtYXAsIG1fc2l6ZSwgUFJPVF9SRUFEKTsKIAogICAgIC8vIEZsdXNo
IChhc3luY2hyb25vdXNseSkgdG8gZmlsZSwgdHVybmluZyB0aGlzIGludG8gY2xlYW4gbWVtb3J5
LgogICAgIG1zeW5jKG1hcCwgbV9zaXplLCBNU19BU1lOQyk7Ci0KLSAgICByZXR1cm4gRGF0YTo6
YWRvcHRNYXAobWFwLCBtX3NpemUsIGZkKTsKLX0KLSNlbHNlCi1EYXRhIERhdGE6Om1hcFRvRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0Ci17Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3Rl
bTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAg
aWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQotICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmIChGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihkYXRhKCkpLCBzaXplKCkpIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gRGF0YShWZWN0b3I8dWludDhfdD4obV9idWZmZXIpKTsKLX0KICNlbmRpZgog
Ci0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKLXsKLSAg
ICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAgICBpZiAoZmQgPCAwKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0KGZk
LCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7Ci0gICAgaWYgKCFzaXplKSB7
Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgMCwgc2l6ZSk7CisgICAgcmV0dXJu
IERhdGE6OmFkb3B0TWFwKFdURk1vdmUobWFwcGVkRmlsZSksIGhhbmRsZSk7CiB9Ci0jZW5kaWYK
IAotRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK0RhdGEgbWFwRmlsZShjb25zdCBj
aGFyKiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIHJldHVybiBtYXBGaWxlKEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotI2Vsc2UKICAg
ICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxl
T3Blbk1vZGU6OlJlYWQpOwogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxl
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExOSwzMSArODcsMjggQEAgRGF0YSBtYXBGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGZp
bGUsIHNpemUpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBhZG9wdEFuZE1hcEZp
bGUoZmlsZSwgMCwgc2l6ZSk7Ci0jZW5kaWYKIH0KIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBh
ZG9wdEFuZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK0RhdGEg
bWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1hcEZpbGUoRmlsZVN5
c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Cit9CisKK0RhdGEg
YWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIHNp
emVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQogewogICAgIGlmICghc2l6ZSkgewotICAgICAgICBj
bG9zZShmZCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAg
ICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKICAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51
bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwotICAgIGlm
IChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNj
ZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBG
aWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2Rl
OjpQcml2YXRlLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmlsZVN5
c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0g
ICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworICAgIHJldHVybiBEYXRh
OjphZG9wdE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2Vsc2UKLURhdGEg
YWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gRGF0YShmaWxlLCBvZmZzZXQs
IHNpemUpOwotfQotI2VuZGlmCiAKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRh
JiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQogewpAQCAtMTc5LDQwICsxNDQsMjUgQEAgc3RhdGlj
IFNhbHQgbWFrZVNhbHQoKQogCiBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBT
dHJpbmcmIHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgYXV0byBjcGF0aCA9IEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBhdXRvIGZkID0gb3Bl
bihjcGF0aC5kYXRhKCksIE9fUkRPTkxZLCAwKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBi
eXRlc1JlYWQgPSByZWFkKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGNsb3Nl
KGZkKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6
ZSgpKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKLQotICAgICAgICB1bmxpbmsoY3Bh
dGguZGF0YSgpKTsKLSAgICAgICAgZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19XUk9OTFkgfCBP
X0NSRUFUIHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgICAgICBib29sIHN1Y2Nl
c3MgPSB3cml0ZShmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKSA9PSBzdGF0aWNfY2FzdDxz
c2l6ZV90PihzYWx0LnNpemUoKSk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhbHQ7
Ci0jZWxzZQotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0
ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOwotICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShmaWxlKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQuc2l6ZSgpKSB7Ci0gICAgICAg
IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGlmIChmaWxlRXhpc3RzKHBhdGgpKSB7CisgICAgICAg
IGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCk7CisgICAgICAgIFNhbHQgc2FsdDsKKyAgICAgICAgYXV0byBieXRlc1Jl
YWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShmaWxlKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSBzYWx0LnNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzYWx0OwogCiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUocGF0
aCk7Ci0gICAgICAgIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVt
OjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5c3Rl
bTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkp
LCBzYWx0LnNpemUoKSkgPT0gc2FsdC5zaXplKCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShmaWxlKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGF1dG8gZmlsZSA9
IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3Jp
dGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBib29sIHN1
Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNo
YXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKKyAgICBGaWxl
U3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1
cm4geyB9OworCiAgICAgcmV0dXJuIHNhbHQ7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
TmV0d29ya0NhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5oCmluZGV4IGQ3OGQ5OGI2MTc1MGQ3OTE3YmM5ODA1M2JkOWU3
YzljYWRhYjg3NDIuLjM3YjU5NjY1NmE1ZDEzNTJkNzJjOTM2ZWUxOTMxZmQ5MGYyNjE5ZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNv
dXAuaD4KICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFNoYXJlZE1lbW9yeTsKQEAgLTUzLDE5ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgfkRhdGEo
KSB7IH0KIAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAg
c3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGludCBmZCk7Ci0jZW5kaWYK
KyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmLCBG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBEYXRhKE9TT2JqZWN0
UHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5k
aWYKICNpZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50IGZk
ID0gLTEpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBEYXRhKFZlY3Rvcjx1aW50
OF90PiYmKTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgRmlsZVN5
c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBEYXRhKFZhcmlhbnQ8VmVjdG9yPHVp
bnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJik7CiAjZW5kaWYKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3Np
emU7IH0KQEAgLTk0LDEwICs5NiwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVAp
CiAgICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVyOwotICAgIGludCBtX2Zp
bGVEZXNjcmlwdG9yIHsgLTEgfTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
bV9maWxlRGVzY3JpcHRvciB7IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUg
fTsKICNlbmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVy
OworI2lmIFVTRShDVVJMKQorICAgIEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGE+PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUgY29u
c3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07
CkBAIC0xMDYsMTcgKzEwOCw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3Qg
RGF0YSYsIGNvbnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiwgY29uc3Qg
RGF0YSYpOwotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50LCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgot
I2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0Zp
bGVJT1N0cmVhbSosIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiAhT1MoV0lO
RE9XUykKIERhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNlbmRpZgogRGF0YSBtYXBG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDg+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4NzAwODc5NDQzZDY2OWYz
YjI5YTAzYjI4ZWFhZjY1MjJiLi5jYjRhYzM4YzZhNTI4MjQ1ZDE1MWRiYWY3MTVhNWFhOTU1ZjI5
ZjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDEzIEBAIERhdGEgY29u
Y2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9w
dE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBi
LmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxl
IGZkKQogeworICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCog
bWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNT
RVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGZkKTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNo
X2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRD
SF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAgICBtdW5t
YXAobWFwLCBzaXplKTsKICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNmNDMx
NTZjNWEwM2ZjMzFmNTg2NWU3MzE2MjRjODgxZjU4MGFiMTguLjE5MjQ4MmJmOWY0MzRkYzE5OWQz
N2FkNDExODI5NGFlMTlkYzY2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCkBAIC0zMCw0MCAr
MzAsNDIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAog
RGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fYnVm
ZmVyKEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGE+Pjo6Y3JlYXRlKFZlY3Rvcjx1aW50OF90PihzaXplKSkpCisgICAgLCBtX3NpemUoc2l6ZSkK
IHsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBt
ZW1jcHkobV9idWZmZXIuZGF0YSgpLCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkoV1RGOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PigqbV9idWZmZXIpLmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAKLURh
dGE6OkRhdGEoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBzaXplKQorRGF0YTo6RGF0YShWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+JiYgZGF0YSkKKyAgICA6IG1fYnVmZmVyKEJveDxWYXJp
YW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3JlYXRl
KFdURk1vdmUoZGF0YSkpKQorICAgICwgbV9pc01hcChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPigqbV9idWZmZXIpKQogewotICAgIG1fYnVmZmVyLnJl
c2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxl
KGZpbGUsIG9mZnNldCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7Ci0g
ICAgRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1fYnVmZmVyLmRhdGEoKSksIHNpemUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxl
KTsKLX0KLQotRGF0YTo6RGF0YShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCi0gICAgOiBtX2J1
ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCi17Ci0gICAgbV9zaXplID0gbV9idWZmZXIuc2l6ZSgpOwor
ICAgIG1fc2l6ZSA9IFdURjo6c3dpdGNoT24oKm1fYnVmZmVyLAorICAgICAgICBbXShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikgLT4gc2l6ZV90IHsgcmV0dXJuIGJ1ZmZlci5zaXplKCk7
IH0sCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBwZWRG
aWxlKSAtPiBzaXplX3QgeyByZXR1cm4gbWFwcGVkRmlsZS5zaXplKCk7IH0KKyAgICApOwogfQog
CiBEYXRhIERhdGE6OmVtcHR5KCkKIHsKLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rvcjx1aW50
OF90PiBidWZmZXI7CisgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpIH07CiB9CiAKIGNvbnN0
IHVpbnQ4X3QqIERhdGE6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5kYXRh
KCk7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBidWZmZXIuZGF0YSgp
OyB9LAorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFwcGVk
RmlsZSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsgfQorICAgICk7CiB9CiAKIGJvb2wgRGF0YTo6aXNOdWxs
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOworICAgIHJldHVybiAh
bV9idWZmZXI7CiB9CiAKIGJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChjb25z
dCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CkBAIC03MSwyMSArNzMsMzcgQEAg
Ym9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYgYXBwbGllcikgY29uc3QKICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtX2J1ZmZlci5kYXRhKCkpLCBtX2J1ZmZlci5zaXplKCkpOworICAgIHJldHVybiBhcHBs
aWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSk7CiB9
CiAKIERhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHsgbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CisgICAg
aWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IGRhdGEo
KSArIG9mZnNldCwgc2l6ZSB9OwogfQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEs
IGNvbnN0IERhdGEmIGIpCiB7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBi
OworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rvcjx1
aW50OF90PiBidWZmZXIoYS5zaXplKCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5k
YXRhKCksIGEuZGF0YSgpLCBhLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBh
LnNpemUoKSwgYi5kYXRhKCksIGIuc2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3ZlKGJ1
ZmZlcikpOwogfQogCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQorewor
ICAgIEFTU0VSVChtYXBwZWRGaWxlLmRhdGEoKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGZkKTsKKworICAgIHJldHVybiB7IFdURk1vdmUobWFwcGVkRmlsZSkgfTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKaW5kZXggNTE1YzA5ZWJiZmQzMzU0ZmQ5NTMzY2VlMWJkODkwMTczYmFhMWM3Yy4u
ZDNiNzllMDE0YTc5YTc0NmZjNmY1MTc0M2ZiY2I4YjJhNGMwMTc0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKQEAgLTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25l
d193aXRoX293bmVyKGNvcGllZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9
CiAKLURhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQorRGF0
YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2ZpbGVEZXNj
cmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKLSAg
ICAsIG1faXNNYXAobV9zaXplICYmIGZkICE9IC0xKQorICAgICwgbV9pc01hcChtX3NpemUgJiYg
RmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEy
IEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewogICAgICAg
ICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAg
ICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgIH0KIAogICAg
IHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQgZmlsZURlc2NyaXB0b3I7Cisg
ICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIAog
c3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTIx
LDggKzEyMSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdy
YXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9p
ZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOworICAg
IHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIEFTU0VSVChtYXApOwog
ICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CiAgICAgTWFwV3JhcHBlciogd3JhcHBlciA9
IG5ldyBNYXBXcmFwcGVyIHsgbWFwLCBzaXplLCBmZCB9OwpAQCAtMTMwLDIxICsxMzIsMTQgQEAg
RGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAg
cmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0jaWYgVVNFKEdMSUIpICYmICFQ
TEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiBzdHJlYW0s
IHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJbnB1dFN0cmVhbSogaW5wdXRT
dHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKHN0cmVhbSkp
OwotICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVT
Q1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUo
ZmQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0
YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwg
IWlzTWFwKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFNoYXJlZE1l
bW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVy
LT5sZW5ndGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fZmlsZURlc2Ny
aXB0b3IpKTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19G
SUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAgICByZXR1cm4gU2hhcmVkTWVt
b3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXIt
Pmxlbmd0aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzMDM4MDMwNWRjZjQ3M2E2NzI2ZDEyYjkz
OWQ5YjAuLjdhMGVjNWUxNGYzM2RlMDQyY2RmNDRiMGZiYTQyM2NjOWRkN2FmYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVGaWxlU3lzdGVtLmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMg
RGlyZWN0b3J5RW50cnlUeXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewot
ICAgIHN3aXRjaCAoZHR5cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERp
cmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICBy
ZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpG
aWxlOwotICAgIH0KLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2Vu
ZGlmCi0KIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBG
dW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rp
b24pCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0
ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGly
KQotICAgICAgICByZXR1cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVh
ZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRf
dHlwZSAhPSBEVF9SRUcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hh
ciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwg
IXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRv
IG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0
cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihu
YW1lU3RyaW5nLCBkaXJlY3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBj
bG9zZWRpcihkaXIpOwotI2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0
RGlyZWN0b3J5KHBhdGgpOworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJl
Y3RvcnkocGF0aCwgIioiX3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAg
ICAgICAgIGF1dG8gdHlwZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmls
ZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlU
eXBlOjpEaXJlY3RvcnkgOiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0
aW9uKGVudHJ5LCB0eXBlKTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZp
bGVOYW1lKGVudHJ5KSwgdHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGly
ZWN0b3J5UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMzYzlhMGNiZTdlMWVlYjFkYjA3NzNh
MjMyN2JmNTUxNWIwMGQ5MTQuLmM2NGVlOTY1YTVmOTc4NjEyOGE3OTc5NzlmMDc4MDEwZjExNmI3
NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAyMC0wMi0yMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRA
c29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBi
eSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAg
ICAgIEFkZCB0ZXN0IGZvciBGaWxlU3lzdGVtOjpjcmVhdGVGaWxlCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKwogMjAyMC0wMi0xOCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxh
eWVyIGZsdXNoIiB0ZXJtaW5vbG9neSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKaW5kZXggZDBlNTE1MWE5OTkyOWE4
MzcyNzM0OTM3NTNhNTgwZWJmMzJkMzhmNy4uNzZjYWYyYWQ0MzcyNjYzZDJiZTMxMWJjZmI2M2Ew
NGQwYzBkMDFmNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmls
ZVN5c3RlbS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3Rl
bS5jcHAKQEAgLTE0NSw0ICsxNDUsMTAgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBVbmljb2Rl
RGlyZWN0b3J5TmFtZSkKICAgICBFWFBFQ1RfVFJVRShleHBlY3RlZERpcmVjdG9yeU5hbWUgPT0g
ZGlyZWN0b3J5TmFtZSk7CiB9CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgb3BlbkV4aXN0aW5n
RmlsZUFuZEZhaWxJZkZpbGVFeGlzdHMpCit7CisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVt
OjpvcGVuRmlsZSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwsIHRydWUpOworICAg
IEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGhhbmRsZSkpOworfQorCiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391757</attachid>
            <date>2020-02-26 10:57:59 -0800</date>
            <delta_ts>2020-02-26 13:05:10 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-197684-20200226105758.patch</filename>
            <type>text/plain</type>
            <size>38309</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODM2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTFhNjM1ZDQ1Yjk4N2M3ZWVmN2I3
MTNjM2UxNjQ0OGQ4MjQ4MGY4MC4uMzlhODY2NWY2MDAwODU3YmIzNzZiZmIxOTVjNjg5OTEwNTZk
NDRmMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlk
ICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29y
a0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoK
KwogMjAyMC0wMi0xNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAg
W1dlYkdMXSBVcGRhdGUgV2ViR0wyIHJlc3VsdHMgd2l0aCBBTkdMRSBiYWNrZW5kCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA2ODZiN2M5
ZDE3NWU0MmRhZTIyNmQ3N2IwY2QzOWRjY2E5YTBmMzYxLi4wYmRlZTU1NGE5YzdmYmQ1YWUwODEw
MDEzZDNjNjliYzAwOTUxMTgxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5j
YWlyby9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJv
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTExNjEsNyArMTE2MSwyMCBAQCBjcnlwdG8vc3VidGxlL3dy
YXAta2V5LW1hbGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBTa2lwIF0KIAogaHR0cC90ZXN0cy9h
cHBjYWNoZSBbIFNraXAgXQogaHR0cC90ZXN0cy9ibGluay9zZW5kYmVhY29uIFsgU2tpcCBdCi1o
dHRwL3Rlc3RzL2NhY2hlIFsgU2tpcCBdCisKKyMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uCito
dHRwL3Rlc3RzL2NhY2hlL2NhbmNlbC1tdWx0aXBsZS1wb3N0LXhocnMuaHRtbCBbIEZhaWx1cmUg
XQorCisjIGZhaWxzIGJlY2F1c2Ugb2YgY29udmVyc2lvbiB0byBlcG9jaCBiZWhhdmlvciBzcGVj
aWZpYyB0byBNYWMKK2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLWxhc3Qt
bW9kaWZpZWQuaHRtbCBbIEZhaWx1cmUgXQorCisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgor
aHR0cC90ZXN0cy9jYWNoZS9pZnJhbWUtMzA0LWNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KK2h0dHAv
dGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJpbmctcmV2YWxpZGF0aW9uLmh0bWwgWyBGYWls
dXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUtaWZyYW1lLmh0bWwgWyBG
YWlsdXJlIF0KK2h0dHAvdGVzdHMvY2FjaGUvcGFydGl0aW9uZWQtY2FjaGUuaHRtbCBbIEZhaWx1
cmUgXQoraHR0cC90ZXN0cy9jYWNoZS93aWxsc2VuZHJlcXVlc3QtcmV0dXJucy1udWxsLWZvci1t
ZW1vcnktY2FjaGUtbG9hZC5odG1sIFsgRmFpbHVyZSBdCisKIGh0dHAvdGVzdHMvY2FjaGUtc3Rv
cmFnZSBbIFNraXAgXQogaHR0cC90ZXN0cy9jYW52YXMgWyBTa2lwIF0KIGh0dHAvdGVzdHMvY29u
dGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3ggWyBTa2lwIF0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZjE3NDY3MTBi
MWJkMDNjNzBlODFmN2RlNGViMzc2MjU3OWQyYzM0NC4uNzVjOTE2MzFjMzk5OTgwNGQ4YTU0ZTA3
MDYyMDdkNjNlMTAzNjFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMC0wMi0xOCAgQ2hyaXN0
b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVt
ZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKiB3dGYvRmlsZVN5c3RlbS5oOgorICAgICAgICBBZGRlZCBGaWxlQWNjZXNzUGVybWlzc2lv
biBmbGFnIHdoZW4gb3BlbmluZyBmaWxlcy4KKyAgICAgICAgUmVtb3ZlIGRlZmF1bHQgYXJndW1l
bnQgZm9yIHRoZSBsaXN0RGlyZWN0b3J5IGZpbHRlciBzaW5jZSB0aGUgZGVmYXV0CisgICAgICAg
IFN0cmluZygpIGZpbHRlciBkb2Vzbid0IG1hdGNoIGFsbCBmaWxlcyBvbiBNYWMgYW5kIFdpbmRv
d3MuCisKKyAgICAgICAgQWRkZWQgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUgdG8gYmUgdXNlZCB3
aXRoIFJlYWRXcml0ZSBNYXBwZWRGaWxlRGF0YS4KKyAgICAgICAgQWRkZWQgZmFpbElmRmlsZUV4
aXN0cyBmbGFnIHRvIG9wZW5GaWxlLgorCisgICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUds
aWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAg
ICBBZGRlZCAoU19JUlVTUiB8IFNfSVdVU1IpIGZpbGUgb3BlbiBtb2Rlcy4KKworICAgICAgICAq
IHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIEltcGxlbWVudCBnZXRWb2x1bWVG
cmVlU3BhY2Ugc2luY2Ugc29tZSBvZiB0aGUgdGVzdHMgdXNlIGl0IHdoZW4gdG9nZ2xpbmcgY2Fj
aGUuCisgICAgICAgIAorICAgICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisKIDIwMjAt
MDItMTggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
TW92ZSBmcm9tICJsYXllciBmbHVzaCIgdGVybWlub2xvZ3kgdG8gInJlbmRlcmluZyB1cGRhdGUi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcyZjk1M2VhYjNmYzk4ODQyZTEzMjgzZDU1NzJkOTk2
NTllZjEwZWUuLjg0ODUyMWUyNzI2NThmODhhYmVkN2VkOWEzZjFmMWY2YmI3OWNiN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uY3BwCkBAIC0yODcsMTcgKzI4NywxNyBAQCBNYXBwZWRGaWxlRGF0YTo6fk1h
cHBlZEZpbGVEYXRhKCkKICAgICB1bm1hcFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6
ZSk7CiB9CiAKLSNpZiBIQVZFKE1NQVApCi0KLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0
YShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNj
ZXNzKQorTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCiB7Ci0gICAgYXV0byBm
ZCA9IG9wZW5GaWxlKGZpbGVQYXRoLCBGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgIGF1dG8gZmQg
PSBvcGVuRmlsZShmaWxlUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKIAot
ICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBtb2RlKTsKKyAgICBzdWNjZXNzID0gbWFw
RmlsZUhhbmRsZShmZCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBtYXBNb2RlKTsK
ICAgICBjbG9zZUZpbGUoZmQpOwogfQogCi1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFu
ZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUpCisjaWYg
SEFWRShNTUFQKQorCitib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUg
bWFwTW9kZSkKIHsKICAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMzI0LDcgKzMyNCwyNCBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBG
aWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBz
aXplLCBQUk9UX1JFQUQsIE1BUF9GSUxFIHwgKG1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJl
ZCA/IE1BUF9TSEFSRUQgOiBNQVBfUFJJVkFURSksIGZkLCAwKTsKKyAgICBpbnQgcGFnZVByb3Rl
Y3Rpb24gPSBQUk9UX1JFQUQ7CisgICAgc3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmls
ZU9wZW5Nb2RlOjpSZWFkOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgorICAgICAgICBwYWdl
UHJvdGVjdGlvbiA9IFBST1RfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9w
ZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEIHwg
UFJPVF9XUklURTsKKyAgICAgICAgYnJlYWs7CisjaWYgT1MoREFSV0lOKQorICAgIGNhc2UgRmls
ZU9wZW5Nb2RlOjpFdmVudHNPbmx5OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNl
bmRpZgorICAgIH0KKworICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIHNpemUsIHBhZ2VQcm90ZWN0
aW9uLCBNQVBfRklMRSB8IChtYXBNb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBf
U0hBUkVEIDogTUFQX1BSSVZBVEUpLCBmZCwgMCk7CiAKICAgICBpZiAoZGF0YSA9PSBNQVBfRkFJ
TEVEKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA4MDVhMGU0
YjE2ZmNiZjI3N2Q0MDQ3MDVkMWJmOGZiODkyNDA1Y2M5Li5lOTU1ODY2N2RiNzJiNDkwMjA4MWRl
M2RjOTZmMGU2MjZhYTFlNzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVt
LmgKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCkBAIC03OSwxMSArNzksMTcgQEAg
Y29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSAtMTsK
IGVudW0gY2xhc3MgRmlsZU9wZW5Nb2RlIHsKICAgICBSZWFkLAogICAgIFdyaXRlLAorICAgIFJl
YWRXcml0ZSwKICNpZiBPUyhEQVJXSU4pCiAgICAgRXZlbnRzT25seSwKICNlbmRpZgogfTsKIAor
ZW51bSBjbGFzcyBGaWxlQWNjZXNzUGVybWlzc2lvbiA6IGJvb2wgeworICAgIFVzZXIsCisgICAg
QWxsCit9OworCiBlbnVtIGNsYXNzIEZpbGVTZWVrT3JpZ2luIHsKICAgICBCZWdpbm5pbmcsCiAg
ICAgQ3VycmVudCwKQEAgLTEzMSw3ICsxMzcsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRNZXRhZGF0YVVSTChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgdXJsU3RyaQog
Ym9vbCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpOyAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGZpbGUg
Y2FuIGV2ZXIgYmUgZXhjbHVkZWQgZnJvbSBiYWNrdXAuCiBib29sIGV4Y2x1ZGVGcm9tQmFja3Vw
KGNvbnN0IFN0cmluZyYpOyAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bC4KIAotV1RGX0VY
UE9SVF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlciA9IFN0cmluZygpKTsKK1dURl9FWFBPUlRfUFJJVkFU
RSBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBmaWx0ZXIpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJik7CiBTdHJpbmcgc3RyaW5nRnJvbUZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKik7CkBAIC0xNDAsNyArMTQ2LDcgQEAgaW5saW5l
IGJvb2wgaXNIYW5kbGVWYWxpZChjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkgeyBy
ZXR1cm4gaGFuZGxlICE9IGkKIAogLy8gUHJlZml4IGlzIHdoYXQgdGhlIGZpbGVuYW1lIHNob3Vs
ZCBiZSBwcmVmaXhlZCB3aXRoLCBub3QgdGhlIGZ1bGwgcGF0aC4KIFdURl9FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3Jt
RmlsZUhhbmRsZSYpOwotV1RGX0VYUE9SVF9QUklWQVRFIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVu
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiA9IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGws
IGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IGZhbHNlKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIC8vIFJldHVybnMgdGhlIHJlc3VsdGlu
ZyBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGlmIHN1Y2Nlc3NmdWwsIC0x
IG90aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJVkFURSBsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbik7CkBAIC0yMDYs
NiArMjEyLDcgQEAgcHVibGljOgogICAgIE1hcHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYp
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZp
bGVQYXRoLCBNYXBwZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSwgTWFwcGVkRmlsZU1vZGUs
IGJvb2wmIHN1Y2Nlc3MpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQ
bGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1
Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+TWFwcGVkRmlsZURhdGEoKTsKICAgICBN
YXBwZWRGaWxlRGF0YSYgb3BlcmF0b3I9KE1hcHBlZEZpbGVEYXRhJiYpOwogCkBAIC0yMTYsMTUg
KzIyMywyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCogbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6
ZXhjaGFuZ2UobV9maWxlRGF0YSwgbnVsbHB0cik7IH0KIAogcHJpdmF0ZToKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgTWFwcGVk
RmlsZU1vZGUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxh
dGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKTsKIAogICAgIHZv
aWQqIG1fZmlsZURhdGEgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9maWxlU2l6ZSB7IDAg
fTsKIH07CiAKLWlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK2lu
bGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhh
bmRsZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNj
ZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUsIEZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7
Cit9CisKK2lubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSBtYXBN
b2RlLCBib29sJiBzdWNjZXNzKQogewotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRs
ZSwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBvcGVuTW9kZSwg
bWFwTW9kZSk7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoTWFw
cGVkRmlsZURhdGEmJiBvdGhlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmls
ZVN5c3RlbUdsaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAK
aW5kZXggODZjMDRmOWQ1ZTEzNDBkOWI0Zjk3ZjBkN2Y3OTAwZTI4YjMzMTdkMi4uZTRhYjAwZmJk
YWQ5ZmZiNzFiNTAyMmNjZWM0MWMxMGI1Y2EwZjVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxl
U3lzdGVtR2xpYi5jcHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZp
bGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAotUGxhdGZvcm1G
aWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUp
CitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbiwgYm9vbCBmYWlsSWZG
aWxlRXhpc3RzKQogewogICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7CiAgICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKQEAgLTM0
NiwxMyArMzQ2LDIwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogCiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lLmRhdGEoKSkpOwogICAgIEdSZWZQ
dHI8R0ZpbGVJT1N0cmVhbT4gaW9TdHJlYW07CisgICAgR0ZpbGVDcmVhdGVGbGFncyBwZXJtaXNz
aW9uRmxhZyA9IChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpID8gR19G
SUxFX0NSRUFURV9OT05FIDogR19GSUxFX0NSRUFURV9QUklWQVRFOworCisgICAgaWYgKGZhaWxJ
ZkZpbGVFeGlzdHMpIHsKKyAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0
ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgcGVybWlzc2lvbkZsYWcsIG51bGxwdHIsIG51bGxwdHIp
KTsKKyAgICAgICAgcmV0dXJuIGlvU3RyZWFtLmxlYWtSZWYoKTsKKyAgICB9CisKICAgICBpZiAo
bW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVm
KGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0g
ICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAo
bW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFk
V3JpdGUpIHsKICAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGlj
X2Nhc3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdV
TEFSKSkpCiAgICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFk
d3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxl
LmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAg
ICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0
KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIGlvU3RyZWFtLmxlYWtSZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4
L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCmluZGV4IDI3ODM5ODgzYTFhMmQ2NTQxMzBmZDY4NWZlYWZhMDJhOWM0ODY0ZmMuLmM5
ZjUwMTQzNmFiY2M4MDk0ZTg0MTQ4MGQyMWZlMzZhNDcxZTgxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNzksNyArNzksNyBAQCBib29sIGRlbGV0ZUZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiB1bmxpbmtlZDsKIH0KIAotUGxhdGZv
cm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1v
ZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxl
T3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbiwgYm9vbCBmYWls
SWZGaWxlRXhpc3RzKQogewogICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCk7CiAKQEAgLTg3LDE2ICs4NywzMyBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3Bl
bkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgcmV0
dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CiAKICAgICBpbnQgcGxhdGZvcm1GbGFnID0g
MDsKLSAgICBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCisgICAgc3dpdGNoIChtb2Rl
KSB7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CiAgICAgICAgIHBsYXRmb3JtRmxhZyB8
PSBPX1JET05MWTsKLSAgICBlbHNlIGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUpCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKICAgICAgICAgcGxh
dGZvcm1GbGFnIHw9IChPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGxhdGZvcm1G
bGFnIHw9IChPX1JEV1IgfCBPX0NSRUFUKTsKKyAgICAgICAgYnJlYWs7CiAjaWYgT1MoREFSV0lO
KQotICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpFdmVudHNPbmx5KQorICAgIGNh
c2UgRmlsZU9wZW5Nb2RlOjpFdmVudHNPbmx5OgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gT19F
VlRPTkxZOworICAgICAgICBicmVhazsKICNlbmRpZgorICAgIH0KKworICAgIGlmIChmYWlsSWZG
aWxlRXhpc3RzKQorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fQ1JFQVQgfCBPX0VYQ0wpOwor
CisgICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAocGVybWlzc2lvbiA9PSBGaWxl
QWNjZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlzc2lvbkZsYWcgfD0gKFNfSVJV
U1IgfCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJt
aXNzaW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNSIHwgU19JV1VT
UiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgpOwogCi0gICAgcmV0dXJu
IG9wZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIDA2NjYpOworICAgIHJldHVybiBvcGVu
KGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJtaXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQg
Y2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCmluZGV4IDkzMzRhYzAyOWQ1N2MzMzY1ZjQ1NjI4NmRkMzhhYWJmMGQ0ZmE1
ZjQuLjdiMmExZjhjZjlkMDg1NWJhNjEwYjJhNWRiNWNkNmQ3ZGU2MjE0ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTQyMSw3ICs0MjEsNyBAQCBTdHJpbmcgb3BlblRl
bXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiAg
ICAgcmV0dXJuIHByb3Bvc2VkUGF0aDsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFj
Y2Vzc1Blcm1pc3Npb24sIGJvb2wgZmFpbElmRmlsZUV4aXN0cykKIHsKICAgICBEV09SRCBkZXNp
cmVkQWNjZXNzID0gMDsKICAgICBEV09SRCBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQz
NiwxMCArNDM2LDE1IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJ
Q19XUklURTsKICAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CiAg
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nl
c3MgPSBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFOworICAgICAgICBjcmVhdGlvbkRpc3Bv
c2l0aW9uID0gT1BFTl9BTFdBWVM7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGlmIChm
YWlsSWZGaWxlRXhpc3RzKQorICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX05F
VzsKKwogICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IHBhdGg7CiAgICAgcmV0dXJuIENyZWF0ZUZp
bGUoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRlc2lyZWRBY2Nlc3MsIHNo
YXJlTW9kZSwgMCwgY3JlYXRpb25EaXNwb3NpdGlvbiwgRklMRV9BVFRSSUJVVEVfTk9STUFMLCAw
KTsKIH0KQEAgLTU0OSw5ICs1NTQsMTQgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAgcmV0dXJu
IGVudHJpZXM7CiB9CiAKLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVp
bnQ2NF90JikKK2Jvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWlu
dDY0X3QmIGZyZWVTcGFjZSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgVUxBUkdFX0lOVEVH
RVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7CisgICAgaWYgKCFHZXREaXNrRnJlZVNwYWNl
RXhXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmcmVlQnl0ZXNBdmFpbGFibGVUb0Nh
bGxlciwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZy
ZWVTcGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0OworICAgIHJldHVy
biB0cnVlOwogfQogCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0
cmluZyYgZnNGaWxlKQpAQCAtNjAzLDE1ICs2MTMsNyBAQCBib29sIHVubWFwVmlld09mRmlsZSh2
b2lkKiBidWZmZXIsIHNpemVfdCkKICAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGJ1ZmZlcik7
CiB9CiAKLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQotewotICAgIGF1dG8gZmls
ZSA9IENyZWF0ZUZpbGUoZmlsZVBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIEdFTkVSSUNf
UkVBRCwgMCwgbnVsbHB0ciwgT1BFTl9FWElTVElORywgRklMRV9BVFRSSUJVVEVfTk9STUFMLCBu
dWxscHRyKTsKLQotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZpbGUsIG1vZGUpOwotICAg
IGNsb3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRs
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSkKK2Jvb2wgTWFwcGVk
RmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9w
ZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSkKIHsKICAgICBpZiAoIWlzSGFuZGxlVmFs
aWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjI1LDExICs2MjcsMjggQEAg
Ym9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBNYXBwZWRGaWxlTW9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
YXV0byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBQQUdFX1JF
QURPTkxZLCAwLCAwLCBudWxscHRyKTsKKyAgICBEV09SRCBwYWdlUHJvdGVjdGlvbiA9IFBBR0Vf
UkVBRE9OTFk7CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1JFQUQ7CisgICAg
c3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgorICAgICAg
ICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRE9OTFk7CisgICAgICAgIGRlc2lyZWRBY2Nlc3Mg
PSBGSUxFX01BUF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6
V3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFEV1JJVEU7CisgICAgICAg
IGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQQUdF
X1JFQURXUklURTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1dSSVRFIHwgRklM
RV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byBtYXBwaW5nID0g
Q3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBwYWdlUHJvdGVjdGlvbiwgMCwgMCwg
bnVsbHB0cik7CiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBGSUxFX01BUF9SRUFELCAwLCAw
LCBzaXplKTsKKyAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVk
QWNjZXNzLCAwLCAwLCBzaXplKTsKICAgICBDbG9zZUhhbmRsZShtYXBwaW5nKTsKICAgICBpZiAo
IW1fZmlsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2Vy
LmNwcAppbmRleCA4ZDdkN2FjNjgzODU5ZWUzZTRkMWQwNGMzZWUwNmEyOWYwYmM3M2VhLi42ODhm
ZWRkNTlmYThkNWRkMzU5ZDRjMDlhOTZmZTQ4NmQ1MzNiM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL1BhdGhX
YWxrZXIuY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBQYXRoV2Fsa2Vy
OjpQYXRoV2Fsa2VyKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIHBhdHRl
cm4pCiB7Ci0gICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnkgKyAiXFwiICsgcGF0dGVybjsKKyAg
ICBTdHJpbmcgcGF0aCA9IG1ha2VTdHJpbmcoZGlyZWN0b3J5LCAnXFwnLCBwYXR0ZXJuKTsKICAg
ICBtX2hhbmRsZSA9IDo6RmluZEZpcnN0RmlsZVcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEo
KSwgJm1fZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjE3MmFjZGQzNDYyNWY3Y2Y5NGExOGNmMTVl
MjVkMzE4ZDcxOWZkMi4uNGMzYWQ5MGU1MmE4ZWQ2OTU3N2RmZjhhZDEyMGNjMzgxNDA4MGQ2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wMi0xOCAgQ2hyaXN0b3BoZXIgUmVpZCAg
PGNocmlzLnJlaWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtD
YWNoZTo6RGF0YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAg
ICAgICAgRW5zdXJlIHRoYXQgdGhlIENhY2hlU3RvcmFnZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkg
YmVpbmcgY3JlYXRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGEuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
Q29jb2EubW06CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YVNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwOgorICAgICAgICBVc2UgbW9yZSBGaWxlU3lzdGVtIGZ1bmN0aW9uYWxpdHkg
dG8gc2hhcmUgY29kZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwOgorICAgICAgICBVc2UgT3B0aW9uYWw8
VmVjdG9yPiBmb3IgbV9idWZmZXIgc2luY2Ugd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGlzRW1w
dHkgYW5kIGlzTnVsbC4KKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5vbG9n
eSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTFkZjNiODBhMzZhNjczMWNiNmY4ZDNkYjM5OTQ4
MmY4Y2IwMTViNS4uZTQ0MjM0YzVlNjc4NmFkYmYxNjNmZDRkYzRhOTE2ZGE2YjNiYmZmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAg
LTQ1NCw4ICs0NTQsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW4KICAgICBhdXRvIGlzTmV3
RW50cnkgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBb
ZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0gewog
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2Fj
aGVSb290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9
KS5pc05ld0VudHJ5OwotICAgIGlmIChpc05ld0VudHJ5KQorICAgIGlmIChpc05ld0VudHJ5KSB7
CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQ
YXRoSGFuZGxlKTsKKyAgICAgICAgaWYgKCFjYWNoZVJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3
b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgY2FjaGVSb290UGF0aCkpOworICAgIH0KIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVhYTkwNWFiNjhh
YzllYWYxZDExOWIwMTc4NGZhNjE2MGEyOGVmYy4uNTNjZTQ5Y2YzN2U4MWYxYjU0Y2MyZGI3NTll
MjhhMGI5MmRjYzgxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNs
dWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiAhT1MoV0lORE9XUykKICNp
bmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtMzksMjYgKzM4LDI0IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCiBEYXRhIERh
dGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7Ci0gICAgaW50IGZkID0g
b3BlbihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBP
X0NSRUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgIGlmIChm
ZCA8IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoZnRydW5jYXRlKGZkLCBtX3Np
emUpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgY29uc3RleHByIGJvb2wgZmFpbElm
RmlsZUV4aXN0cyA9IHRydWU7CisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmls
ZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6
RmlsZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlzdHMpOworICAgIGlmICgh
RmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChoYW5kbGUpIHx8ICFGaWxlU3lzdGVtOjp0cnVuY2F0
ZUZpbGUoaGFuZGxlLCBtX3NpemUpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZSho
YW5kbGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBGaWxlU3lzdGVt
OjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKTsKLQotICAgIHZvaWQqIG1hcCA9
IG1tYXAobnVsbHB0ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVE
LCBmZCwgMCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGNsb3NlKGZk
KTsKKyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFw
cGVkRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlLCBGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nl
c3MpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCisgICAgdm9pZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFw
cGVkRmlsZS5kYXRhKCkpOwogICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4obWFwKTsKICAgICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBz
aXplX3QgYnl0ZXNTaXplKSB7CiAgICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNT
aXplKTsKQEAgLTY2LDUyICs2MywyMyBAQCBEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCisjaWYgT1Mo
V0lORE9XUykKKyAgICBEV09SRCBvbGRQcm90ZWN0aW9uOworICAgIFZpcnR1YWxQcm90ZWN0KG1h
cCwgbV9zaXplLCBGSUxFX01BUF9SRUFELCAmb2xkUHJvdGVjdGlvbik7CisgICAgRmx1c2hWaWV3
T2ZGaWxlKG1hcCwgbV9zaXplKTsKKyNlbHNlCiAgICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlz
c2lvbi4KICAgICBtcHJvdGVjdChtYXAsIG1fc2l6ZSwgUFJPVF9SRUFEKTsKIAogICAgIC8vIEZs
dXNoIChhc3luY2hyb25vdXNseSkgdG8gZmlsZSwgdHVybmluZyB0aGlzIGludG8gY2xlYW4gbWVt
b3J5LgogICAgIG1zeW5jKG1hcCwgbV9zaXplLCBNU19BU1lOQyk7Ci0KLSAgICByZXR1cm4gRGF0
YTo6YWRvcHRNYXAobWFwLCBtX3NpemUsIGZkKTsKLX0KLSNlbHNlCi1EYXRhIERhdGE6Om1hcFRv
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0Ci17Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5
c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0g
ICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQotICAgICAgICByZXR1cm4g
eyB9OwotICAgIGlmIChGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpLCBzaXplKCkpIDwgMCkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICByZXR1cm4gRGF0YShWZWN0b3I8dWludDhfdD4obV9idWZmZXIpKTsKLX0KICNlbmRp
ZgogCi0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKLXsK
LSAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAgICBpZiAoZmQgPCAwKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0
KGZkLCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7Ci0gICAgaWYgKCFzaXpl
KSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgMCwgc2l6ZSk7CisgICAgcmV0
dXJuIERhdGE6OmFkb3B0TWFwKFdURk1vdmUobWFwcGVkRmlsZSksIGhhbmRsZSk7CiB9Ci0jZW5k
aWYKIAotRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK0RhdGEgbWFwRmlsZShjb25z
dCBjaGFyKiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIHJldHVybiBtYXBGaWxlKEZp
bGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotI2Vsc2UK
ICAgICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpG
aWxlT3Blbk1vZGU6OlJlYWQpOwogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChm
aWxlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExOSwzMSArODcsMjggQEAgRGF0YSBtYXBG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KGZpbGUsIHNpemUpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBhZG9wdEFuZE1h
cEZpbGUoZmlsZSwgMCwgc2l6ZSk7Ci0jZW5kaWYKIH0KIAotI2lmICFPUyhXSU5ET1dTKQotRGF0
YSBhZG9wdEFuZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK0Rh
dGEgbWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1hcEZpbGUoRmls
ZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Cit9CisKK0Rh
dGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUs
IHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQogewogICAgIGlmICghc2l6ZSkgewotICAgICAg
ICBjbG9zZShmZCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAg
ICAgICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKICAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFw
KG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwotICAg
IGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBz
dWNjZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxl
LCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVN
b2RlOjpQcml2YXRlLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
Ci0gICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworICAgIHJldHVybiBE
YXRhOjphZG9wdE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2Vsc2UKLURh
dGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBz
aXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gRGF0YShmaWxlLCBvZmZz
ZXQsIHNpemUpOwotfQotI2VuZGlmCiAKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBE
YXRhJiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQogewpAQCAtMTc5LDQwICsxNDQsMjUgQEAgc3Rh
dGljIFNhbHQgbWFrZVNhbHQoKQogCiBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25z
dCBTdHJpbmcmIHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgYXV0byBjcGF0aCA9IEZp
bGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBhdXRvIGZkID0g
b3BlbihjcGF0aC5kYXRhKCksIE9fUkRPTkxZLCAwKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0
byBieXRlc1JlYWQgPSByZWFkKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGNs
b3NlKGZkKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQu
c2l6ZSgpKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKLQotICAgICAgICB1bmxpbmso
Y3BhdGguZGF0YSgpKTsKLSAgICAgICAgZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19XUk9OTFkg
fCBPX0NSRUFUIHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgICAgICBib29sIHN1
Y2Nlc3MgPSB3cml0ZShmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKSA9PSBzdGF0aWNfY2Fz
dDxzc2l6ZV90PihzYWx0LnNpemUoKSk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHNh
bHQ7Ci0jZWxzZQotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8g
Ynl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOwotICAgIEZpbGVTeXN0ZW06OmNs
b3NlRmlsZShmaWxlKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQuc2l6ZSgpKSB7Ci0gICAg
ICAgIHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGlmIChmaWxlRXhpc3RzKHBhdGgpKSB7CisgICAg
ICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZp
bGVPcGVuTW9kZTo6UmVhZCk7CisgICAgICAgIFNhbHQgc2FsdDsKKyAgICAgICAgYXV0byBieXRl
c1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNs
b3NlRmlsZShmaWxlKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSBzYWx0LnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzYWx0OwogCiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
cGF0aCk7Ci0gICAgICAgIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lz
dGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5
c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRh
KCkpLCBzYWx0LnNpemUoKSkgPT0gc2FsdC5zaXplKCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNs
b3NlRmlsZShmaWxlKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGF1dG8gZmls
ZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBib29s
IHN1Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0
PGNoYXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKKyAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm4geyB9OworCiAgICAgcmV0dXJuIHNhbHQ7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgTmV0d29ya0NhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YS5oCmluZGV4IGQ3OGQ5OGI2MTc1MGQ3OTE3YmM5ODA1M2Jk
OWU3YzljYWRhYjg3NDIuLjM3YjU5NjY1NmE1ZDEzNTJkNzJjOTM2ZWUxOTMxZmQ5MGYyNjE5ZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRGF0YS5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0
clNvdXAuaD4KICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSA8d3RmL0JveC5oPgor
I2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFNoYXJlZE1lbW9yeTsKQEAgLTUzLDE5ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgfkRh
dGEoKSB7IH0KIAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7Ci0jaWYgIU9TKFdJTkRPV1MpCi0g
ICAgc3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGludCBmZCk7Ci0jZW5k
aWYKKyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYm
LCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBEYXRhKE9TT2Jq
ZWN0UHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAj
ZW5kaWYKICNpZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50
IGZkID0gLTEpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBEYXRhKFZlY3Rvcjx1
aW50OF90PiYmKTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6
ZV90IG9mZnNldCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBEYXRhKFZhcmlhbnQ8VmVjdG9y
PHVpbnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJik7CiAjZW5kaWYKICAgICBi
b29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFt
X3NpemU7IH0KQEAgLTk0LDEwICs5NiwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNP
VVApCiAgICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVyOwotICAgIGludCBt
X2ZpbGVEZXNjcmlwdG9yIHsgLTEgfTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5k
bGUgbV9maWxlRGVzY3JpcHRvciB7IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGUgfTsKICNlbmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVm
ZmVyOworI2lmIFVTRShDVVJMKQorICAgIEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUg
Y29uc3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAw
IH07CkBAIC0xMDYsMTcgKzEwOCw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29uY2F0ZW5hdGUoY29u
c3QgRGF0YSYsIGNvbnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiwgY29u
c3QgRGF0YSYpOwotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50LCBz
aXplX3Qgb2Zmc2V0LCBzaXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRp
ZgotI2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUo
R0ZpbGVJT1N0cmVhbSosIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiAhT1Mo
V0lORE9XUykKIERhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNlbmRpZgogRGF0YSBt
YXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDg+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4NzAwODc5NDQzZDY2
OWYzYjI5YTAzYjI4ZWFhZjY1MjJiLi5jYjRhYzM4YzZhNTI4MjQ1ZDE1MWRiYWY3MTVhNWFhOTU1
ZjI5ZjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDEzIEBAIERhdGEg
Y29uY2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBh
ZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgp
LCBiLmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBt
YXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFu
ZGxlIGZkKQogeworICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9p
ZCogbWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAg
QVNTRVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKGZkKTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3Bh
dGNoX2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQ
QVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAgICBt
dW5tYXAobWFwLCBzaXplKTsKICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNm
NDMxNTZjNWEwM2ZjMzFmNTg2NWU3MzE2MjRjODgxZjU4MGFiMTguLjE5MjQ4MmJmOWY0MzRkYzE5
OWQzN2FkNDExODI5NGFlMTlkYzY2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCkBAIC0zMCw0
MCArMzAsNDIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
IAogRGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1f
YnVmZmVyKEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmls
ZURhdGE+Pjo6Y3JlYXRlKFZlY3Rvcjx1aW50OF90PihzaXplKSkpCisgICAgLCBtX3NpemUoc2l6
ZSkKIHsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAg
ICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkoV1RGOjpn
ZXQ8VmVjdG9yPHVpbnQ4X3Q+PigqbV9idWZmZXIpLmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAK
LURhdGE6OkRhdGEoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKQorRGF0YTo6RGF0YShWYXJpYW50PFZlY3Rvcjx1aW50OF90Piwg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+JiYgZGF0YSkKKyAgICA6IG1fYnVmZmVyKEJveDxW
YXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3Jl
YXRlKFdURk1vdmUoZGF0YSkpKQorICAgICwgbV9pc01hcChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPigqbV9idWZmZXIpKQogewotICAgIG1fYnVmZmVy
LnJlc2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtG
aWxlKGZpbGUsIG9mZnNldCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7
Ci0gICAgRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KG1fYnVmZmVyLmRhdGEoKSksIHNpemUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShm
aWxlKTsKLX0KLQotRGF0YTo6RGF0YShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCi0gICAgOiBt
X2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCi17Ci0gICAgbV9zaXplID0gbV9idWZmZXIuc2l6ZSgp
OworICAgIG1fc2l6ZSA9IFdURjo6c3dpdGNoT24oKm1fYnVmZmVyLAorICAgICAgICBbXShjb25z
dCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikgLT4gc2l6ZV90IHsgcmV0dXJuIGJ1ZmZlci5zaXpl
KCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBw
ZWRGaWxlKSAtPiBzaXplX3QgeyByZXR1cm4gbWFwcGVkRmlsZS5zaXplKCk7IH0KKyAgICApOwog
fQogCiBEYXRhIERhdGE6OmVtcHR5KCkKIHsKLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rvcjx1
aW50OF90PiBidWZmZXI7CisgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpIH07CiB9CiAKIGNv
bnN0IHVpbnQ4X3QqIERhdGE6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5k
YXRhKCk7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBidWZmZXIuZGF0
YSgpOyB9LAorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFw
cGVkRmlsZSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsgfQorICAgICk7CiB9CiAKIGJvb2wgRGF0YTo6aXNO
dWxsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOworICAgIHJldHVy
biAhbV9idWZmZXI7CiB9CiAKIGJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChj
b25zdCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CkBAIC03MSwyMSArNzMsMzcg
QEAgYm9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpPiYgYXBwbGllcikgY29uc3QKICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihtX2J1ZmZlci5kYXRhKCkpLCBtX2J1ZmZlci5zaXplKCkpOworICAgIHJldHVybiBh
cHBsaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSk7
CiB9CiAKIERhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07Cisg
ICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IGRh
dGEoKSArIG9mZnNldCwgc2l6ZSB9OwogfQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEm
IGEsIGNvbnN0IERhdGEmIGIpCiB7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBiOworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXIoYS5zaXplKCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZl
ci5kYXRhKCksIGEuZGF0YSgpLCBhLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkg
KyBhLnNpemUoKSwgYi5kYXRhKCksIGIuc2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3Zl
KGJ1ZmZlcikpOwogfQogCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQor
eworICAgIEFTU0VSVChtYXBwZWRGaWxlLmRhdGEoKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGZkKTsKKworICAgIHJldHVybiB7IFdURk1vdmUobWFwcGVkRmlsZSkgfTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNv
dXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhU291cC5jcHAKaW5kZXggNTE1YzA5ZWJiZmQzMzU0ZmQ5NTMzY2VlMWJkODkwMTczYmFhMWM3
Yy4uZDNiNzllMDE0YTc5YTc0NmZjNmY1MTc0M2ZiY2I4YjJhNGMwMTc0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhU291cC5jcHAKQEAgLTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVy
X25ld193aXRoX293bmVyKGNvcGllZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7
CiB9CiAKLURhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQor
RGF0YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0
Zm9ybUZpbGVIYW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2ZpbGVE
ZXNjcmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkK
LSAgICAsIG1faXNNYXAobV9zaXplICYmIGZkICE9IC0xKQorICAgICwgbV9pc01hcChtX3NpemUg
JiYgRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4
LDEyIEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewogICAg
ICAgICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOwor
ICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgIH0KIAog
ICAgIHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQgZmlsZURlc2NyaXB0b3I7
CisgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsK
IAogc3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAt
MTIxLDggKzEyMSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIq
IHdyYXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAo
dm9pZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1hcChGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOwor
ICAgIHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIEFTU0VSVChtYXAp
OwogICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CiAgICAgTWFwV3JhcHBlciogd3JhcHBl
ciA9IG5ldyBNYXBXcmFwcGVyIHsgbWFwLCBzaXplLCBmZCB9OwpAQCAtMTMwLDIxICsxMzIsMTQg
QEAgRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAg
ICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0jaWYgVVNFKEdMSUIpICYm
ICFQTEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiBzdHJl
YW0sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJbnB1dFN0cmVhbSogaW5w
dXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKHN0cmVh
bSkpOwotICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVf
REVTQ1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVybiBhZG9wdEFuZE1hcEZp
bGUoZmQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRyPFNoYXJlZE1lbW9yeT4g
RGF0YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkg
fHwgIWlzTWFwKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFNoYXJl
ZE1lbW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVm
ZmVyLT5sZW5ndGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1dFN0cmVhbSogaW5wdXRT
dHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fZmlsZURl
c2NyaXB0b3IpKTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQo
R19GSUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAgICByZXR1cm4gU2hhcmVk
TWVtb3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZm
ZXItPmxlbmd0aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmls
ZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUZpbGVTeXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzMDM4MDMwNWRjZjQ3M2E2NzI2ZDEy
YjkzOWQ5YjAuLjdhMGVjNWUxNGYzM2RlMDQyY2RmNDRiMGZiYTQyM2NjOWRkN2FmYzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmls
ZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0
aWMgRGlyZWN0b3J5RW50cnlUeXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQot
ewotICAgIHN3aXRjaCAoZHR5cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJu
IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAg
ICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBl
OjpGaWxlOwotICAgIH0KLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQot
I2VuZGlmCi0KIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVu
Y3Rpb24pCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICgh
ZGlyKQotICAgICAgICByZXR1cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0g
cmVhZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAt
PmRfdHlwZSAhPSBEVF9SRUcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3Qg
Y2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikg
fHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBh
dXRvIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFt
ZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlv
bihuYW1lU3RyaW5nLCBkaXJlY3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAg
ICBjbG9zZWRpcihkaXIpOwotI2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjps
aXN0RGlyZWN0b3J5KHBhdGgpOworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCwgIioiX3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7
CiAgICAgICAgIGF1dG8gdHlwZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwg
RmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50
cnlUeXBlOjpEaXJlY3RvcnkgOiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1
bmN0aW9uKGVudHJ5LCB0eXBlKTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdl
dEZpbGVOYW1lKGVudHJ5KSwgdHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRl
RGlyZWN0b3J5UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMzYzlhMGNiZTdlMWVlYjFkYjA3
NzNhMjMyN2JmNTUxNWIwMGQ5MTQuLjk0NmEyZTVjN2EyOGM5OTNkMzkzNDc3NTM3MDhhYTUxZGE1
MDQyZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAyMC0wMi0yMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJl
aWRAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0
YSBieSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGVzdCBmb3IgRmlsZVN5c3RlbTo6Y3JlYXRlRmlsZQorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHA6CisKIDIwMjAtMDItMTggIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBmcm9t
ICJsYXllciBmbHVzaCIgdGVybWlub2xvZ3kgdG8gInJlbmRlcmluZyB1cGRhdGUiCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGQwZTUxNTFhOTk5
MjlhODM3MjczNDkzNzUzYTU4MGViZjMyZDM4ZjcuLjc2Y2FmMmFkNDM3MjY2M2QyYmUzMTFiY2Zi
NjNhMDRkMGMwZDAxZjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVT
eXN0ZW0uY3BwCkBAIC0xNDUsNCArMTQ1LDEwIEBAIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgVW5p
Y29kZURpcmVjdG9yeU5hbWUpCiAgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWREaXJlY3RvcnlOYW1l
ID09IGRpcmVjdG9yeU5hbWUpOwogfQogCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIG9wZW5FeGlz
dGluZ0ZpbGVBbmRGYWlsSWZGaWxlRXhpc3RzKQoreworICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5
c3RlbTo6b3BlbkZpbGUodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsLCB0cnVlKTsK
KyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChoYW5kbGUpKTsKK30K
KwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391772</attachid>
            <date>2020-02-26 13:05:15 -0800</date>
            <delta_ts>2020-02-26 13:57:56 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-197684-20200226130514.patch</filename>
            <type>text/plain</type>
            <size>38305</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODM2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTFhNjM1ZDQ1Yjk4N2M3ZWVmN2I3
MTNjM2UxNjQ0OGQ4MjQ4MGY4MC4uNTEzZTg2OTgxMzA4MGEzMTA3OTNmM2QyMDVmNjgxMWNiMDRh
OGZlMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlk
ICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29y
a0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBT
dXp1a2kuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgor
CiAyMDIwLTAyLTE3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2ViR0xdIFVwZGF0ZSBXZWJHTDIgcmVzdWx0cyB3aXRoIEFOR0xFIGJhY2tlbmQKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDY4NmI3Yzlk
MTc1ZTQyZGFlMjI2ZDc3YjBjZDM5ZGNjYTlhMGYzNjEuLjBiZGVlNTU0YTljN2ZiZDVhZTA4MTAw
MTNkM2M2OWJjMDA5NTExODEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNh
aXJvL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucwpAQCAtMTE2MSw3ICsxMTYxLDIwIEBAIGNyeXB0by9zdWJ0bGUvd3Jh
cC1rZXktbWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFNraXAgXQogCiBodHRwL3Rlc3RzL2Fw
cGNhY2hlIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2JsaW5rL3NlbmRiZWFjb24gWyBTa2lwIF0KLWh0
dHAvdGVzdHMvY2FjaGUgWyBTa2lwIF0KKworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0
dHAvdGVzdHMvY2FjaGUvY2FuY2VsLW11bHRpcGxlLXBvc3QteGhycy5odG1sIFsgRmFpbHVyZSBd
CisKKyMgZmFpbHMgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIGVwb2NoIGJlaGF2aW9yIHNwZWNp
ZmljIHRvIE1hYworaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtbGFzdC1t
b2RpZmllZC5odG1sIFsgRmFpbHVyZSBdCisKKyMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uCito
dHRwL3Rlc3RzL2NhY2hlL2lmcmFtZS0zMDQtY3Jhc2guaHRtbCBbIEZhaWx1cmUgXQoraHR0cC90
ZXN0cy9jYWNoZS9uZXR3b3JrLWVycm9yLWR1cmluZy1yZXZhbGlkYXRpb24uaHRtbCBbIEZhaWx1
cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9wYXJ0aXRpb25lZC1jYWNoZS1pZnJhbWUuaHRtbCBbIEZh
aWx1cmUgXQoraHR0cC90ZXN0cy9jYWNoZS9wYXJ0aXRpb25lZC1jYWNoZS5odG1sIFsgRmFpbHVy
ZSBdCitodHRwL3Rlc3RzL2NhY2hlL3dpbGxzZW5kcmVxdWVzdC1yZXR1cm5zLW51bGwtZm9yLW1l
bW9yeS1jYWNoZS1sb2FkLmh0bWwgWyBGYWlsdXJlIF0KKwogaHR0cC90ZXN0cy9jYWNoZS1zdG9y
YWdlIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NhbnZhcyBbIFNraXAgXQogaHR0cC90ZXN0cy9jb250
ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJveCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmMTc0NjcxMGIx
YmQwM2M3MGU4MWY3ZGU0ZWIzNzYyNTc5ZDJjMzQ0Li44YzZlZDk2ZDQxMTdhNDkwNDJhMDA5NTA1
ZjExZGIxNDNhYzVlMGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTAyLTE4ICBDaHJpc3Rv
cGhlciBSZWlkICA8Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1l
bnQgTmV0d29ya0NhY2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiB3dGYvRmlsZVN5c3RlbS5jcHA6CisgICAgICAg
ICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkZWQgRmlsZUFjY2Vzc1Blcm1pc3Npb24g
ZmxhZyB3aGVuIG9wZW5pbmcgZmlsZXMuCisgICAgICAgIFJlbW92ZSBkZWZhdWx0IGFyZ3VtZW50
IGZvciB0aGUgbGlzdERpcmVjdG9yeSBmaWx0ZXIgc2luY2UgdGhlIGRlZmF1dAorICAgICAgICBT
dHJpbmcoKSBmaWx0ZXIgZG9lc24ndCBtYXRjaCBhbGwgZmlsZXMgb24gTWFjIGFuZCBXaW5kb3dz
LgorCisgICAgICAgIEFkZGVkIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlIHRvIGJlIHVzZWQgd2l0
aCBSZWFkV3JpdGUgTWFwcGVkRmlsZURhdGEuCisgICAgICAgIEFkZGVkIGZhaWxJZkZpbGVFeGlz
dHMgZmxhZyB0byBvcGVuRmlsZS4KKworICAgICAgICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAg
QWRkZWQgKFNfSVJVU1IgfCBTX0lXVVNSKSBmaWxlIG9wZW4gbW9kZXMuCisKKyAgICAgICAgKiB3
dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICBJbXBsZW1lbnQgZ2V0Vm9sdW1lRnJl
ZVNwYWNlIHNpbmNlIHNvbWUgb2YgdGhlIHRlc3RzIHVzZSBpdCB3aGVuIHRvZ2dsaW5nIGNhY2hl
LgorICAgICAgICAKKyAgICAgICAgKiB3dGYvd2luL1BhdGhXYWxrZXIuY3BwOgorCiAyMDIwLTAy
LTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgZnJvbSAibGF5ZXIgZmx1c2giIHRlcm1pbm9sb2d5IHRvICJyZW5kZXJpbmcgdXBkYXRlIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9GaWxlU3lzdGVtLmNwcAppbmRleCA3MmY5NTNlYWIzZmM5ODg0MmUxMzI4M2Q1NTcyZDk5NjU5
ZWYxMGVlLi44NDg1MjFlMjcyNjU4Zjg4YWJlZDdlZDlhM2YxZjFmNmJiNzljYjdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmNwcApAQCAtMjg3LDE3ICsyODcsMTcgQEAgTWFwcGVkRmlsZURhdGE6On5NYXBw
ZWRGaWxlRGF0YSgpCiAgICAgdW5tYXBWaWV3T2ZGaWxlKG1fZmlsZURhdGEsIG1fZmlsZVNpemUp
OwogfQogCi0jaWYgSEFWRShNTUFQKQotCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2Vz
cykKK01hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBNYXBwZWRGaWxlTW9kZSBtYXBNb2RlLCBib29sJiBzdWNjZXNzKQogewotICAgIGF1dG8gZmQg
PSBvcGVuRmlsZShmaWxlUGF0aCwgRmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBhdXRvIGZkID0g
b3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAKLSAg
ICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmZCwgbW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZp
bGVIYW5kbGUoZmQsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7CiAg
ICAgY2xvc2VGaWxlKGZkKTsKIH0KIAotYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRs
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2RlKQorI2lmIEhB
VkUoTU1BUCkKKworYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBGaWxlT3Blbk1vZGUgb3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlIG1h
cE1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTMyNCw3ICszMjQsMjQgQEAgYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmls
ZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSBtb2QKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6
ZSwgUFJPVF9SRUFELCBNQVBfRklMRSB8IChtb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQg
PyBNQVBfU0hBUkVEIDogTUFQX1BSSVZBVEUpLCBmZCwgMCk7CisgICAgaW50IHBhZ2VQcm90ZWN0
aW9uID0gUFJPVF9SRUFEOworICAgIHN3aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVP
cGVuTW9kZTo6UmVhZDoKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKKyAgICAgICAgcGFnZVBy
b3RlY3Rpb24gPSBQUk9UX1dSSVRFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVu
TW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRCB8IFBS
T1RfV1JJVEU7CisgICAgICAgIGJyZWFrOworI2lmIE9TKERBUldJTikKKyAgICBjYXNlIEZpbGVP
cGVuTW9kZTo6RXZlbnRzT25seToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXplLCBwYWdlUHJvdGVjdGlv
biwgTUFQX0ZJTEUgfCAobWFwTW9kZSA9PSBNYXBwZWRGaWxlTW9kZTo6U2hhcmVkID8gTUFQX1NI
QVJFRCA6IE1BUF9QUklWQVRFKSwgZmQsIDApOwogCiAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxF
RCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9G
aWxlU3lzdGVtLmggYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKaW5kZXggODA1YTBlNGIx
NmZjYmYyNzdkNDA0NzA1ZDFiZjhmYjg5MjQwNWNjOS4uZTk1NTg2NjdkYjcyYjQ5MDIwODFkZTNk
Yzk2ZjBlNjI2YWExZTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaApAQCAtNzksMTEgKzc5LDE3IEBAIGNv
bnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlID0gLTE7CiBl
bnVtIGNsYXNzIEZpbGVPcGVuTW9kZSB7CiAgICAgUmVhZCwKICAgICBXcml0ZSwKKyAgICBSZWFk
V3JpdGUsCiAjaWYgT1MoREFSV0lOKQogICAgIEV2ZW50c09ubHksCiAjZW5kaWYKIH07CiAKK2Vu
dW0gY2xhc3MgRmlsZUFjY2Vzc1Blcm1pc3Npb24gOiBib29sIHsKKyAgICBVc2VyLAorICAgIEFs
bAorfTsKKwogZW51bSBjbGFzcyBGaWxlU2Vla09yaWdpbiB7CiAgICAgQmVnaW5uaW5nLAogICAg
IEN1cnJlbnQsCkBAIC0xMzEsNyArMTM3LDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
TWV0YWRhdGFVUkwoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHVybFN0cmkKIGJv
b2wgY2FuRXhjbHVkZUZyb21CYWNrdXAoKTsgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBmaWxlIGNh
biBldmVyIGJlIGV4Y2x1ZGVkIGZyb20gYmFja3VwLgogYm9vbCBleGNsdWRlRnJvbUJhY2t1cChj
b25zdCBTdHJpbmcmKTsgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCiAKLVdURl9FWFBP
UlRfUFJJVkFURSBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIgPSBTdHJpbmcoKSk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
VmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgZmlsdGVyKTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYpOwogU3RyaW5nIHN0cmluZ0Zyb21GaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oY29uc3QgY2hhciopOwpAQCAtMTQwLDcgKzE0Niw3IEBAIGlubGluZSBi
b29sIGlzSGFuZGxlVmFsaWQoY29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpIHsgcmV0
dXJuIGhhbmRsZSAhPSBpCiAKIC8vIFByZWZpeCBpcyB3aGF0IHRoZSBmaWxlbmFtZSBzaG91bGQg
YmUgcHJlZml4ZWQgd2l0aCwgbm90IHRoZSBmdWxsIHBhdGguCiBXVEZfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZp
bGVIYW5kbGUmKTsKLVdURl9FWFBPUlRfUFJJVkFURSBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUpOworV1RGX0VYUE9SVF9QUklWQVRF
IFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVu
TW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gPSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsLCBi
b29sIGZhaWxJZkZpbGVFeGlzdHMgPSBmYWxzZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBj
bG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcg
b2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNjZXNzZnVsLCAtMSBv
dGhlcndpc2UuCiBXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwpAQCAtMjA2LDYg
KzIxMiw3IEBAIHB1YmxpYzoKICAgICBNYXBwZWRGaWxlRGF0YShNYXBwZWRGaWxlRGF0YSYmKTsK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxl
UGF0aCwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBNYXBwZWRGaWxlRGF0YShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZpbGVNb2RlLCBi
b29sJiBzdWNjZXNzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWFwcGVkRmlsZURhdGEoUGxh
dGZvcm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlLCBib29sJiBzdWNj
ZXNzKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1hcHBlZEZpbGVEYXRhKCk7CiAgICAgTWFw
cGVkRmlsZURhdGEmIG9wZXJhdG9yPShNYXBwZWRGaWxlRGF0YSYmKTsKIApAQCAtMjE2LDE1ICsy
MjMsMjAgQEAgcHVibGljOgogICAgIHZvaWQqIGxlYWtIYW5kbGUoKSB7IHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fZmlsZURhdGEsIG51bGxwdHIpOyB9CiAKIHByaXZhdGU6Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgbWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIE1hcHBlZEZp
bGVNb2RlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFuZGxlKFBsYXRm
b3JtRmlsZUhhbmRsZSwgRmlsZU9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSk7CiAKICAgICB2b2lk
KiBtX2ZpbGVEYXRhIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZmlsZVNpemUgeyAwIH07
CiB9OwogCi1pbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUsIGJvb2wmIHN1Y2Nlc3MpCitpbmxp
bmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgc3VjY2Vz
cyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBGaWxlT3Blbk1vZGU6OlJlYWQsIG1hcE1vZGUpOwor
fQorCitpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9k
ZSwgYm9vbCYgc3VjY2VzcykKIHsKLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShoYW5kbGUs
IG1vZGUpOworICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwgb3Blbk1vZGUsIG1h
cE1vZGUpOwogfQogCiBpbmxpbmUgTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKE1hcHBl
ZEZpbGVEYXRhJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVT
eXN0ZW1HbGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmlu
ZGV4IDg2YzA0ZjlkNWUxMzQwZDliNGY5N2YwZDdmNzkwMGUyOGIzMzE3ZDIuLmU0YWIwMGZiZGFk
OWZmYjcxYjUwMjJjY2VjNDFjMTBiNWNhMGY1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5
c3RlbUdsaWIuY3BwCkBAIC0zMzgsNyArMzM4LDcgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxl
KGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh0ZW1wUGF0aC5nZXQoKSk7CiB9CiAKLVBsYXRmb3JtRmls
ZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQor
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgZmFpbElmRmls
ZUV4aXN0cykKIHsKICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwogICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCkBAIC0zNDYs
MTMgKzM0NiwyMCBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKIAogICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9w
dEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChmaWxlbmFtZS5kYXRhKCkpKTsKICAgICBHUmVmUHRy
PEdGaWxlSU9TdHJlYW0+IGlvU3RyZWFtOworICAgIEdGaWxlQ3JlYXRlRmxhZ3MgcGVybWlzc2lv
bkZsYWcgPSAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsKSA/IEdfRklM
RV9DUkVBVEVfTk9ORSA6IEdfRklMRV9DUkVBVEVfUFJJVkFURTsKKworICAgIGlmIChmYWlsSWZG
aWxlRXhpc3RzKSB7CisgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVf
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBudWxscHRyKSk7
CisgICAgICAgIHJldHVybiBpb1N0cmVhbS5sZWFrUmVmKCk7CisgICAgfQorCiAgICAgaWYgKG1v
ZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkKQogICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihn
X2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAg
IGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSkgeworICAgIGVsc2UgaWYgKG1v
ZGUgPT0gRmlsZU9wZW5Nb2RlOjpXcml0ZSB8fCBtb2RlID09IEZpbGVPcGVuTW9kZTo6UmVhZFdy
aXRlKSB7CiAgICAgICAgIGlmIChnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIHN0YXRpY19j
YXN0PEdGaWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxB
UikpKQogICAgICAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX29wZW5fcmVhZHdy
aXRlKGZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5n
ZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgICAg
ICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgp
LCBwZXJtaXNzaW9uRmxhZywgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgIH0KIAogICAgIHJldHVy
biBpb1N0cmVhbS5sZWFrUmVmKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcAppbmRleCAyNzgzOTg4M2ExYTJkNjU0MTMwZmQ2ODVmZWFmYTAyYTljNDg2NGZjLi5jOWY1
MDE0MzZhYmNjODA5NGU4NDE0ODBkMjFmZTM2YTQ3MWU4MWZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBkZWxldGVGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gdW5saW5rZWQ7CiB9CiAKLVBsYXRmb3Jt
RmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2Rl
KQorUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgZmFpbElm
RmlsZUV4aXN0cykKIHsKICAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOwogCkBAIC04NywxNiArODcsMzMgQEAgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiAgICAgICAgIHJldHVy
biBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwogCiAgICAgaW50IHBsYXRmb3JtRmxhZyA9IDA7
Ci0gICAgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkKQorICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0g
T19SRE9OTFk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3JpdGU6CiAgICAgICAgIHBsYXRm
b3JtRmxhZyB8PSAoT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBsYXRmb3JtRmxh
ZyB8PSAoT19SRFdSIHwgT19DUkVBVCk7CisgICAgICAgIGJyZWFrOwogI2lmIE9TKERBUldJTikK
LSAgICBlbHNlIGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seSkKKyAgICBjYXNl
IEZpbGVPcGVuTW9kZTo6RXZlbnRzT25seToKICAgICAgICAgcGxhdGZvcm1GbGFnIHw9IE9fRVZU
T05MWTsKKyAgICAgICAgYnJlYWs7CiAjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoZmFpbElmRmls
ZUV4aXN0cykKKyAgICAgICAgcGxhdGZvcm1GbGFnIHw9IChPX0NSRUFUIHwgT19FWENMKTsKKwor
ICAgIGludCBwZXJtaXNzaW9uRmxhZyA9IDA7CisgICAgaWYgKHBlcm1pc3Npb24gPT0gRmlsZUFj
Y2Vzc1Blcm1pc3Npb246OlVzZXIpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNS
IHwgU19JV1VTUik7CisgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNjZXNzUGVybWlz
c2lvbjo6QWxsKQorICAgICAgICBwZXJtaXNzaW9uRmxhZyB8PSAoU19JUlVTUiB8IFNfSVdVU1Ig
fCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RIKTsKIAotICAgIHJldHVybiBv
cGVuKGZzUmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCAwNjY2KTsKKyAgICByZXR1cm4gb3Blbihm
c1JlcC5kYXRhKCksIHBsYXRmb3JtRmxhZywgcGVybWlzc2lvbkZsYWcpOwogfQogCiB2b2lkIGNs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAppbmRleCA5MzM0YWMwMjlkNTdjMzM2NWY0NTYyODZkZDM4YWFiZjBkNGZhNWY0
Li43YjJhMWY4Y2Y5ZDA4NTViYTYxMGIyYTVkYjVjZDZkN2RlNjIxNGZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC00MjEsNyArNDIxLDcgQEAgU3RyaW5nIG9wZW5UZW1w
b3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAg
IHJldHVybiBwcm9wb3NlZFBhdGg7CiB9CiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZvcm1GaWxlSGFuZGxl
IG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nl
c3NQZXJtaXNzaW9uLCBib29sIGZhaWxJZkZpbGVFeGlzdHMpCiB7CiAgICAgRFdPUkQgZGVzaXJl
ZEFjY2VzcyA9IDA7CiAgICAgRFdPUkQgY3JlYXRpb25EaXNwb3NpdGlvbiA9IDA7CkBAIC00MzYs
MTAgKzQzNiwxNSBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNf
V1JJVEU7CiAgICAgICAgIGNyZWF0aW9uRGlzcG9zaXRpb24gPSBDUkVBVEVfQUxXQVlTOwogICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlOgorICAgICAgICBkZXNpcmVkQWNjZXNz
ID0gR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURTsKKyAgICAgICAgY3JlYXRpb25EaXNwb3Np
dGlvbiA9IE9QRU5fQUxXQVlTOworICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBpZiAoZmFp
bElmRmlsZUV4aXN0cykKKyAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9ORVc7
CisKICAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBwYXRoOwogICAgIHJldHVybiBDcmVhdGVGaWxl
KGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBkZXNpcmVkQWNjZXNzLCBzaGFy
ZU1vZGUsIDAsIGNyZWF0aW9uRGlzcG9zaXRpb24sIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgMCk7
CiB9CkBAIC01NDksOSArNTU0LDE0IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsdGVyKQogICAgIHJldHVybiBl
bnRyaWVzOwogfQogCi1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmLCB1aW50
NjRfdCYpCitib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2
NF90JiBmcmVlU3BhY2UpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFVMQVJHRV9JTlRFR0VS
IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyOworICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4
VyhwYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxs
ZXIsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmVl
U3BhY2UgPSBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJp
bmcmIGZzRmlsZSkKQEAgLTYwMywxNSArNjEzLDcgQEAgYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9p
ZCogYnVmZmVyLCBzaXplX3QpCiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwog
fQogCi1NYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKLXsKLSAgICBhdXRvIGZpbGUg
PSBDcmVhdGVGaWxlKGZpbGVQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHRU5FUklDX1JF
QUQsIDAsIG51bGxwdHIsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgbnVs
bHB0cik7Ci0KLSAgICBzdWNjZXNzID0gbWFwRmlsZUhhbmRsZShmaWxlLCBtb2RlKTsKLSAgICBj
bG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUo
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUpCitib29sIE1hcHBlZEZp
bGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVu
TW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUpCiB7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlk
KGhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyNSwxMSArNjI3LDI4IEBAIGJv
b2wgTWFwcGVkRmlsZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgTWFwcGVkRmlsZU1vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1
dG8gbWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgUEFHRV9SRUFE
T05MWSwgMCwgMCwgbnVsbHB0cik7CisgICAgRFdPUkQgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JF
QURPTkxZOworICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9SRUFEOworICAgIHN3
aXRjaCAob3Blbk1vZGUpIHsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6UmVhZDoKKyAgICAgICAg
cGFnZVByb3RlY3Rpb24gPSBQQUdFX1JFQURPTkxZOworICAgICAgICBkZXNpcmVkQWNjZXNzID0g
RklMRV9NQVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6Oldy
aXRlOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRFdSSVRFOworICAgICAgICBk
ZXNpcmVkQWNjZXNzID0gRklMRV9NQVBfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9S
RUFEV1JJVEU7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURSB8IEZJTEVf
TUFQX1JFQUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8gbWFwcGluZyA9IENy
ZWF0ZUZpbGVNYXBwaW5nKGhhbmRsZSwgbnVsbHB0ciwgcGFnZVByb3RlY3Rpb24sIDAsIDAsIG51
bGxwdHIpOwogICAgIGlmICghbWFwcGluZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgRklMRV9NQVBfUkVBRCwgMCwgMCwg
c2l6ZSk7CisgICAgbV9maWxlRGF0YSA9IE1hcFZpZXdPZkZpbGUobWFwcGluZywgZGVzaXJlZEFj
Y2VzcywgMCwgMCwgc2l6ZSk7CiAgICAgQ2xvc2VIYW5kbGUobWFwcGluZyk7CiAgICAgaWYgKCFt
X2ZpbGVEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi93aW4vUGF0aFdhbGtlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vUGF0aFdhbGtlci5j
cHAKaW5kZXggOGQ3ZDdhYzY4Mzg1OWVlM2U0ZDFkMDRjM2VlMDZhMjlmMGJjNzNlYS4uNjg4ZmVk
ZDU5ZmE4ZDVkZDM1OWQ0YzA5YTk2ZmU0ODZkNTMzYjNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvd2luL1BhdGhXYWxrZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fs
a2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogUGF0aFdhbGtlcjo6
UGF0aFdhbGtlcihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBwYXR0ZXJu
KQogewotICAgIFN0cmluZyBwYXRoID0gZGlyZWN0b3J5ICsgIlxcIiArIHBhdHRlcm47CisgICAg
U3RyaW5nIHBhdGggPSBtYWtlU3RyaW5nKGRpcmVjdG9yeSwgJ1xcJywgcGF0dGVybik7CiAgICAg
bV9oYW5kbGUgPSA6OkZpbmRGaXJzdEZpbGVXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCks
ICZtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYxNzJhY2RkMzQ2MjVmN2NmOTRhMThjZjE1ZTI1
ZDMxOGQ3MTlmZDIuLjY1M2FiYmZmYmE5MTZlMTk0NDU0OTBkOGYwNzdjY2MyMWFiZWUyYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDItMTggIENocmlzdG9waGVyIFJlaWQgIDxj
aHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBOZXR3b3JrQ2Fj
aGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTk0NjczOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVr
aS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAg
ICAgRW5zdXJlIHRoYXQgdGhlIENhY2hlU3RvcmFnZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkgYmVp
bmcgY3JlYXRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGEuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGEuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29j
b2EubW06CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNv
dXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVT
eXN0ZW0uY3BwOgorICAgICAgICBVc2UgbW9yZSBGaWxlU3lzdGVtIGZ1bmN0aW9uYWxpdHkgdG8g
c2hhcmUgY29kZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwOgorICAgICAgICBVc2UgT3B0aW9uYWw8VmVj
dG9yPiBmb3IgbV9idWZmZXIgc2luY2Ugd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGlzRW1wdHkg
YW5kIGlzTnVsbC4KKwogMjAyMC0wMi0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxheWVyIGZsdXNoIiB0ZXJtaW5vbG9neSB0
byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggOTFkZjNiODBhMzZhNjczMWNiNmY4ZDNkYjM5OTQ4MmY4
Y2IwMTViNS4uZTQ0MjM0YzVlNjc4NmFkYmYxNjNmZDRkYzRhOTE2ZGE2YjNiYmZmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQ1
NCw4ICs0NTQsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW4KICAgICBhdXRvIGlzTmV3RW50
cnkgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVm
YXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0gewogICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVS
b290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9KS5p
c05ld0VudHJ5OwotICAgIGlmIChpc05ld0VudHJ5KQorICAgIGlmIChpc05ld0VudHJ5KSB7CiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQYXRo
SGFuZGxlKTsKKyAgICAgICAgaWYgKCFjYWNoZVJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3Jr
UHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgY2FjaGVSb290UGF0aCkpOworICAgIH0KIH0KIAog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVhYTkwNWFiNjhhYzll
YWYxZDExOWIwMTc4NGZhNjE2MGEyOGVmYy4uNTNjZTQ5Y2YzN2U4MWYxYjU0Y2MyZGI3NTllMjhh
MGI5MmRjYzgxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRl
IDxmY250bC5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5o
PgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiAhT1MoV0lORE9XUykKICNpbmNs
dWRlIDxzeXMvbW1hbi5oPgpAQCAtMzksMjYgKzM4LDI0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCiBEYXRhIERhdGE6
Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7Ci0gICAgaW50IGZkID0gb3Bl
bihGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBPX0NS
RUFUIHwgT19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgIGlmIChmZCA8
IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoZnRydW5jYXRlKGZkLCBtX3NpemUp
IDwgMCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgY29uc3RleHByIGJvb2wgZmFpbElmRmls
ZUV4aXN0cyA9IHRydWU7CisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShw
YXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6Rmls
ZUFjY2Vzc1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlzdHMpOworICAgIGlmICghRmls
ZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChoYW5kbGUpIHx8ICFGaWxlU3lzdGVtOjp0cnVuY2F0ZUZp
bGUoaGFuZGxlLCBtX3NpemUpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5k
bGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBGaWxlU3lzdGVtOjpt
YWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKTsKLQotICAgIHZvaWQqIG1hcCA9IG1t
YXAobnVsbHB0ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBm
ZCwgMCk7Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsK
KyAgICBib29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVk
RmlsZShoYW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlLCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCisgICAgdm9pZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFwcGVk
RmlsZS5kYXRhKCkpOwogICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obWFwKTsKICAgICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXpl
X3QgYnl0ZXNTaXplKSB7CiAgICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXpl
KTsKQEAgLTY2LDUyICs2MywyMyBAQCBEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCisjaWYgT1MoV0lO
RE9XUykKKyAgICBEV09SRCBvbGRQcm90ZWN0aW9uOworICAgIFZpcnR1YWxQcm90ZWN0KG1hcCwg
bV9zaXplLCBGSUxFX01BUF9SRUFELCAmb2xkUHJvdGVjdGlvbik7CisgICAgRmx1c2hWaWV3T2ZG
aWxlKG1hcCwgbV9zaXplKTsKKyNlbHNlCiAgICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lv
bi4KICAgICBtcHJvdGVjdChtYXAsIG1fc2l6ZSwgUFJPVF9SRUFEKTsKIAogICAgIC8vIEZsdXNo
IChhc3luY2hyb25vdXNseSkgdG8gZmlsZSwgdHVybmluZyB0aGlzIGludG8gY2xlYW4gbWVtb3J5
LgogICAgIG1zeW5jKG1hcCwgbV9zaXplLCBNU19BU1lOQyk7Ci0KLSAgICByZXR1cm4gRGF0YTo6
YWRvcHRNYXAobWFwLCBtX3NpemUsIGZkKTsKLX0KLSNlbHNlCi1EYXRhIERhdGE6Om1hcFRvRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0Ci17Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3Rl
bTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAg
aWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQotICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmIChGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihkYXRhKCkpLCBzaXplKCkpIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gRGF0YShWZWN0b3I8dWludDhfdD4obV9idWZmZXIpKTsKLX0KICNlbmRpZgog
Ci0jaWYgIU9TKFdJTkRPV1MpCi1EYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKLXsKLSAg
ICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAgICBpZiAoZmQgPCAwKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0KGZk
LCAmc3RhdCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7Ci0gICAgaWYgKCFzaXplKSB7
Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgMCwgc2l6ZSk7CisgICAgcmV0dXJu
IERhdGE6OmFkb3B0TWFwKFdURk1vdmUobWFwcGVkRmlsZSksIGhhbmRsZSk7CiB9Ci0jZW5kaWYK
IAotRGF0YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK0RhdGEgbWFwRmlsZShjb25zdCBj
aGFyKiBwYXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIHJldHVybiBtYXBGaWxlKEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotI2Vsc2UKICAg
ICBhdXRvIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxl
T3Blbk1vZGU6OlJlYWQpOwogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxl
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExOSwzMSArODcsMjggQEAgRGF0YSBtYXBGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGZp
bGUsIHNpemUpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBhZG9wdEFuZE1hcEZp
bGUoZmlsZSwgMCwgc2l6ZSk7Ci0jZW5kaWYKIH0KIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBh
ZG9wdEFuZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK0RhdGEg
bWFwRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1hcEZpbGUoRmlsZVN5
c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Cit9CisKK0RhdGEg
YWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIHNp
emVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQogewogICAgIGlmICghc2l6ZSkgewotICAgICAgICBj
bG9zZShmZCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAg
ICByZXR1cm4gRGF0YTo6ZW1wdHkoKTsKICAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51
bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwotICAgIGlm
IChtYXAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNj
ZXNzOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBG
aWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2Rl
OjpQcml2YXRlLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmlsZVN5
c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0g
ICAgcmV0dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworICAgIHJldHVybiBEYXRh
OjphZG9wdE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2Vsc2UKLURhdGEg
YWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gRGF0YShmaWxlLCBvZmZzZXQs
IHNpemUpOwotfQotI2VuZGlmCiAKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRh
JiBkYXRhLCBjb25zdCBTYWx0JiBzYWx0KQogewpAQCAtMTc5LDQwICsxNDQsMjUgQEAgc3RhdGlj
IFNhbHQgbWFrZVNhbHQoKQogCiBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBT
dHJpbmcmIHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgYXV0byBjcGF0aCA9IEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBhdXRvIGZkID0gb3Bl
bihjcGF0aC5kYXRhKCksIE9fUkRPTkxZLCAwKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBi
eXRlc1JlYWQgPSByZWFkKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGNsb3Nl
KGZkKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6
ZSgpKSkgewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKLQotICAgICAgICB1bmxpbmsoY3Bh
dGguZGF0YSgpKTsKLSAgICAgICAgZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19XUk9OTFkgfCBP
X0NSRUFUIHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgICAgICBib29sIHN1Y2Nl
c3MgPSB3cml0ZShmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKSA9PSBzdGF0aWNfY2FzdDxz
c2l6ZV90PihzYWx0LnNpemUoKSk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhbHQ7
Ci0jZWxzZQotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0
ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOwotICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShmaWxlKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQuc2l6ZSgpKSB7Ci0gICAgICAg
IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGlmIChmaWxlRXhpc3RzKHBhdGgpKSB7CisgICAgICAg
IGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCk7CisgICAgICAgIFNhbHQgc2FsdDsKKyAgICAgICAgYXV0byBieXRlc1Jl
YWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oc2FsdC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShmaWxlKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSBzYWx0LnNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzYWx0OwogCiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUocGF0
aCk7Ci0gICAgICAgIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVt
OjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5c3Rl
bTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkp
LCBzYWx0LnNpemUoKSkgPT0gc2FsdC5zaXplKCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShmaWxlKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGF1dG8gZmlsZSA9
IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3Jp
dGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBib29sIHN1
Y2Nlc3MgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNo
YXIqPihzYWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKKyAgICBGaWxl
U3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1
cm4geyB9OworCiAgICAgcmV0dXJuIHNhbHQ7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
TmV0d29ya0NhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YS5oCmluZGV4IGQ3OGQ5OGI2MTc1MGQ3OTE3YmM5ODA1M2JkOWU3
YzljYWRhYjg3NDIuLjM3YjU5NjY1NmE1ZDEzNTJkNzJjOTM2ZWUxOTMxZmQ5MGYyNjE5ZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGF0YS5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNv
dXAuaD4KICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFNoYXJlZE1lbW9yeTsKQEAgLTUzLDE5ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgfkRhdGEo
KSB7IH0KIAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAg
c3RhdGljIERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGludCBmZCk7Ci0jZW5kaWYK
KyAgICBzdGF0aWMgRGF0YSBhZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmLCBG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBEYXRhKE9TT2JqZWN0
UHRyPGRpc3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5k
aWYKICNpZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50IGZk
ID0gLTEpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBEYXRhKFZlY3Rvcjx1aW50
OF90PiYmKTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgRmlsZVN5
c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBEYXRhKFZhcmlhbnQ8VmVjdG9yPHVp
bnQ4X3Q+LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJik7CiAjZW5kaWYKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3Np
emU7IH0KQEAgLTk0LDEwICs5NiwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVAp
CiAgICAgbXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVyOwotICAgIGludCBtX2Zp
bGVEZXNjcmlwdG9yIHsgLTEgfTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
bV9maWxlRGVzY3JpcHRvciB7IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUg
fTsKICNlbmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVy
OworI2lmIFVTRShDVVJMKQorICAgIEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGE+PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUgY29u
c3QgdWludDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07
CkBAIC0xMDYsMTcgKzEwOCw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3Qg
RGF0YSYsIGNvbnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiwgY29uc3Qg
RGF0YSYpOwotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50LCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgot
I2lmIFVTRShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0Zp
bGVJT1N0cmVhbSosIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiAhT1MoV0lO
RE9XUykKIERhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNlbmRpZgogRGF0YSBtYXBG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDg+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4NzAwODc5NDQzZDY2OWYz
YjI5YTAzYjI4ZWFhZjY1MjJiLi5jYjRhYzM4YzZhNTI4MjQ1ZDE1MWRiYWY3MTVhNWFhOTU1ZjI5
ZjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDEzIEBAIERhdGEgY29u
Y2F0ZW5hdGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9w
dE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBi
LmRpc3BhdGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAs
IHNpemVfdCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxl
IGZkKQogeworICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCog
bWFwID0gbWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNT
RVJUKG1hcCAhPSBNQVBfRkFJTEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGZkKTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNo
X2RhdGFfY3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRD
SF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAgICBtdW5t
YXAobWFwLCBzaXplKTsKICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNmNDMx
NTZjNWEwM2ZjMzFmNTg2NWU3MzE2MjRjODgxZjU4MGFiMTguLjE5MjQ4MmJmOWY0MzRkYzE5OWQz
N2FkNDExODI5NGFlMTlkYzY2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCkBAIC0zMCw0MCAr
MzAsNDIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAog
RGF0YTo6RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fYnVm
ZmVyKEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGE+Pjo6Y3JlYXRlKFZlY3Rvcjx1aW50OF90PihzaXplKSkpCisgICAgLCBtX3NpemUoc2l6ZSkK
IHsKLSAgICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBt
ZW1jcHkobV9idWZmZXIuZGF0YSgpLCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkoV1RGOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PigqbV9idWZmZXIpLmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAKLURh
dGE6OkRhdGEoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBzaXplKQorRGF0YTo6RGF0YShWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+JiYgZGF0YSkKKyAgICA6IG1fYnVmZmVyKEJveDxWYXJp
YW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3JlYXRl
KFdURk1vdmUoZGF0YSkpKQorICAgICwgbV9pc01hcChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhPigqbV9idWZmZXIpKQogewotICAgIG1fYnVmZmVyLnJl
c2l6ZShzaXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxl
KGZpbGUsIG9mZnNldCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7Ci0g
ICAgRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1fYnVmZmVyLmRhdGEoKSksIHNpemUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxl
KTsKLX0KLQotRGF0YTo6RGF0YShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCi0gICAgOiBtX2J1
ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCi17Ci0gICAgbV9zaXplID0gbV9idWZmZXIuc2l6ZSgpOwor
ICAgIG1fc2l6ZSA9IFdURjo6c3dpdGNoT24oKm1fYnVmZmVyLAorICAgICAgICBbXShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikgLT4gc2l6ZV90IHsgcmV0dXJuIGJ1ZmZlci5zaXplKCk7
IH0sCisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBwZWRG
aWxlKSAtPiBzaXplX3QgeyByZXR1cm4gbWFwcGVkRmlsZS5zaXplKCk7IH0KKyAgICApOwogfQog
CiBEYXRhIERhdGE6OmVtcHR5KCkKIHsKLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rvcjx1aW50
OF90PiBidWZmZXI7CisgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpIH07CiB9CiAKIGNvbnN0
IHVpbnQ4X3QqIERhdGE6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5kYXRh
KCk7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBidWZmZXIuZGF0YSgp
OyB9LAorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFwcGVk
RmlsZSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsgfQorICAgICk7CiB9CiAKIGJvb2wgRGF0YTo6aXNOdWxs
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOworICAgIHJldHVybiAh
bV9idWZmZXI7CiB9CiAKIGJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChjb25z
dCB1aW50OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CkBAIC03MSwyMSArNzMsMzcgQEAg
Ym9vbCBEYXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpPiYgYXBwbGllcikgY29uc3QKICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtX2J1ZmZlci5kYXRhKCkpLCBtX2J1ZmZlci5zaXplKCkpOworICAgIHJldHVybiBhcHBs
aWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSk7CiB9
CiAKIERhdGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHsgbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CisgICAg
aWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IGRhdGEo
KSArIG9mZnNldCwgc2l6ZSB9OwogfQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEs
IGNvbnN0IERhdGEmIGIpCiB7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBi
OworICAgIGlmIChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rvcjx1
aW50OF90PiBidWZmZXIoYS5zaXplKCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5k
YXRhKCksIGEuZGF0YSgpLCBhLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBh
LnNpemUoKSwgYi5kYXRhKCksIGIuc2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3ZlKGJ1
ZmZlcikpOwogfQogCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQorewor
ICAgIEFTU0VSVChtYXBwZWRGaWxlLmRhdGEoKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGZkKTsKKworICAgIHJldHVybiB7IFdURk1vdmUobWFwcGVkRmlsZSkgfTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKaW5kZXggNTE1YzA5ZWJiZmQzMzU0ZmQ5NTMzY2VlMWJkODkwMTczYmFhMWM3Yy4u
ZDNiNzllMDE0YTc5YTc0NmZjNmY1MTc0M2ZiY2I4YjJhNGMwMTc0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKQEAgLTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25l
d193aXRoX293bmVyKGNvcGllZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9
CiAKLURhdGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQorRGF0
YTo6RGF0YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2ZpbGVEZXNj
cmlwdG9yKGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKLSAg
ICAsIG1faXNNYXAobV9zaXplICYmIGZkICE9IC0xKQorICAgICwgbV9pc01hcChtX3NpemUgJiYg
RmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEy
IEBAIHN0cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewogICAgICAg
ICBtdW5tYXAobWFwLCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAg
ICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgIH0KIAogICAg
IHZvaWQqIG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQgZmlsZURlc2NyaXB0b3I7Cisg
ICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIAog
c3RhdGljIHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTIx
LDggKzEyMSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdy
YXBwZXIpCiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9p
ZCogbWFwLCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOworICAg
IHZvaWQqIG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIEFTU0VSVChtYXApOwog
ICAgIEFTU0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CiAgICAgTWFwV3JhcHBlciogd3JhcHBlciA9
IG5ldyBNYXBXcmFwcGVyIHsgbWFwLCBzaXplLCBmZCB9OwpAQCAtMTMwLDIxICsxMzIsMTQgQEAg
RGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAg
cmV0dXJuIHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0jaWYgVVNFKEdMSUIpICYmICFQ
TEFURk9STShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiBzdHJlYW0s
IHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJbnB1dFN0cmVhbSogaW5wdXRT
dHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKHN0cmVhbSkp
OwotICAgIGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVT
Q1JJUFRPUl9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUo
ZmQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0
YTo6dHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwg
IWlzTWFwKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFNoYXJlZE1l
bW9yeTo6d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVy
LT5sZW5ndGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fZmlsZURlc2Ny
aXB0b3IpKTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19G
SUxFX0RFU0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAgICByZXR1cm4gU2hhcmVkTWVt
b3J5Ojp3cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXIt
Pmxlbmd0aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzMDM4MDMwNWRjZjQ3M2E2NzI2ZDEyYjkz
OWQ5YjAuLjdhMGVjNWUxNGYzM2RlMDQyY2RmNDRiMGZiYTQyM2NjOWRkN2FmYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVGaWxlU3lzdGVtLmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMg
RGlyZWN0b3J5RW50cnlUeXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewot
ICAgIHN3aXRjaCAoZHR5cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERp
cmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICBy
ZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpG
aWxlOwotICAgIH0KLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2Vu
ZGlmCi0KIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBG
dW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rp
b24pCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0
ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGly
KQotICAgICAgICByZXR1cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVh
ZGRpcihkaXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRf
dHlwZSAhPSBEVF9SRUcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hh
ciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwg
IXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRv
IG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0
cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihu
YW1lU3RyaW5nLCBkaXJlY3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBj
bG9zZWRpcihkaXIpOwotI2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0
RGlyZWN0b3J5KHBhdGgpOworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJl
Y3RvcnkocGF0aCwgIioiX3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAg
ICAgICAgIGF1dG8gdHlwZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmls
ZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlU
eXBlOjpEaXJlY3RvcnkgOiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0
aW9uKGVudHJ5LCB0eXBlKTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZp
bGVOYW1lKGVudHJ5KSwgdHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGly
ZWN0b3J5UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMzYzlhMGNiZTdlMWVlYjFkYjA3NzNh
MjMyN2JmNTUxNWIwMGQ5MTQuLmM2NGVlOTY1YTVmOTc4NjEyOGE3OTc5NzlmMDc4MDEwZjExNmI3
NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAyMC0wMi0yMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRA
c29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBi
eSB1c2luZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81OTQ2NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAg
ICAgIEFkZCB0ZXN0IGZvciBGaWxlU3lzdGVtOjpjcmVhdGVGaWxlCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKwogMjAyMC0wMi0xOCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZyb20gImxh
eWVyIGZsdXNoIiB0ZXJtaW5vbG9neSB0byAicmVuZGVyaW5nIHVwZGF0ZSIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKaW5kZXggZDBlNTE1MWE5OTkyOWE4
MzcyNzM0OTM3NTNhNTgwZWJmMzJkMzhmNy4uNzZjYWYyYWQ0MzcyNjYzZDJiZTMxMWJjZmI2M2Ew
NGQwYzBkMDFmNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmls
ZVN5c3RlbS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3Rl
bS5jcHAKQEAgLTE0NSw0ICsxNDUsMTAgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBVbmljb2Rl
RGlyZWN0b3J5TmFtZSkKICAgICBFWFBFQ1RfVFJVRShleHBlY3RlZERpcmVjdG9yeU5hbWUgPT0g
ZGlyZWN0b3J5TmFtZSk7CiB9CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgb3BlbkV4aXN0aW5n
RmlsZUFuZEZhaWxJZkZpbGVFeGlzdHMpCit7CisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVt
OjpvcGVuRmlsZSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwsIHRydWUpOworICAg
IEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGhhbmRsZSkpOworfQorCiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391776</attachid>
            <date>2020-02-26 13:57:59 -0800</date>
            <delta_ts>2020-02-26 14:41:45 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-197684-20200226135758.patch</filename>
            <type>text/plain</type>
            <size>38341</size>
            <attacher name="Christopher Reid">chris.reid</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY5MWE1YjcwOWVlZWQyOWEwMDNlMDAx
OThhZjMwMTEwZGU4MDljOTAuLjI0NzI3NmUxNjg2NzYxNTY2MzAwMGVkNDRlMzhjZjNmMDQ4OTI2
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjAtMDItMTggIENocmlzdG9waGVyIFJlaWQgIDxj
aHJpcy5yZWlkQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBOZXR3b3JrQ2Fj
aGU6OkRhdGEgYnkgdXNpbmcgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTk0NjczOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVr
aS4KKworICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKiB3dGYvRmlsZVN5
c3RlbS5oOgorICAgICAgICBBZGRlZCBGaWxlQWNjZXNzUGVybWlzc2lvbiBmbGFnIHdoZW4gb3Bl
bmluZyBmaWxlcy4KKyAgICAgICAgUmVtb3ZlIGRlZmF1bHQgYXJndW1lbnQgZm9yIHRoZSBsaXN0
RGlyZWN0b3J5IGZpbHRlciBzaW5jZSB0aGUgZGVmYXV0CisgICAgICAgIFN0cmluZygpIGZpbHRl
ciBkb2Vzbid0IG1hdGNoIGFsbCBmaWxlcyBvbiBNYWMgYW5kIFdpbmRvd3MuCisKKyAgICAgICAg
QWRkZWQgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGUgdG8gYmUgdXNlZCB3aXRoIFJlYWRXcml0ZSBN
YXBwZWRGaWxlRGF0YS4KKyAgICAgICAgQWRkZWQgZmFpbElmRmlsZUV4aXN0cyBmbGFnIHRvIG9w
ZW5GaWxlLgorCisgICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAg
ICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICBBZGRlZCAoU19JUlVT
UiB8IFNfSVdVU1IpIGZpbGUgb3BlbiBtb2Rlcy4KKworICAgICAgICAqIHd0Zi93aW4vRmlsZVN5
c3RlbVdpbi5jcHA6CisgICAgICAgIEltcGxlbWVudCBnZXRWb2x1bWVGcmVlU3BhY2Ugc2luY2Ug
c29tZSBvZiB0aGUgdGVzdHMgdXNlIGl0IHdoZW4gdG9nZ2xpbmcgY2FjaGUuCisgICAgICAgIAor
ICAgICAgICAqIHd0Zi93aW4vUGF0aFdhbGtlci5jcHA6CisKIDIwMjAtMDItMjUgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIEVuYWJsZSBC
QUNLVFJBQ0VfU1lNQk9MUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlM2ZhMDU1YWJjN2QxZjU3NWZkZjU5YTYwNjY2
NTliYThmY2E0NTM1Li45YTJiNWNiOWFjZmQ2ZDVhNTk1NTc5MGNiNDgxZjAwYzcyZDVjMzIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTAyLTE4ICBDaHJpc3RvcGhlciBSZWlkICA8
Y2hyaXMucmVpZEBzb255LmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgTmV0d29ya0Nh
Y2hlOjpEYXRhIGJ5IHVzaW5nIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2ODQKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU5NDY3Mzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1
a2kuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAg
ICAgIEVuc3VyZSB0aGF0IHRoZSBDYWNoZVN0b3JhZ2UgZGlyZWN0b3J5IGlzIGFjdHVhbGx5IGJl
aW5nIGNyZWF0ZWQuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVE
YXRhLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUNv
Y29hLm1tOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFT
b3VwLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtLmNwcDoKKyAgICAgICAgVXNlIG1vcmUgRmlsZVN5c3RlbSBmdW5jdGlvbmFsaXR5IHRv
IHNoYXJlIGNvZGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcDoKKyAgICAgICAgVXNlIE9wdGlvbmFsPFZl
Y3Rvcj4gZm9yIG1fYnVmZmVyIHNpbmNlIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBpc0VtcHR5
IGFuZCBpc051bGwuCisKIDIwMjAtMDItMjUgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhIGJ1aWxkIGZpeCBhZnRlciByMjU3MjY5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uY3BwCmluZGV4IDcyZjk1M2VhYjNmYzk4ODQyZTEzMjgzZDU1NzJkOTk2NTll
ZjEwZWUuLjg0ODUyMWUyNzI2NThmODhhYmVkN2VkOWEzZjFmMWY2YmI3OWNiN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uY3BwCkBAIC0yODcsMTcgKzI4NywxNyBAQCBNYXBwZWRGaWxlRGF0YTo6fk1hcHBl
ZEZpbGVEYXRhKCkKICAgICB1bm1hcFZpZXdPZkZpbGUobV9maWxlRGF0YSwgbV9maWxlU2l6ZSk7
CiB9CiAKLSNpZiBIQVZFKE1NQVApCi0KLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoLCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNz
KQorTWFwcGVkRmlsZURhdGE6Ok1hcHBlZEZpbGVEYXRhKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgs
IE1hcHBlZEZpbGVNb2RlIG1hcE1vZGUsIGJvb2wmIHN1Y2Nlc3MpCiB7Ci0gICAgYXV0byBmZCA9
IG9wZW5GaWxlKGZpbGVQYXRoLCBGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgIGF1dG8gZmQgPSBv
cGVuRmlsZShmaWxlUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKIAotICAg
IHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZkLCBtb2RlKTsKKyAgICBzdWNjZXNzID0gbWFwRmls
ZUhhbmRsZShmZCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCBtYXBNb2RlKTsKICAg
ICBjbG9zZUZpbGUoZmQpOwogfQogCi1ib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxl
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZGUpCisjaWYgSEFW
RShNTUFQKQorCitib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIEZpbGVPcGVuTW9kZSBvcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUgbWFw
TW9kZSkKIHsKICAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzI0LDcgKzMyNCwyNCBAQCBib29sIE1hcHBlZEZpbGVEYXRhOjptYXBGaWxl
SGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIE1hcHBlZEZpbGVNb2RlIG1vZAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXpl
LCBQUk9UX1JFQUQsIE1BUF9GSUxFIHwgKG1vZGUgPT0gTWFwcGVkRmlsZU1vZGU6OlNoYXJlZCA/
IE1BUF9TSEFSRUQgOiBNQVBfUFJJVkFURSksIGZkLCAwKTsKKyAgICBpbnQgcGFnZVByb3RlY3Rp
b24gPSBQUk9UX1JFQUQ7CisgICAgc3dpdGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9w
ZW5Nb2RlOjpSZWFkOgorICAgICAgICBwYWdlUHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OldyaXRlOgorICAgICAgICBwYWdlUHJv
dGVjdGlvbiA9IFBST1RfV1JJVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5N
b2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUFJPVF9SRUFEIHwgUFJP
VF9XUklURTsKKyAgICAgICAgYnJlYWs7CisjaWYgT1MoREFSV0lOKQorICAgIGNhc2UgRmlsZU9w
ZW5Nb2RlOjpFdmVudHNPbmx5OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIHZvaWQqIGRhdGEgPSBtbWFwKDAsIHNpemUsIHBhZ2VQcm90ZWN0aW9u
LCBNQVBfRklMRSB8IChtYXBNb2RlID09IE1hcHBlZEZpbGVNb2RlOjpTaGFyZWQgPyBNQVBfU0hB
UkVEIDogTUFQX1BSSVZBVEUpLCBmZCwgMCk7CiAKICAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVE
KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zp
bGVTeXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA4MDVhMGU0YjE2
ZmNiZjI3N2Q0MDQ3MDVkMWJmOGZiODkyNDA1Y2M5Li5lOTU1ODY2N2RiNzJiNDkwMjA4MWRlM2Rj
OTZmMGU2MjZhYTFlNzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgK
KysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCkBAIC03OSwxMSArNzksMTcgQEAgY29u
c3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSAtMTsKIGVu
dW0gY2xhc3MgRmlsZU9wZW5Nb2RlIHsKICAgICBSZWFkLAogICAgIFdyaXRlLAorICAgIFJlYWRX
cml0ZSwKICNpZiBPUyhEQVJXSU4pCiAgICAgRXZlbnRzT25seSwKICNlbmRpZgogfTsKIAorZW51
bSBjbGFzcyBGaWxlQWNjZXNzUGVybWlzc2lvbiA6IGJvb2wgeworICAgIFVzZXIsCisgICAgQWxs
Cit9OworCiBlbnVtIGNsYXNzIEZpbGVTZWVrT3JpZ2luIHsKICAgICBCZWdpbm5pbmcsCiAgICAg
Q3VycmVudCwKQEAgLTEzMSw3ICsxMzcsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRN
ZXRhZGF0YVVSTChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgdXJsU3RyaQogYm9v
bCBjYW5FeGNsdWRlRnJvbUJhY2t1cCgpOyAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGZpbGUgY2Fu
IGV2ZXIgYmUgZXhjbHVkZWQgZnJvbSBiYWNrdXAuCiBib29sIGV4Y2x1ZGVGcm9tQmFja3VwKGNv
bnN0IFN0cmluZyYpOyAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bC4KIAotV1RGX0VYUE9S
VF9QUklWQVRFIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGZpbHRlciA9IFN0cmluZygpKTsKK1dURl9FWFBPUlRfUFJJVkFURSBW
ZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBmaWx0ZXIpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJik7CiBTdHJpbmcgc3RyaW5nRnJvbUZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKik7CkBAIC0xNDAsNyArMTQ2LDcgQEAgaW5saW5lIGJv
b2wgaXNIYW5kbGVWYWxpZChjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkgeyByZXR1
cm4gaGFuZGxlICE9IGkKIAogLy8gUHJlZml4IGlzIHdoYXQgdGhlIGZpbGVuYW1lIHNob3VsZCBi
ZSBwcmVmaXhlZCB3aXRoLCBub3QgdGhlIGZ1bGwgcGF0aC4KIFdURl9FWFBPUlRfUFJJVkFURSBT
dHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmls
ZUhhbmRsZSYpOwotV1RGX0VYUE9SVF9QUklWQVRFIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiA9IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwsIGJv
b2wgZmFpbElmRmlsZUV4aXN0cyA9IGZhbHNlKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIC8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBv
ZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGlmIHN1Y2Nlc3NmdWwsIC0xIG90
aGVyd2lzZS4KIFdURl9FWFBPUlRfUFJJVkFURSBsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbik7CkBAIC0yMDYsNiAr
MjEyLDcgQEAgcHVibGljOgogICAgIE1hcHBlZEZpbGVEYXRhKE1hcHBlZEZpbGVEYXRhJiYpOwog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoLCBNYXBwZWRGaWxlTW9kZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIE1hcHBlZEZpbGVEYXRhKFBsYXRmb3JtRmlsZUhhbmRsZSwgTWFwcGVkRmlsZU1vZGUsIGJv
b2wmIHN1Y2Nlc3MpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNYXBwZWRGaWxlRGF0YShQbGF0
Zm9ybUZpbGVIYW5kbGUsIEZpbGVPcGVuTW9kZSwgTWFwcGVkRmlsZU1vZGUsIGJvb2wmIHN1Y2Nl
c3MpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+TWFwcGVkRmlsZURhdGEoKTsKICAgICBNYXBw
ZWRGaWxlRGF0YSYgb3BlcmF0b3I9KE1hcHBlZEZpbGVEYXRhJiYpOwogCkBAIC0yMTYsMTUgKzIy
MywyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCogbGVha0hhbmRsZSgpIHsgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV9maWxlRGF0YSwgbnVsbHB0cik7IH0KIAogcHJpdmF0ZToKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgYm9vbCBtYXBGaWxlSGFuZGxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgTWFwcGVkRmls
ZU1vZGUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG1hcEZpbGVIYW5kbGUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBGaWxlT3Blbk1vZGUsIE1hcHBlZEZpbGVNb2RlKTsKIAogICAgIHZvaWQq
IG1fZmlsZURhdGEgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9maWxlU2l6ZSB7IDAgfTsK
IH07CiAKLWlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgTWFwcGVkRmlsZU1vZGUgbW9kZSwgYm9vbCYgc3VjY2VzcykKK2lubGlu
ZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgTWFwcGVkRmlsZU1vZGUgbWFwTW9kZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBzdWNjZXNz
ID0gbWFwRmlsZUhhbmRsZShoYW5kbGUsIEZpbGVPcGVuTW9kZTo6UmVhZCwgbWFwTW9kZSk7Cit9
CisKK2lubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSwgRmlsZU9wZW5Nb2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSBtYXBNb2Rl
LCBib29sJiBzdWNjZXNzKQogewotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGhhbmRsZSwg
bW9kZSk7CisgICAgc3VjY2VzcyA9IG1hcEZpbGVIYW5kbGUoaGFuZGxlLCBvcGVuTW9kZSwgbWFw
TW9kZSk7CiB9CiAKIGlubGluZSBNYXBwZWRGaWxlRGF0YTo6TWFwcGVkRmlsZURhdGEoTWFwcGVk
RmlsZURhdGEmJiBvdGhlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5
c3RlbUdsaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKaW5k
ZXggODZjMDRmOWQ1ZTEzNDBkOWI0Zjk3ZjBkN2Y3OTAwZTI4YjMzMTdkMi4uZTRhYjAwZmJkYWQ5
ZmZiNzFiNTAyMmNjZWM0MWMxMGI1Y2EwZjVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHAKQEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUo
Y29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKIH0KIAotUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQ
bGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1v
ZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbiwgYm9vbCBmYWlsSWZGaWxl
RXhpc3RzKQogewogICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7CiAgICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKQEAgLTM0Niwx
MyArMzQ2LDIwIEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogCiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lLmRhdGEoKSkpOwogICAgIEdSZWZQdHI8
R0ZpbGVJT1N0cmVhbT4gaW9TdHJlYW07CisgICAgR0ZpbGVDcmVhdGVGbGFncyBwZXJtaXNzaW9u
RmxhZyA9IChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpBbGwpID8gR19GSUxF
X0NSRUFURV9OT05FIDogR19GSUxFX0NSRUFURV9QUklWQVRFOworCisgICAgaWYgKGZhaWxJZkZp
bGVFeGlzdHMpIHsKKyAgICAgICAgaW9TdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZV9y
ZWFkd3JpdGUoZmlsZS5nZXQoKSwgcGVybWlzc2lvbkZsYWcsIG51bGxwdHIsIG51bGxwdHIpKTsK
KyAgICAgICAgcmV0dXJuIGlvU3RyZWFtLmxlYWtSZWYoKTsKKyAgICB9CisKICAgICBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCiAgICAgICAgIGlvU3RyZWFtID0gYWRvcHRHUmVmKGdf
ZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAg
ZWxzZSBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlKSB7CisgICAgZWxzZSBpZiAobW9k
ZSA9PSBGaWxlT3Blbk1vZGU6OldyaXRlIHx8IG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpSZWFkV3Jp
dGUpIHsKICAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFS
KSkpCiAgICAgICAgICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfb3Blbl9yZWFkd3Jp
dGUoZmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBpb1N0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdl
dCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgICAg
IGlvU3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCks
IHBlcm1pc3Npb25GbGFnLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgfQogCiAgICAgcmV0dXJu
IGlvU3RyZWFtLmxlYWtSZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0Zp
bGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVgu
Y3BwCmluZGV4IDI3ODM5ODgzYTFhMmQ2NTQxMzBmZDY4NWZlYWZhMDJhOWM0ODY0ZmMuLmM5ZjUw
MTQzNmFiY2M4MDk0ZTg0MTQ4MGQyMWZlMzZhNDcxZTgxZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvcG9z
aXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNzksNyArNzksNyBAQCBib29sIGRlbGV0ZUZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiB1bmxpbmtlZDsKIH0KIAotUGxhdGZvcm1G
aWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUp
CitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbiwgYm9vbCBmYWlsSWZG
aWxlRXhpc3RzKQogewogICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7CiAKQEAgLTg3LDE2ICs4NywzMyBAQCBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKICAgICAgICAgcmV0dXJu
IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CiAKICAgICBpbnQgcGxhdGZvcm1GbGFnID0gMDsK
LSAgICBpZiAobW9kZSA9PSBGaWxlT3Blbk1vZGU6OlJlYWQpCisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWQ6CiAgICAgICAgIHBsYXRmb3JtRmxhZyB8PSBP
X1JET05MWTsKLSAgICBlbHNlIGlmIChtb2RlID09IEZpbGVPcGVuTW9kZTo6V3JpdGUpCisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpXcml0ZToKICAgICAgICAgcGxhdGZv
cm1GbGFnIHw9IChPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGxhdGZvcm1GbGFn
IHw9IChPX1JEV1IgfCBPX0NSRUFUKTsKKyAgICAgICAgYnJlYWs7CiAjaWYgT1MoREFSV0lOKQot
ICAgIGVsc2UgaWYgKG1vZGUgPT0gRmlsZU9wZW5Nb2RlOjpFdmVudHNPbmx5KQorICAgIGNhc2Ug
RmlsZU9wZW5Nb2RlOjpFdmVudHNPbmx5OgogICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gT19FVlRP
TkxZOworICAgICAgICBicmVhazsKICNlbmRpZgorICAgIH0KKworICAgIGlmIChmYWlsSWZGaWxl
RXhpc3RzKQorICAgICAgICBwbGF0Zm9ybUZsYWcgfD0gKE9fQ1JFQVQgfCBPX0VYQ0wpOworCisg
ICAgaW50IHBlcm1pc3Npb25GbGFnID0gMDsKKyAgICBpZiAocGVybWlzc2lvbiA9PSBGaWxlQWNj
ZXNzUGVybWlzc2lvbjo6VXNlcikKKyAgICAgICAgcGVybWlzc2lvbkZsYWcgfD0gKFNfSVJVU1Ig
fCBTX0lXVVNSKTsKKyAgICBlbHNlIGlmIChwZXJtaXNzaW9uID09IEZpbGVBY2Nlc3NQZXJtaXNz
aW9uOjpBbGwpCisgICAgICAgIHBlcm1pc3Npb25GbGFnIHw9IChTX0lSVVNSIHwgU19JV1VTUiB8
IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgpOwogCi0gICAgcmV0dXJuIG9w
ZW4oZnNSZXAuZGF0YSgpLCBwbGF0Zm9ybUZsYWcsIDA2NjYpOworICAgIHJldHVybiBvcGVuKGZz
UmVwLmRhdGEoKSwgcGxhdGZvcm1GbGFnLCBwZXJtaXNzaW9uRmxhZyk7CiB9CiAKIHZvaWQgY2xv
c2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCmluZGV4IDkzMzRhYzAyOWQ1N2MzMzY1ZjQ1NjI4NmRkMzhhYWJmMGQ0ZmE1ZjQu
LjdiMmExZjhjZjlkMDg1NWJhNjEwYjJhNWRiNWNkNmQ3ZGU2MjE0ZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93
aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTQyMSw3ICs0MjEsNyBAQCBTdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiAgICAg
cmV0dXJuIHByb3Bvc2VkUGF0aDsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUg
b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFjY2Vz
c1Blcm1pc3Npb24sIGJvb2wgZmFpbElmRmlsZUV4aXN0cykKIHsKICAgICBEV09SRCBkZXNpcmVk
QWNjZXNzID0gMDsKICAgICBEV09SRCBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gMDsKQEAgLTQzNiwx
MCArNDM2LDE1IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgICAgICBkZXNpcmVkQWNjZXNzID0gR0VORVJJQ19X
UklURTsKICAgICAgICAgY3JlYXRpb25EaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CiAgICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIGRlc2lyZWRBY2Nlc3Mg
PSBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFOworICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0
aW9uID0gT1BFTl9BTFdBWVM7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGlmIChmYWls
SWZGaWxlRXhpc3RzKQorICAgICAgICBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gQ1JFQVRFX05FVzsK
KwogICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IHBhdGg7CiAgICAgcmV0dXJuIENyZWF0ZUZpbGUo
ZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRlc2lyZWRBY2Nlc3MsIHNoYXJl
TW9kZSwgMCwgY3JlYXRpb25EaXNwb3NpdGlvbiwgRklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsK
IH0KQEAgLTU0OSw5ICs1NTQsMTQgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVu
dHJpZXM7CiB9CiAKLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVpbnQ2
NF90JikKK2Jvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0
X3QmIGZyZWVTcGFjZSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgVUxBUkdFX0lOVEVHRVIg
ZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7CisgICAgaWYgKCFHZXREaXNrRnJlZVNwYWNlRXhX
KHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxl
ciwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZyZWVT
cGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0OworICAgIHJldHVybiB0
cnVlOwogfQogCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0cmlu
ZyYgZnNGaWxlKQpAQCAtNjAzLDE1ICs2MTMsNyBAQCBib29sIHVubWFwVmlld09mRmlsZSh2b2lk
KiBidWZmZXIsIHNpemVfdCkKICAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGJ1ZmZlcik7CiB9
CiAKLU1hcHBlZEZpbGVEYXRhOjpNYXBwZWRGaWxlRGF0YShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBNYXBwZWRGaWxlTW9kZSBtb2RlLCBib29sJiBzdWNjZXNzKQotewotICAgIGF1dG8gZmlsZSA9
IENyZWF0ZUZpbGUoZmlsZVBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIEdFTkVSSUNfUkVB
RCwgMCwgbnVsbHB0ciwgT1BFTl9FWElTVElORywgRklMRV9BVFRSSUJVVEVfTk9STUFMLCBudWxs
cHRyKTsKLQotICAgIHN1Y2Nlc3MgPSBtYXBGaWxlSGFuZGxlKGZpbGUsIG1vZGUpOwotICAgIGNs
b3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBNYXBwZWRGaWxlTW9kZSkKK2Jvb2wgTWFwcGVkRmls
ZURhdGE6Om1hcEZpbGVIYW5kbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgRmlsZU9wZW5N
b2RlIG9wZW5Nb2RlLCBNYXBwZWRGaWxlTW9kZSkKIHsKICAgICBpZiAoIWlzSGFuZGxlVmFsaWQo
aGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjI1LDExICs2MjcsMjggQEAgYm9v
bCBNYXBwZWRGaWxlRGF0YTo6bWFwRmlsZUhhbmRsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBNYXBwZWRGaWxlTW9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYXV0
byBtYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBQQUdFX1JFQURP
TkxZLCAwLCAwLCBudWxscHRyKTsKKyAgICBEV09SRCBwYWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVB
RE9OTFk7CisgICAgRFdPUkQgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1JFQUQ7CisgICAgc3dp
dGNoIChvcGVuTW9kZSkgeworICAgIGNhc2UgRmlsZU9wZW5Nb2RlOjpSZWFkOgorICAgICAgICBw
YWdlUHJvdGVjdGlvbiA9IFBBR0VfUkVBRE9OTFk7CisgICAgICAgIGRlc2lyZWRBY2Nlc3MgPSBG
SUxFX01BUF9SRUFEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVPcGVuTW9kZTo6V3Jp
dGU6CisgICAgICAgIHBhZ2VQcm90ZWN0aW9uID0gUEFHRV9SRUFEV1JJVEU7CisgICAgICAgIGRl
c2lyZWRBY2Nlc3MgPSBGSUxFX01BUF9XUklURTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
aWxlT3Blbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAgcGFnZVByb3RlY3Rpb24gPSBQQUdFX1JF
QURXUklURTsKKyAgICAgICAgZGVzaXJlZEFjY2VzcyA9IEZJTEVfTUFQX1dSSVRFIHwgRklMRV9N
QVBfUkVBRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byBtYXBwaW5nID0gQ3Jl
YXRlRmlsZU1hcHBpbmcoaGFuZGxlLCBudWxscHRyLCBwYWdlUHJvdGVjdGlvbiwgMCwgMCwgbnVs
bHB0cik7CiAgICAgaWYgKCFtYXBwaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBt
X2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBGSUxFX01BUF9SRUFELCAwLCAwLCBz
aXplKTsKKyAgICBtX2ZpbGVEYXRhID0gTWFwVmlld09mRmlsZShtYXBwaW5nLCBkZXNpcmVkQWNj
ZXNzLCAwLCAwLCBzaXplKTsKICAgICBDbG9zZUhhbmRsZShtYXBwaW5nKTsKICAgICBpZiAoIW1f
ZmlsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9QYXRoV2Fsa2VyLmNw
cAppbmRleCA4ZDdkN2FjNjgzODU5ZWUzZTRkMWQwNGMzZWUwNmEyOWYwYmM3M2VhLi42ODhmZWRk
NTlmYThkNWRkMzU5ZDRjMDlhOTZmZTQ4NmQ1MzNiM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi93aW4vUGF0aFdhbGtlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL1BhdGhXYWxr
ZXIuY3BwCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBQYXRoV2Fsa2VyOjpQ
YXRoV2Fsa2VyKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIHBhdHRlcm4p
CiB7Ci0gICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnkgKyAiXFwiICsgcGF0dGVybjsKKyAgICBT
dHJpbmcgcGF0aCA9IG1ha2VTdHJpbmcoZGlyZWN0b3J5LCAnXFwnLCBwYXR0ZXJuKTsKICAgICBt
X2hhbmRsZSA9IDo6RmluZEZpcnN0RmlsZVcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwg
Jm1fZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKaW5kZXggNzk5MGFlY2Y3NzcwNGJiNDRjYjhkOGQ2N2U3NjRjNWJiYzI2ZTcw
ZS4uNWQxMTZmOWMzODI5Nzc2OTYzMjAzZTEzYjNjZDM0NTJjZmIzNmUyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQ1NCw4ICs0
NTQsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW4KICAgICBhdXRvIGlzTmV3RW50cnkgPSBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1
b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0gewogICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0
aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKICAgICB9KS5pc05ld0Vu
dHJ5OwotICAgIGlmIChpc05ld0VudHJ5KQorICAgIGlmIChpc05ld0VudHJ5KSB7CiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjYWNoZVJvb3RQYXRoSGFuZGxl
KTsKKyAgICAgICAgaWYgKCFjYWNoZVJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBv
c3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3JrUHJvY2Vz
czo6ZW5zdXJlUGF0aEV4aXN0cywgY2FjaGVSb290UGF0aCkpOworICAgIH0KIH0KIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5jcHAKaW5kZXggNzVhYTkwNWFiNjhhYzllYWYxZDEx
OWIwMTc4NGZhNjE2MGEyOGVmYy4uNTNjZTQ5Y2YzN2U4MWYxYjU0Y2MyZGI3NTllMjhhMGI5MmRj
YzgxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGEuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlIDxmY250
bC5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiAhT1MoV0lORE9XUykKICNpbmNsdWRlIDxz
eXMvbW1hbi5oPgpAQCAtMzksMjYgKzM4LDI0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCiBEYXRhIERhdGE6Om1hcFRv
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7Ci0gICAgaW50IGZkID0gb3BlbihGaWxl
U3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBPX0NSRUFUIHwg
T19FWENMIHwgT19SRFdSICwgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgIGlmIChmZCA8IDApCi0g
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoZnRydW5jYXRlKGZkLCBtX3NpemUpIDwgMCkg
ewotICAgICAgICBjbG9zZShmZCk7CisgICAgY29uc3RleHByIGJvb2wgZmFpbElmRmlsZUV4aXN0
cyA9IHRydWU7CisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBG
aWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vz
c1Blcm1pc3Npb246OlVzZXIsIGZhaWxJZkZpbGVFeGlzdHMpOworICAgIGlmICghRmlsZVN5c3Rl
bTo6aXNIYW5kbGVWYWxpZChoYW5kbGUpIHx8ICFGaWxlU3lzdGVtOjp0cnVuY2F0ZUZpbGUoaGFu
ZGxlLCBtX3NpemUpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICBGaWxlU3lzdGVtOjptYWtlU2Fm
ZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKTsKLQotICAgIHZvaWQqIG1hcCA9IG1tYXAobnVs
bHB0ciwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7
Ci0gICAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBi
b29sIHN1Y2Nlc3M7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbWFwcGVkRmlsZSho
YW5kbGUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZFdyaXRlLCBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlTW9kZTo6U2hhcmVkLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCisgICAgdm9pZCogbWFwID0gY29uc3RfY2FzdDx2b2lkKj4obWFwcGVkRmlsZS5k
YXRhKCkpOwogICAgIHVpbnQ4X3QqIG1hcERhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFw
KTsKICAgICBhcHBseShbJm1hcERhdGFdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0
ZXNTaXplKSB7CiAgICAgICAgIG1lbWNweShtYXBEYXRhLCBieXRlcywgYnl0ZXNTaXplKTsKQEAg
LTY2LDUyICs2MywyMyBAQCBEYXRhIERhdGE6Om1hcFRvRmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
IGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwogCisjaWYgT1MoV0lORE9XUykK
KyAgICBEV09SRCBvbGRQcm90ZWN0aW9uOworICAgIFZpcnR1YWxQcm90ZWN0KG1hcCwgbV9zaXpl
LCBGSUxFX01BUF9SRUFELCAmb2xkUHJvdGVjdGlvbik7CisgICAgRmx1c2hWaWV3T2ZGaWxlKG1h
cCwgbV9zaXplKTsKKyNlbHNlCiAgICAgLy8gRHJvcCB0aGUgd3JpdGUgcGVybWlzc2lvbi4KICAg
ICBtcHJvdGVjdChtYXAsIG1fc2l6ZSwgUFJPVF9SRUFEKTsKIAogICAgIC8vIEZsdXNoIChhc3lu
Y2hyb25vdXNseSkgdG8gZmlsZSwgdHVybmluZyB0aGlzIGludG8gY2xlYW4gbWVtb3J5LgogICAg
IG1zeW5jKG1hcCwgbV9zaXplLCBNU19BU1lOQyk7Ci0KLSAgICByZXR1cm4gRGF0YTo6YWRvcHRN
YXAobWFwLCBtX3NpemUsIGZkKTsKLX0KLSNlbHNlCi1EYXRhIERhdGE6Om1hcFRvRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpIGNvbnN0Ci17Ci0gICAgYXV0byBmaWxlID0gRmlsZVN5c3RlbTo6b3Bl
bkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAgaWYgKCFG
aWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGZpbGUpKQotICAgICAgICByZXR1cm4geyB9OwotICAg
IGlmIChGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihkYXRhKCkpLCBzaXplKCkpIDwgMCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBy
ZXR1cm4gRGF0YShWZWN0b3I8dWludDhfdD4obV9idWZmZXIpKTsKLX0KICNlbmRpZgogCi0jaWYg
IU9TKFdJTkRPV1MpCi1EYXRhIG1hcEZpbGUoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBpbnQg
ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZLCAwKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIHN0cnVjdCBzdGF0IHN0YXQ7Ci0gICAgaWYgKGZzdGF0KGZkLCAmc3Rh
dCkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9
Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0LnN0X3NpemU7Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAg
ICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIERhdGE6OmVtcHR5KCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGFkb3B0QW5kTWFwRmlsZShmZCwgMCwgc2l6ZSk7CisgICAgcmV0dXJuIERhdGE6
OmFkb3B0TWFwKFdURk1vdmUobWFwcGVkRmlsZSksIGhhbmRsZSk7CiB9Ci0jZW5kaWYKIAotRGF0
YSBtYXBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK0RhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBw
YXRoKQogewotI2lmICFPUyhXSU5ET1dTKQotICAgIHJldHVybiBtYXBGaWxlKEZpbGVTeXN0ZW06
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotI2Vsc2UKICAgICBhdXRv
IGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1v
ZGU6OlJlYWQpOwogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxlKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKQEAgLTExOSwzMSArODcsMjggQEAgRGF0YSBtYXBGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGZpbGUsIHNp
emUpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmls
ZSwgMCwgc2l6ZSk7Ci0jZW5kaWYKIH0KIAotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFu
ZE1hcEZpbGUoaW50IGZkLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK0RhdGEgbWFwRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIG1hcEZpbGUoRmlsZVN5c3RlbTo6
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Cit9CisKK0RhdGEgYWRvcHRB
bmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplKQogewogICAgIGlmICghc2l6ZSkgewotICAgICAgICBjbG9zZShm
ZCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogICAgICAgICByZXR1
cm4gRGF0YTo6ZW1wdHkoKTsKICAgICB9Ci0KLSAgICB2b2lkKiBtYXAgPSBtbWFwKG51bGxwdHIs
IHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCBvZmZzZXQpOwotICAgIGlmIChtYXAg
PT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBjbG9zZShmZCk7CisgICAgYm9vbCBzdWNjZXNzOwor
ICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1hcHBlZEZpbGUoaGFuZGxlLCBGaWxlU3lz
dGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVNb2RlOjpQcml2
YXRlLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKGhhbmRsZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgcmV0
dXJuIERhdGE6OmFkb3B0TWFwKG1hcCwgc2l6ZSwgZmQpOworICAgIHJldHVybiBEYXRhOjphZG9w
dE1hcChXVEZNb3ZlKG1hcHBlZEZpbGUpLCBoYW5kbGUpOwogfQotI2Vsc2UKLURhdGEgYWRvcHRB
bmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBzaXplX3Qgb2Zm
c2V0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gRGF0YShmaWxlLCBvZmZzZXQsIHNpemUp
OwotfQotI2VuZGlmCiAKIFNIQTE6OkRpZ2VzdCBjb21wdXRlU0hBMShjb25zdCBEYXRhJiBkYXRh
LCBjb25zdCBTYWx0JiBzYWx0KQogewpAQCAtMTc5LDQwICsxNDQsMjUgQEAgc3RhdGljIFNhbHQg
bWFrZVNhbHQoKQogCiBPcHRpb25hbDxTYWx0PiByZWFkT3JNYWtlU2FsdChjb25zdCBTdHJpbmcm
IHBhdGgpCiB7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgYXV0byBjcGF0aCA9IEZpbGVTeXN0ZW06
OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBhdXRvIGZkID0gb3BlbihjcGF0
aC5kYXRhKCksIE9fUkRPTkxZLCAwKTsKLSAgICBTYWx0IHNhbHQ7Ci0gICAgYXV0byBieXRlc1Jl
YWQgPSByZWFkKGZkLCBzYWx0LmRhdGEoKSwgc2FsdC5zaXplKCkpOwotICAgIGNsb3NlKGZkKTsK
LSAgICBpZiAoYnl0ZXNSZWFkICE9IHN0YXRpY19jYXN0PHNzaXplX3Q+KHNhbHQuc2l6ZSgpKSkg
ewotICAgICAgICBzYWx0ID0gbWFrZVNhbHQoKTsKLQotICAgICAgICB1bmxpbmsoY3BhdGguZGF0
YSgpKTsKLSAgICAgICAgZmQgPSBvcGVuKGNwYXRoLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFU
IHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSB3
cml0ZShmZCwgc2FsdC5kYXRhKCksIHNhbHQuc2l6ZSgpKSA9PSBzdGF0aWNfY2FzdDxzc2l6ZV90
PihzYWx0LnNpemUoKSk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgaWYgKCFzdWNjZXNz
KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHNhbHQ7Ci0jZWxz
ZQotICAgIGF1dG8gZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgU2FsdCBzYWx0OwotICAgIGF1dG8gYnl0ZXNSZWFk
ID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNhbHQuZGF0YSgpKSwgc2FsdC5zaXplKCkpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShm
aWxlKTsKLSAgICBpZiAoYnl0ZXNSZWFkICE9IHNhbHQuc2l6ZSgpKSB7Ci0gICAgICAgIHNhbHQg
PSBtYWtlU2FsdCgpOworICAgIGlmIChmaWxlRXhpc3RzKHBhdGgpKSB7CisgICAgICAgIGF1dG8g
ZmlsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9k
ZTo6UmVhZCk7CisgICAgICAgIFNhbHQgc2FsdDsKKyAgICAgICAgYXV0byBieXRlc1JlYWQgPSBG
aWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2Fs
dC5kYXRhKCkpLCBzYWx0LnNpemUoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShm
aWxlKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSBzYWx0LnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiBzYWx0OwogCiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUocGF0aCk7Ci0g
ICAgICAgIGZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxl
T3Blbk1vZGU6OldyaXRlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gRmlsZVN5c3RlbTo6d3Jp
dGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2FsdC5kYXRhKCkpLCBzYWx0
LnNpemUoKSkgPT0gc2FsdC5zaXplKCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShm
aWxlKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CisKKyAgICBTYWx0IHNhbHQgPSBtYWtlU2FsdCgpOworICAgIGF1dG8gZmlsZSA9IEZpbGVT
eXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUsIEZp
bGVTeXN0ZW06OkZpbGVBY2Nlc3NQZXJtaXNzaW9uOjpVc2VyKTsKKyAgICBib29sIHN1Y2Nlc3Mg
PSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihz
YWx0LmRhdGEoKSksIHNhbHQuc2l6ZSgpKSA9PSBzYWx0LnNpemUoKTsKKyAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoZmlsZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4geyB9
OworCiAgICAgcmV0dXJuIHNhbHQ7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmV0d29y
a0NhY2hlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGF0YS5oCmluZGV4IGQ3OGQ5OGI2MTc1MGQ3OTE3YmM5ODA1M2JkOWU3YzljYWRh
Yjg3NDIuLjM3YjU5NjY1NmE1ZDEzNTJkNzJjOTM2ZWUxOTMxZmQ5MGYyNjE5ZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YS5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0clNvdXAuaD4K
ICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUg
PHd0Zi9WYXJpYW50Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNo
YXJlZE1lbW9yeTsKQEAgLTUzLDE5ICs1OCwxNiBAQCBwdWJsaWM6CiAgICAgfkRhdGEoKSB7IH0K
IAogICAgIHN0YXRpYyBEYXRhIGVtcHR5KCk7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgc3RhdGlj
IERhdGEgYWRvcHRNYXAodm9pZCogbWFwLCBzaXplX3QsIGludCBmZCk7Ci0jZW5kaWYKKyAgICBz
dGF0aWMgRGF0YSBhZG9wdE1hcChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmLCBGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZW51
bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICAgICBEYXRhKE9TT2JqZWN0UHRyPGRp
c3BhdGNoX2RhdGFfdD4mJiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5kaWYKICNp
ZiBVU0UoU09VUCkKLSAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgaW50IGZkID0gLTEp
OwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBleHBsaWNpdCBEYXRhKFZlY3Rvcjx1aW50OF90PiYm
KTsKLSAgICBEYXRhKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNl
dCwgc2l6ZV90KTsKKyAgICBEYXRhKEdSZWZQdHI8U291cEJ1ZmZlcj4mJiwgRmlsZVN5c3RlbTo6
UGxhdGZvcm1GaWxlSGFuZGxlIGZkID0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZSk7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBEYXRhKFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+
LCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4mJik7CiAjZW5kaWYKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0K
QEAgLTk0LDEwICs5NiwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAg
bXV0YWJsZSBHUmVmUHRyPFNvdXBCdWZmZXI+IG1fYnVmZmVyOwotICAgIGludCBtX2ZpbGVEZXNj
cmlwdG9yIHsgLTEgfTsKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxl
RGVzY3JpcHRvciB7IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsKICNl
bmRpZgotI2lmIE9TKFdJTkRPV1MpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVyOworI2lm
IFVTRShDVVJMKQorICAgIEJveDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGE+PiBtX2J1ZmZlcjsKICNlbmRpZgogICAgIG11dGFibGUgY29uc3QgdWlu
dDhfdCogbV9kYXRhIHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CkBAIC0x
MDYsMTcgKzEwOCw4IEBAIHByaXZhdGU6CiAKIERhdGEgY29uY2F0ZW5hdGUoY29uc3QgRGF0YSYs
IGNvbnN0IERhdGEmKTsKIGJvb2wgYnl0ZXNFcXVhbChjb25zdCBEYXRhJiwgY29uc3QgRGF0YSYp
OwotI2lmICFPUyhXSU5ET1dTKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoaW50LCBzaXplX3Qgb2Zm
c2V0LCBzaXplX3QpOwotI2Vsc2UKIERhdGEgYWRvcHRBbmRNYXBGaWxlKEZpbGVTeXN0ZW06OlBs
YXRmb3JtRmlsZUhhbmRsZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90KTsKLSNlbmRpZgotI2lmIFVT
RShHTElCKSAmJiAhUExBVEZPUk0oV0lOKQotRGF0YSBhZG9wdEFuZE1hcEZpbGUoR0ZpbGVJT1N0
cmVhbSosIHNpemVfdCBvZmZzZXQsIHNpemVfdCk7Ci0jZW5kaWYKLSNpZiAhT1MoV0lORE9XUykK
IERhdGEgbWFwRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKLSNlbmRpZgogRGF0YSBtYXBGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCk7CiAKIHVzaW5nIFNhbHQgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDg+
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFDb2NvYS5tbQppbmRleCA2YTM5Zjg4NzAwODc5NDQzZDY2OWYzYjI5YTAz
YjI4ZWFhZjY1MjJiLi5jYjRhYzM4YzZhNTI4MjQ1ZDE1MWRiYWY3MTVhNWFhOTU1ZjI5ZjdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURhdGFDb2NvYS5tbQpAQCAtOTIsMTEgKzkyLDEzIEBAIERhdGEgY29uY2F0ZW5h
dGUoY29uc3QgRGF0YSYgYSwgY29uc3QgRGF0YSYgYikKICAgICByZXR1cm4geyBhZG9wdE9TT2Jq
ZWN0KGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChhLmRpc3BhdGNoRGF0YSgpLCBiLmRpc3Bh
dGNoRGF0YSgpKSkgfTsKIH0KIAotRGF0YSBEYXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVf
dCBzaXplLCBpbnQgZmQpCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZp
bGVEYXRhJiYgbWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQog
eworICAgIHNpemVfdCBzaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisgICAgdm9pZCogbWFwID0g
bWFwcGVkRmlsZS5sZWFrSGFuZGxlKCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgQVNTRVJUKG1h
cCAhPSBNQVBfRkFJTEVEKTsKLSAgICBjbG9zZShmZCk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGZkKTsKICAgICBhdXRvIGJvZHlNYXAgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX2RhdGFf
Y3JlYXRlKG1hcCwgc2l6ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVV
RV9QUklPUklUWV9ERUZBVUxULCAwKSwgW21hcCwgc2l6ZV0gewogICAgICAgICBtdW5tYXAobWFw
LCBzaXplKTsKICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCmluZGV4IGNmNDMxNTZjNWEw
M2ZjMzFmNTg2NWU3MzE2MjRjODgxZjU4MGFiMTguLjE5MjQ4MmJmOWY0MzRkYzE5OWQzN2FkNDEx
ODI5NGFlMTlkYzY2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YUN1cmwuY3BwCkBAIC0zMCw0MCArMzAsNDIg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogRGF0YTo6
RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fYnVmZmVyKEJv
eDxWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6
Y3JlYXRlKFZlY3Rvcjx1aW50OF90PihzaXplKSkpCisgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAg
ICBtX2J1ZmZlci5yZXNpemUoc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtZW1jcHko
bV9idWZmZXIuZGF0YSgpLCBkYXRhLCBzaXplKTsKKyAgICBtZW1jcHkoV1RGOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PigqbV9idWZmZXIpLmRhdGEoKSwgZGF0YSwgc2l6ZSk7CiB9CiAKLURhdGE6OkRh
dGEoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIHNpemVfdCBvZmZzZXQsIHNp
emVfdCBzaXplKQorRGF0YTo6RGF0YShWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGE+JiYgZGF0YSkKKyAgICA6IG1fYnVmZmVyKEJveDxWYXJpYW50PFZl
Y3Rvcjx1aW50OF90PiwgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGE+Pjo6Y3JlYXRlKFdURk1v
dmUoZGF0YSkpKQorICAgICwgbV9pc01hcChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhPigqbV9idWZmZXIpKQogewotICAgIG1fYnVmZmVyLnJlc2l6ZShz
aXplKTsKLSAgICBtX3NpemUgPSBzaXplOwotICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxlKGZpbGUs
IG9mZnNldCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7Ci0gICAgRmls
ZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVm
ZmVyLmRhdGEoKSksIHNpemUpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLX0K
LQotRGF0YTo6RGF0YShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCi0gICAgOiBtX2J1ZmZlcihX
VEZNb3ZlKGJ1ZmZlcikpCi17Ci0gICAgbV9zaXplID0gbV9idWZmZXIuc2l6ZSgpOworICAgIG1f
c2l6ZSA9IFdURjo6c3dpdGNoT24oKm1fYnVmZmVyLAorICAgICAgICBbXShjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ1ZmZlcikgLT4gc2l6ZV90IHsgcmV0dXJuIGJ1ZmZlci5zaXplKCk7IH0sCisg
ICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBtYXBwZWRGaWxlKSAt
PiBzaXplX3QgeyByZXR1cm4gbWFwcGVkRmlsZS5zaXplKCk7IH0KKyAgICApOwogfQogCiBEYXRh
IERhdGE6OmVtcHR5KCkKIHsKLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBi
dWZmZXI7CisgICAgcmV0dXJuIHsgV1RGTW92ZShidWZmZXIpIH07CiB9CiAKIGNvbnN0IHVpbnQ4
X3QqIERhdGE6OmRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCk7Cisg
ICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbigqbV9idWZmZXIsCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBidWZmZXIuZGF0YSgpOyB9LAor
ICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgbWFwcGVkRmlsZSkg
LT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1h
cHBlZEZpbGUuZGF0YSgpKTsgfQorICAgICk7CiB9CiAKIGJvb2wgRGF0YTo6aXNOdWxsKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOworICAgIHJldHVybiAhbV9idWZm
ZXI7CiB9CiAKIGJvb2wgRGF0YTo6YXBwbHkoY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCB1aW50
OF90Kiwgc2l6ZV90KT4mIGFwcGxpZXIpIGNvbnN0CkBAIC03MSwyMSArNzMsMzcgQEAgYm9vbCBE
YXRhOjphcHBseShjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYg
YXBwbGllcikgY29uc3QKICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gYXBwbGllcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPiht
X2J1ZmZlci5kYXRhKCkpLCBtX2J1ZmZlci5zaXplKCkpOworICAgIHJldHVybiBhcHBsaWVyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSksIHNpemUoKSk7CiB9CiAKIERh
dGEgRGF0YTo6c3VicmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHsgbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0LCBzaXplIH07CisgICAgaWYgKCFt
X2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IGRhdGEoKSArIG9m
ZnNldCwgc2l6ZSB9OwogfQogCiBEYXRhIGNvbmNhdGVuYXRlKGNvbnN0IERhdGEmIGEsIGNvbnN0
IERhdGEmIGIpCiB7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBiOworICAg
IGlmIChiLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYTsKKwogICAgIFZlY3Rvcjx1aW50OF90
PiBidWZmZXIoYS5zaXplKCkgKyBiLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCks
IGEuZGF0YSgpLCBhLnNpemUoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBhLnNpemUo
KSwgYi5kYXRhKCksIGIuc2l6ZSgpKTsKICAgICByZXR1cm4gRGF0YShXVEZNb3ZlKGJ1ZmZlcikp
OwogfQogCitEYXRhIERhdGE6OmFkb3B0TWFwKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYg
bWFwcGVkRmlsZSwgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQoreworICAgIEFT
U0VSVChtYXBwZWRGaWxlLmRhdGEoKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZkKTsK
KworICAgIHJldHVybiB7IFdURk1vdmUobWFwcGVkRmlsZSkgfTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5j
cHAKaW5kZXggNTE1YzA5ZWJiZmQzMzU0ZmQ5NTMzY2VlMWJkODkwMTczYmFhMWM3Yy4uZDNiNzll
MDE0YTc5YTc0NmZjNmY1MTc0M2ZiY2I4YjJhNGMwMTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5j
cHAKQEAgLTQ4LDExICs0OCwxMSBAQCBEYXRhOjpEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKQogICAgIG1fYnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRo
X293bmVyKGNvcGllZERhdGEsIHNpemUsIGNvcGllZERhdGEsIGZhc3RGcmVlKSk7CiB9CiAKLURh
dGE6OkRhdGEoR1JlZlB0cjxTb3VwQnVmZmVyPiYmIGJ1ZmZlciwgaW50IGZkKQorRGF0YTo6RGF0
YShHUmVmUHRyPFNvdXBCdWZmZXI+JiYgYnVmZmVyLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmQpCiAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2ZpbGVEZXNjcmlwdG9y
KGZkKQogICAgICwgbV9zaXplKGJ1ZmZlciA/IGJ1ZmZlci0+bGVuZ3RoIDogMCkKLSAgICAsIG1f
aXNNYXAobV9zaXplICYmIGZkICE9IC0xKQorICAgICwgbV9pc01hcChtX3NpemUgJiYgRmlsZVN5
c3RlbTo6aXNIYW5kbGVWYWxpZChmZCkpCiB7CiB9CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBAIHN0
cnVjdCBNYXBXcmFwcGVyIHsKICAgICB+TWFwV3JhcHBlcigpCiAgICAgewogICAgICAgICBtdW5t
YXAobWFwLCBzaXplKTsKLSAgICAgICAgY2xvc2UoZmlsZURlc2NyaXB0b3IpOworICAgICAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIHZvaWQq
IG1hcDsKICAgICBzaXplX3Qgc2l6ZTsKLSAgICBpbnQgZmlsZURlc2NyaXB0b3I7CisgICAgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVEZXNjcmlwdG9yOwogfTsKIAogc3RhdGlj
IHZvaWQgZGVsZXRlTWFwV3JhcHBlcihNYXBXcmFwcGVyKiB3cmFwcGVyKQpAQCAtMTIxLDggKzEy
MSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVNYXBXcmFwcGVyKE1hcFdyYXBwZXIqIHdyYXBwZXIp
CiAgICAgZGVsZXRlIHdyYXBwZXI7CiB9CiAKLURhdGEgRGF0YTo6YWRvcHRNYXAodm9pZCogbWFw
LCBzaXplX3Qgc2l6ZSwgaW50IGZkKQorRGF0YSBEYXRhOjphZG9wdE1hcChGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSYmIG1hcHBlZEZpbGUsIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRs
ZSBmZCkKIHsKKyAgICBzaXplX3Qgc2l6ZSA9IG1hcHBlZEZpbGUuc2l6ZSgpOworICAgIHZvaWQq
IG1hcCA9IG1hcHBlZEZpbGUubGVha0hhbmRsZSgpOwogICAgIEFTU0VSVChtYXApOwogICAgIEFT
U0VSVChtYXAgIT0gTUFQX0ZBSUxFRCk7CiAgICAgTWFwV3JhcHBlciogd3JhcHBlciA9IG5ldyBN
YXBXcmFwcGVyIHsgbWFwLCBzaXplLCBmZCB9OwpAQCAtMTMwLDIxICsxMzIsMTQgQEAgRGF0YSBE
YXRhOjphZG9wdE1hcCh2b2lkKiBtYXAsIHNpemVfdCBzaXplLCBpbnQgZmQpCiAgICAgcmV0dXJu
IHsgV1RGTW92ZShidWZmZXIpLCBmZCB9OwogfQogCi0jaWYgVVNFKEdMSUIpICYmICFQTEFURk9S
TShXSU4pCi1EYXRhIGFkb3B0QW5kTWFwRmlsZShHRmlsZUlPU3RyZWFtKiBzdHJlYW0sIHNpemVf
dCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0g
PSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKHN0cmVhbSkpOwotICAg
IGludCBmZCA9IGdfZmlsZV9kZXNjcmlwdG9yX2Jhc2VkX2dldF9mZChHX0ZJTEVfREVTQ1JJUFRP
Ul9CQVNFRChpbnB1dFN0cmVhbSkpOwotICAgIHJldHVybiBhZG9wdEFuZE1hcEZpbGUoZmQsIG9m
ZnNldCwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQogUmVmUHRyPFNoYXJlZE1lbW9yeT4gRGF0YTo6dHJ5
Q3JlYXRlU2hhcmVkTWVtb3J5KCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwgIWlzTWFw
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6
d3JhcE1hcChjb25zdF9jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSksIG1fYnVmZmVyLT5sZW5n
dGgsIG1fZmlsZURlc2NyaXB0b3IpOworICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0gPSBn
X2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fZmlsZURlc2NyaXB0b3Ip
KTsKKyAgICBpbnQgZmQgPSBnX2ZpbGVfZGVzY3JpcHRvcl9iYXNlZF9nZXRfZmQoR19GSUxFX0RF
U0NSSVBUT1JfQkFTRUQoaW5wdXRTdHJlYW0pKTsKKyAgICByZXR1cm4gU2hhcmVkTWVtb3J5Ojp3
cmFwTWFwKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKSwgbV9idWZmZXItPmxlbmd0
aCwgZmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVT
eXN0ZW0uY3BwCmluZGV4IGJlODQzNzFhODYzMDM4MDMwNWRjZjQ3M2E2NzI2ZDEyYjkzOWQ5YjAu
LjdhMGVjNWUxNGYzM2RlMDQyY2RmNDRiMGZiYTQyM2NjOWRkN2FmYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmNwcApAQCAtNTMsNDggKzUzLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi0jaWYgIU9TKFdJTkRPV1MpCi1zdGF0aWMgRGlyZWN0
b3J5RW50cnlUeXBlIGRpcmVjdG9yeUVudHJ5VHlwZSh1aW50OF90IGR0eXBlKQotewotICAgIHN3
aXRjaCAoZHR5cGUpIHsKLSAgICBjYXNlIERUX0RJUjoKLSAgICAgICAgcmV0dXJuIERpcmVjdG9y
eUVudHJ5VHlwZTo6RGlyZWN0b3J5OwotICAgIGNhc2UgRFRfUkVHOgotICAgICAgICByZXR1cm4g
RGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwot
ICAgIH0KLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlOwotfQotI2VuZGlmCi0K
IHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGdW5jdGlv
bjx2b2lkIChjb25zdCBTdHJpbmcmLCBEaXJlY3RvcnlFbnRyeVR5cGUpPiYgZnVuY3Rpb24pCiB7
Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKEZpbGVTeXN0ZW06OmZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAg
ICAgICByZXR1cm47Ci0gICAgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihk
aXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRfdHlwZSAh
PSBEVF9SRUcpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFt
ZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNt
cChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIG5hbWVT
dHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgICAgICBpZiAobmFtZVN0cmluZy5p
c051bGwoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihuYW1lU3Ry
aW5nLCBkaXJlY3RvcnlFbnRyeVR5cGUoZHAtPmRfdHlwZSkpOwotICAgIH0KLSAgICBjbG9zZWRp
cihkaXIpOwotI2Vsc2UKLSAgICBhdXRvIGVudHJpZXMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0
b3J5KHBhdGgpOworICAgIGF1dG8gZW50cmllcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3Rvcnko
cGF0aCwgIioiX3MpOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAg
IGF1dG8gdHlwZSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShlbnRyeSwgRmlsZVN5c3Rl
bTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pID8gRGlyZWN0b3J5RW50cnlUeXBlOjpE
aXJlY3RvcnkgOiBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU7Ci0gICAgICAgIGZ1bmN0aW9uKGVu
dHJ5LCB0eXBlKTsKKyAgICAgICAgZnVuY3Rpb24oRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1l
KGVudHJ5KSwgdHlwZSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlRGlyZWN0b3J5
UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJlZjVmMDUxYjgxMjkyYzdhMDFlZTI2OTA2NzRj
Y2EwZGI1NTZjOTYuLjc2NmNiMTAwYzliZWE2N2I5ZjY5NDZhMTAwZGEyMDQ3ZDhmOTRjYjggMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAyMC0wMi0yMCAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5j
b20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IE5ldHdvcmtDYWNoZTo6RGF0YSBieSB1c2lu
ZyBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njg0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81OTQ2
NzM5Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIEFk
ZCB0ZXN0IGZvciBGaWxlU3lzdGVtOjpjcmVhdGVGaWxlCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKwogMjAyMC0wMi0yNSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTY4ODIpOiBDYW4n
dCBkcmFnIGFuIEhUTUwgZmlsZSBpbnRvIGEgbmV3IChlbXB0eSkgU2FmYXJpIHRhYgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCBkMGU1MTUxYTk5
OTI5YTgzNzI3MzQ5Mzc1M2E1ODBlYmYzMmQzOGY3Li43NmNhZjJhZDQzNzI2NjNkMmJlMzExYmNm
YjYzYTA0ZDBjMGQwMWY2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9GaWxlU3lzdGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxl
U3lzdGVtLmNwcApAQCAtMTQ1LDQgKzE0NSwxMCBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIFVu
aWNvZGVEaXJlY3RvcnlOYW1lKQogICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkRGlyZWN0b3J5TmFt
ZSA9PSBkaXJlY3RvcnlOYW1lKTsKIH0KIAorVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBvcGVuRXhp
c3RpbmdGaWxlQW5kRmFpbElmRmlsZUV4aXN0cykKK3sKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVT
eXN0ZW06Om9wZW5GaWxlKHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6
OlJlYWRXcml0ZSwgRmlsZVN5c3RlbTo6RmlsZUFjY2Vzc1Blcm1pc3Npb246OkFsbCwgdHJ1ZSk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxlKSk7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA0M2FlYmIzNjYyMTk3YTQ0NmVkMmFhMGFkYWY2NGNjMTVlODQ5MDBjLi45
NGMwZmYyZTQ0MzdiZDAwMGMzNWZkN2JmOWE1ZjkzOGRiYWE4NDI3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjAtMDItMTggIENocmlzdG9waGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29t
PgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBOZXR3b3JrQ2FjaGU6OkRhdGEgYnkgdXNpbmcg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NzY4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk0Njcz
OTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAqIHBs
YXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjAtMDItMjUgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtURkNdIERvIG5vdCBjcmVh
dGUgYSBmb3JtYXR0aW5nIGNvbnRleHQgZm9yIGVtcHR5IHN1YnRyZWUgaW4gVGFibGVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZVByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNjg2YjdjOWQxNzVl
NDJkYWUyMjZkNzdiMGNkMzlkY2NhOWEwZjM2MS4uMGJkZWU1NTRhOWM3ZmJkNWFlMDgxMDAxM2Qz
YzY5YmMwMDk1MTE4MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8v
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0
RXhwZWN0YXRpb25zCkBAIC0xMTYxLDcgKzExNjEsMjAgQEAgY3J5cHRvL3N1YnRsZS93cmFwLWtl
eS1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgU2tpcCBdCiAKIGh0dHAvdGVzdHMvYXBwY2Fj
aGUgWyBTa2lwIF0KIGh0dHAvdGVzdHMvYmxpbmsvc2VuZGJlYWNvbiBbIFNraXAgXQotaHR0cC90
ZXN0cy9jYWNoZSBbIFNraXAgXQorCisjIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbgoraHR0cC90
ZXN0cy9jYWNoZS9jYW5jZWwtbXVsdGlwbGUtcG9zdC14aHJzLmh0bWwgWyBGYWlsdXJlIF0KKwor
IyBmYWlscyBiZWNhdXNlIG9mIGNvbnZlcnNpb24gdG8gZXBvY2ggYmVoYXZpb3Igc3BlY2lmaWMg
dG8gTWFjCitodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1sYXN0LW1vZGlm
aWVkLmh0bWwgWyBGYWlsdXJlIF0KKworIyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24KK2h0dHAv
dGVzdHMvY2FjaGUvaWZyYW1lLTMwNC1jcmFzaC5odG1sIFsgRmFpbHVyZSBdCitodHRwL3Rlc3Rz
L2NhY2hlL25ldHdvcmstZXJyb3ItZHVyaW5nLXJldmFsaWRhdGlvbi5odG1sIFsgRmFpbHVyZSBd
CitodHRwL3Rlc3RzL2NhY2hlL3BhcnRpdGlvbmVkLWNhY2hlLWlmcmFtZS5odG1sIFsgRmFpbHVy
ZSBdCitodHRwL3Rlc3RzL2NhY2hlL3BhcnRpdGlvbmVkLWNhY2hlLmh0bWwgWyBGYWlsdXJlIF0K
K2h0dHAvdGVzdHMvY2FjaGUvd2lsbHNlbmRyZXF1ZXN0LXJldHVybnMtbnVsbC1mb3ItbWVtb3J5
LWNhY2hlLWxvYWQuaHRtbCBbIEZhaWx1cmUgXQorCiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2Ug
WyBTa2lwIF0KIGh0dHAvdGVzdHMvY2FudmFzIFsgU2tpcCBdCiBodHRwL3Rlc3RzL2NvbnRlbnRk
aXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94IFsgU2tpcCBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>