<?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>225255</bug_id>
          
          <creation_ts>2021-04-30 15:32:18 -0700</creation_ts>
          <short_desc>Start leveraging std::filesystem in WTF::FileSystem</short_desc>
          <delta_ts>2021-05-03 19:48:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225289</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225307</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225341</see_also>
          <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>225327</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>lmoura</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1755836</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 15:32:18 -0700</bug_when>
    <thetext>Start leveraging std::filesystem in WTF::FileSystem to reduce the amount of platform-specific code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755841</commentid>
    <comment_count>1</comment_count>
      <attachid>427460</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 15:38:15 -0700</bug_when>
    <thetext>Created attachment 427460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755843</commentid>
    <comment_count>2</comment_count>
      <attachid>427461</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 15:41:44 -0700</bug_when>
    <thetext>Created attachment 427461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755853</commentid>
    <comment_count>3</comment_count>
      <attachid>427466</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 16:04:46 -0700</bug_when>
    <thetext>Created attachment 427466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755861</commentid>
    <comment_count>4</comment_count>
      <attachid>427467</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 16:24:22 -0700</bug_when>
    <thetext>Created attachment 427467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755869</commentid>
    <comment_count>5</comment_count>
      <attachid>427468</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 16:48:40 -0700</bug_when>
    <thetext>Created attachment 427468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755884</commentid>
    <comment_count>6</comment_count>
      <attachid>427474</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 18:03:02 -0700</bug_when>
    <thetext>Created attachment 427474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755886</commentid>
    <comment_count>7</comment_count>
      <attachid>427476</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-30 18:07:10 -0700</bug_when>
    <thetext>Created attachment 427476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755955</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-01 09:35:45 -0700</bug_when>
    <thetext>Awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755956</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 09:38:03 -0700</bug_when>
    <thetext>API-gtk ews keeps saying I broke WTF.StringOperators API test. I am not quite sure how that’s possible. This test does not seem to rely on the file system api in any way…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755958</commentid>
    <comment_count>10</comment_count>
      <attachid>427476</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-01 09:42:58 -0700</bug_when>
    <thetext>Comment on attachment 427476
Patch

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

&gt; Source/WTF/ChangeLog:9
&gt; +        Start leveraging std::filesystem in WTF::FileSystem to reduce the amount of
&gt; +        platform-specific code.

I think doing this in WTF::FileSystem at first is a good idea, but I would also like to eventually see WTF::FileSystem removed in favor of direct usage of std::filesystem if we can. Time will tell.

&gt; Source/WTF/wtf/FileSystem.cpp:52
&gt; +namespace fs = std::filesystem;

Not a huge fan of this. I think having longer names is probably ok, but I also think this is acceptable in a cpp file.

&gt; Source/WTF/wtf/FileSystem.cpp:491
&gt; +    return fs::exists(fileSystemRepresentation(path).data(), ec);

Would be good to explain why the error code is not being checked, since it seems odd at first glance.

&gt; Source/WTF/wtf/FileSystem.cpp:501
&gt; +#if !PLATFORM(MAC)

Would be good to have a comment explaining why macOS has a non-default implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755960</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-01 09:45:07 -0700</bug_when>
    <thetext>I can&apos;t remember if we have officially dropped 10.14 yet, but if we have, we can also remove the copy of std::filesystem we have in WTF called StdFilesystem.h/cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755968</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 10:21:54 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #10)
&gt; Comment on attachment 427476 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427476&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:9
&gt; &gt; +        Start leveraging std::filesystem in WTF::FileSystem to reduce the amount of
&gt; &gt; +        platform-specific code.
&gt; 
&gt; I think doing this in WTF::FileSystem at first is a good idea, but I would
&gt; also like to eventually see WTF::FileSystem removed in favor of direct usage
&gt; of std::filesystem if we can. Time will tell.

I see the WTF::FileSystem as a layer over std::filesystem allowing use to use WTF::String, which is convenient. Having to deal with conversion to and from file system representations would be annoying and potentially error-prone.

&gt; &gt; Source/WTF/wtf/FileSystem.cpp:52
&gt; &gt; +namespace fs = std::filesystem;
&gt; 
&gt; Not a huge fan of this. I think having longer names is probably ok, but I
&gt; also think this is acceptable in a cpp file.

Ok. I will revert. I don&apos;t feel super strongly.

&gt; &gt; Source/WTF/wtf/FileSystem.cpp:491
&gt; &gt; +    return fs::exists(fileSystemRepresentation(path).data(), ec);
&gt; 
&gt; Would be good to explain why the error code is not being checked, since it
&gt; seems odd at first glance.

Ok. Basically, exists() returns false in case of error so it is not useful to check ec. This function was already returning false in case of error so the behavior is maintained as far as I can tell.

&gt; 
&gt; &gt; Source/WTF/wtf/FileSystem.cpp:501
&gt; &gt; +#if !PLATFORM(MAC)
&gt; 
&gt; Would be good to have a comment explaining why macOS has a non-default
&gt; implementation.

I am planning to improve this in a follow-up. Basically the issue is that on Mac, we need to support removing a folder that has a hidden .DS_Store file in there. I&apos;ll add a comment for now but I&apos;ll improve things and write a test later on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755971</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 10:29:25 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #11)
&gt; I can&apos;t remember if we have officially dropped 10.14 yet, but if we have, we
&gt; can also remove the copy of std::filesystem we have in WTF called
&gt; StdFilesystem.h/cpp.

I will try and find out. I hope we have because the copy of std::filesystem in StdFilesystem.h doesn&apos;t seem to contain nearly enough API to support this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755972</commentid>
    <comment_count>14</comment_count>
      <attachid>427506</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 10:30:14 -0700</bug_when>
    <thetext>Created attachment 427506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755993</commentid>
    <comment_count>15</comment_count>
      <attachid>427511</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 13:47:37 -0700</bug_when>
    <thetext>Created attachment 427511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755994</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 13:48:37 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #15)
&gt; Created attachment 427511 [details]
&gt; Patch

Should take care of WTF.StringOperators in gtk-ews. Turns out using operator+ for String in other API tests can cause WTF.StringOperators to fail. We should probably fix that at some point. For now, I am working around it by not using operator+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755995</commentid>
    <comment_count>17</comment_count>
      <attachid>427512</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 14:01:00 -0700</bug_when>
    <thetext>Created attachment 427512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755997</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-01 14:02:03 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #13)
&gt; (In reply to Sam Weinig from comment #11)
&gt; &gt; I can&apos;t remember if we have officially dropped 10.14 yet, but if we have, we
&gt; &gt; can also remove the copy of std::filesystem we have in WTF called
&gt; &gt; StdFilesystem.h/cpp.
&gt; 
&gt; I will try and find out. I hope we have because the copy of std::filesystem
&gt; in StdFilesystem.h doesn&apos;t seem to contain nearly enough API to support this
&gt; patch.

I checked with Ryan and he said it was OK. As a result, I dropped our own copy of std::filesystem in StdFilesystem.h. I kept the StdFilesystem.h header to conditional include the experimental version when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756011</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-01 19:36:22 -0700</bug_when>
    <thetext>Committed r276879 (237225@main): &lt;https://commits.webkit.org/237225@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427512.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756012</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-01 19:37:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/77425312&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756048</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-02 08:42:25 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #18)
&gt; (In reply to Chris Dumez from comment #13)
&gt; &gt; (In reply to Sam Weinig from comment #11)
&gt; &gt; &gt; I can&apos;t remember if we have officially dropped 10.14 yet, but if we have, we
&gt; &gt; &gt; can also remove the copy of std::filesystem we have in WTF called
&gt; &gt; &gt; StdFilesystem.h/cpp.
&gt; &gt; 
&gt; &gt; I will try and find out. I hope we have because the copy of std::filesystem
&gt; &gt; in StdFilesystem.h doesn&apos;t seem to contain nearly enough API to support this
&gt; &gt; patch.
&gt; 
&gt; I checked with Ryan and he said it was OK. As a result, I dropped our own
&gt; copy of std::filesystem in StdFilesystem.h. I kept the StdFilesystem.h
&gt; header to conditional include the experimental version when needed.

Excellent. Thanks for following up!

I added StdFilesystem.h to make work in WebKitTestRunner and DumpRenderTree nicer but am very glad to see it gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756076</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-02 17:38:08 -0700</bug_when>
    <thetext>This patch removes some features from WTF::FileSystem that std::filesystem chose not to include. We need to decide whether they are valuable:

WTF::FileSystem::deleteEmptyDirectory and WTF::FileSystem::deleteNonEmptyDirectory on a file: The std::filesystem functions work on both files and directories, so these have lost their &quot;if it’s a file just leave it alone&quot; semantic, but without changing the function names.

WTF::FileSystem::deleteFile on a directory: The std::filesystem functions work on both files and directories, so it have lost its &quot;if it’s a directory just leave it alone&quot; semantic, but we made that change without changing the function name.

WTF::FileSystem::moveFile: The Cocoa implementation of this function had the power to move files across file systems, by copying and then deleting the original. As did the Windows version and probably the others as well. I don’t think that std::filesystem::rename does this. Not sure if it matters; need to audit callers to see if they need this cross-file-system behavior.

There may be other changes as well. I don’t object to this change, but really we should make WTF::FileSystem a thinner layer on top of std::filesystem and remove the names that imply we have features that we no longer have.

And in the process look very carefully at code calling these functions to see if there were benefits to the old implementation that are lost and make sure we made an informed decision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756084</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-02 18:23:13 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #22)
&gt; This patch removes some features from WTF::FileSystem that std::filesystem
&gt; chose not to include. We need to decide whether they are valuable:
&gt; 
&gt; WTF::FileSystem::deleteEmptyDirectory and
&gt; WTF::FileSystem::deleteNonEmptyDirectory on a file: The std::filesystem
&gt; functions work on both files and directories, so these have lost their &quot;if
&gt; it’s a file just leave it alone&quot; semantic, but without changing the function
&gt; names.
&gt; 
&gt; WTF::FileSystem::deleteFile on a directory: The std::filesystem functions
&gt; work on both files and directories, so it have lost its &quot;if it’s a directory
&gt; just leave it alone&quot; semantic, but we made that change without changing the
&gt; function name.
&gt; 
&gt; WTF::FileSystem::moveFile: The Cocoa implementation of this function had the
&gt; power to move files across file systems, by copying and then deleting the
&gt; original. As did the Windows version and probably the others as well. I
&gt; don’t think that std::filesystem::rename does this. Not sure if it matters;
&gt; need to audit callers to see if they need this cross-file-system behavior.
&gt; 
&gt; There may be other changes as well. I don’t object to this change, but
&gt; really we should make WTF::FileSystem a thinner layer on top of
&gt; std::filesystem and remove the names that imply we have features that we no
&gt; longer have.
&gt; 
&gt; And in the process look very carefully at code calling these functions to
&gt; see if there were benefits to the old implementation that are lost and make
&gt; sure we made an informed decision.

Thanks for pointing this out. I was trying to maintain previous behavior to reduce the chance of breakage but it looks like I missed some subtleties. I will follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756175</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-03 07:47:45 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #22)
&gt; This patch removes some features from WTF::FileSystem that std::filesystem
&gt; chose not to include. We need to decide whether they are valuable:
&gt; 
&gt; WTF::FileSystem::deleteEmptyDirectory and
&gt; WTF::FileSystem::deleteNonEmptyDirectory on a file: The std::filesystem
&gt; functions work on both files and directories, so these have lost their &quot;if
&gt; it’s a file just leave it alone&quot; semantic, but without changing the function
&gt; names.
&gt; 
&gt; WTF::FileSystem::deleteFile on a directory: The std::filesystem functions
&gt; work on both files and directories, so it have lost its &quot;if it’s a directory
&gt; just leave it alone&quot; semantic, but we made that change without changing the
&gt; function name.

Restoring previous behavior via Bug 225289.

&gt; 
&gt; WTF::FileSystem::moveFile: The Cocoa implementation of this function had the
&gt; power to move files across file systems, by copying and then deleting the
&gt; original. As did the Windows version and probably the others as well. I
&gt; don’t think that std::filesystem::rename does this. Not sure if it matters;
&gt; need to audit callers to see if they need this cross-file-system behavior.

There are not many call sites:
1. IDBServer::renameOrigin(): Simple rename within the same directory so the new implementation is fine.
2. SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade(): Simple rename of a directory
3. CDMInstanceFairPlayStreamingAVFObjC::setStorageDirectory(): It is calling FileSystem::createTemporaryDirectory(@&quot;MediaKeys&quot;) and then moving that directory to the CDMInstanceFairPlayStreamingAVFObjC storage directory. I think that in theory at least, the temp directory and the actual temp directory could be on different volumes so we may have an issue here. I&apos;ll look into it.
4. CurlDownload::curlDidComplete(): Moves files from FileSystem::openTemporaryFile(&quot;download&quot;, m_downloadFileHandle) to the download destination. In theory, those could be on different Volumes I think.
5. StorageManager::renameOrigin(): Simple rename within a folder

So it looks like there are 2 call sites that may be problematic. I have not checked yet what std::filesystem::rename() does across volumes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756187</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-03 08:29:14 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #24)
&gt; (In reply to Darin Adler from comment #22)
&gt; &gt; This patch removes some features from WTF::FileSystem that std::filesystem
&gt; &gt; chose not to include. We need to decide whether they are valuable:
&gt; &gt; 
&gt; &gt; WTF::FileSystem::deleteEmptyDirectory and
&gt; &gt; WTF::FileSystem::deleteNonEmptyDirectory on a file: The std::filesystem
&gt; &gt; functions work on both files and directories, so these have lost their &quot;if
&gt; &gt; it’s a file just leave it alone&quot; semantic, but without changing the function
&gt; &gt; names.
&gt; &gt; 
&gt; &gt; WTF::FileSystem::deleteFile on a directory: The std::filesystem functions
&gt; &gt; work on both files and directories, so it have lost its &quot;if it’s a directory
&gt; &gt; just leave it alone&quot; semantic, but we made that change without changing the
&gt; &gt; function name.
&gt; 
&gt; Restoring previous behavior via Bug 225289.
&gt; 
&gt; &gt; 
&gt; &gt; WTF::FileSystem::moveFile: The Cocoa implementation of this function had the
&gt; &gt; power to move files across file systems, by copying and then deleting the
&gt; &gt; original. As did the Windows version and probably the others as well. I
&gt; &gt; don’t think that std::filesystem::rename does this. Not sure if it matters;
&gt; &gt; need to audit callers to see if they need this cross-file-system behavior.
&gt; 
&gt; There are not many call sites:
&gt; 1. IDBServer::renameOrigin(): Simple rename within the same directory so the
&gt; new implementation is fine.
&gt; 2. SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade(): Simple rename
&gt; of a directory
&gt; 3. CDMInstanceFairPlayStreamingAVFObjC::setStorageDirectory(): It is calling
&gt; FileSystem::createTemporaryDirectory(@&quot;MediaKeys&quot;) and then moving that
&gt; directory to the CDMInstanceFairPlayStreamingAVFObjC storage directory. I
&gt; think that in theory at least, the temp directory and the actual temp
&gt; directory could be on different volumes so we may have an issue here. I&apos;ll
&gt; look into it.
&gt; 4. CurlDownload::curlDidComplete(): Moves files from
&gt; FileSystem::openTemporaryFile(&quot;download&quot;, m_downloadFileHandle) to the
&gt; download destination. In theory, those could be on different Volumes I think.
&gt; 5. StorageManager::renameOrigin(): Simple rename within a folder
&gt; 
&gt; So it looks like there are 2 call sites that may be problematic. I have not
&gt; checked yet what std::filesystem::rename() does across volumes.

Give that call sites seem to need it, I am adding back support for moving across volumes via Bug 225307.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427460</attachid>
            <date>2021-04-30 15:38:15 -0700</date>
            <delta_ts>2021-04-30 15:51:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210430153814.patch</filename>
            <type>text/plain</type>
            <size>44938</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li45
Y2YxNjJhNWFmYjI3MGVjMTc1NjdiZjFlOGY2N2M5MTQ1OGJkNGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCBsZXZl
cmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0gdG8gcmVkdWNlIHRoZSBh
bW91bnQgb2YKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVFeGlz
dHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlSXNE
aXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldFZvbHVtZUZyZWVTcGFjZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVTeW1ib2xpY0xpbmspOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6aGFyZExpbmspOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKiB3dGYvRmlsZVN5c3Rl
bS5oOgorICAgICAgICAqIHd0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW06CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAq
IHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorCiAy
MDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2luZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJh
eXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwppbmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcw
ZWUzNmQ5NGQxMDVmYTI1Li5jZTIyZTVkNDFkYjc2NTcwZWI4YjVmOGU0MjRlMzQ0NjY4ZWYzY2Mz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNj
cmlwdENvcmUueGNjb25maWcKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9E
VUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUgPSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1v
ZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9M
REZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRf
YWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19a
VFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18x
OGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5j
dGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVT
M19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdi
YWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMx
MGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVfY2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFu
Z2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5
c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdp
bkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04
X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNf
Y3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3Ry
aW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0Ux
NV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFp
dHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJLVF87CiAKIE9USEVSX0xERkxBR1NfQkFTRSA9ICQo
T1RIRVJfTERGTEFHU19ISURFX1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEiOwogT1RIRVJfTERG
TEFHU1tzZGs9ZW1iZWRkZWQqXSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAy
Y2Q2M2RlNTcuLjE4YTE1ODI1ODc3Y2NiYWM5NTg0NDM0YWEyNGEwNmM0OTI5MmI1YWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CiAjaW5j
bHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZpbGVNZXRhZGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KQEAgLTQ4LDYgKzQ5
LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKK25h
bWVzcGFjZSBmcyA9IHN0ZDo6ZmlsZXN5c3RlbTsKKwogLy8gVGhlIGZvbGxvd2luZyBsb3dlci1B
U0NJSSBjaGFyYWN0ZXJzIG5lZWQgZXNjYXBpbmcgdG8gYmUgdXNlZCBpbiBhIGZpbGVuYW1lCiAv
LyBhY3Jvc3MgYWxsIHN5c3RlbXMsIGluY2x1ZGluZyBXaW5kb3dzOgogLy8gICAgIC0gVW5wcmlu
dGFibGUgQVNDSUkgKDAwLTFGKQpAQCAtMzgyLDE0ICszODUsNiBAQCB2b2lkIHVubG9ja0FuZENs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZShoYW5kbGUp
OwogfQogCi1ib29sIGZpbGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAgICBhdXRv
IG1ldGFkYXRhID0gc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpZZXMgPyBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRoKSA6IGZp
bGVNZXRhZGF0YShwYXRoKTsKLSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5
cGU6OkRpcmVjdG9yeTsKLX0KLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1Nh
ZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwyMCArNDAz
LDYgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5nJikKIH0K
ICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJvb2wgZGVs
ZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZW50
cmllcyA9IGxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYgZW50cnkg
OiBlbnRyaWVzKSB7Ci0gICAgICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0
b3J5KGVudHJ5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7
Ci0gICAgfQotICAgIHJldHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0KLSNlbmRp
ZgotCiBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3Qg
Ynl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+Jik+JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxl
KQogewogICAgIGNvbnN0ZXhwciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpAQCAtNTA0
LDUgKzQ4NSwxMDcgQEAgT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5n
JiBwYXRoKQogICAgIHJldHVybiBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OmV4
aXN0cyhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jv
b2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2Rl
IGVjOworICAgIHJldHVybiBmczo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KS5kYXRhKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykK
K2Jvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0
ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKyNlbmRpZgor
Citib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQ
YXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6cmVuYW1lKGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihuZXdQYXRoKS5kYXRhKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgc3Rk
OjplcnJvcl9jb2RlIGVjOworICAgIGF1dG8gc2l6ZSA9IGZzOjpmaWxlX3NpemUoZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgZmlsZUlzRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rcyBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQoreworICAgIHN0ZDo6ZXJyb3Jf
Y29kZSBlYzsKKyAgICBmczo6ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpCisg
ICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKS5kYXRhKCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3lt
bGlua19zdGF0dXMoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOwor
ICAgIHJldHVybiBmaWxlU3RhdHVzLnR5cGUoKSA9PSBmczo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7
Cit9CisKK2Jvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgZnM6OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30K
KworYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYg
ZnJlZVNwYWNlKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5m
byA9IGZzOjpzcGFjZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJlZVNwYWNlID0gc3Bh
Y2VJbmZvLmF2YWlsYWJsZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcmVhdGVTeW1i
b2xpY0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGlj
TGlua1BhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfc3lt
bGluayhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0
dXJuICFlYzsKK30KKworYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNv
bnN0IFN0cmluZyYgbGlua1BhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZz
OjpjcmVhdGVfaGFyZF9saW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5k
YXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpLCBlYyk7Cisg
ICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5n
JiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKQoreworICAgIGZzOjpwYXRoIGZz
VGFyZ2V0UGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCk7
CisgICAgZnM6OnBhdGggZnNMaW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5r
UGF0aCkuZGF0YSgpOworCisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVf
aGFyZF9saW5rKGZzVGFyZ2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgZnM6OmNvcHlfZmlsZShmc1RhcmdldFBhdGgsIGZz
TGlua1BhdGgsIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7
CisgICAgZnM6OnJlbW92ZV9hbGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEo
KSwgZWMpOworICAgIHJldHVybiAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1J
bXBsCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVT
eXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUz
Y2JlZjQyZWRmNjVlZTAzZDhjNWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0
Nzk4OWEyNzUxMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysr
IGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7
CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBp
dCB3YXMgbm90LgogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9G
aWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25z
dCBTdHJpbmcmIGRlc3RpbmF0aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5r
KGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBI
YXJkIGxpbmtzIGEgZmlsZSBpZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBP
UlRfUFJJVkFURSBib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJk
TGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxp
bmtQYXRoKTsKIAogI2lmIFVTRShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBs
b2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbSBiL1NvdXJj
ZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbQppbmRleCAxY2NlMTdkYzU5ZTIzM2M2
YTU4MDAxZTFiNmM5MDhlODQ1YTdjOTA2Li5jODUzN2VhMTczZTk5YmFiZGU3Zjc4YzlkM2NkYzgz
YzFlM2EzNWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29j
b2EubW0KKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCkBAIC0x
MjYsMjkgKzEyNiw2IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHBy
ZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgodGVtcG9yYXJ5RmlsZVBhdGguZGF0YSgpKTsKIH0KIAotYm9vbCBtb3ZlRmls
ZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICAv
LyBPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMuCi0gICAgYXV0byBtYW5hZ2VyID0gYWRvcHROUyhb
W05TRmlsZU1hbmFnZXIgYWxsb2NdIGluaXRdKTsKLSAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHRO
UyhbW1dURldlYkZpbGVNYW5hZ2VyRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbbWFuYWdl
ciBzZXREZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5p
bDsKLSAgICBib29sIHN1Y2Nlc3MgPSBbbWFuYWdlciBtb3ZlSXRlbUF0VVJMOltOU1VSTCBmaWxl
VVJMV2l0aFBhdGg6b2xkUGF0aF0gdG9VUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpuZXdQYXRo
XSBlcnJvcjomZXJyb3JdOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgTlNMb2coQCJFcnJv
ciBpbiBtb3ZlRmlsZTogJUAiLCBlcnJvcik7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJv
b2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVT
cGFjZSkKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGljdGlvbmFy
eSA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mRmlsZVN5c3Rl
bUZvclBhdGg6KE5TU3RyaW5nICopcGF0aCBlcnJvcjpOVUxMXTsKLSAgICBpZiAoIWZpbGVTeXN0
ZW1BdHRyaWJ1dGVzRGljdGlvbmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyZWVT
cGFjZSA9IFtbZmlsZVN5c3RlbUF0dHJpYnV0ZXNEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0Zp
bGVTeXN0ZW1GcmVlU2l6ZV0gdW5zaWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogTlNTdHJpbmcgKmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShOU1N0cmluZyAqZGly
ZWN0b3J5UHJlZml4KQogewogICAgIE5TU3RyaW5nICp0ZW1wRGlyZWN0b3J5ID0gTlNUZW1wb3Jh
cnlEaXJlY3RvcnkoKTsKQEAgLTE3OCwxMSArMTU1LDYgQEAgTlNTdHJpbmcgKmNyZWF0ZVRlbXBv
cmFyeURpcmVjdG9yeShOU1N0cmluZyAqZGlyZWN0b3J5UHJlZml4KQogICAgIHJldHVybiBbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50
YXRpb246cGF0aC5kYXRhKCkgbGVuZ3RoOmxlbmd0aF07CiB9CiAKLWJvb2wgZGVsZXRlTm9uRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjpuaWxdOwot
fQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIGJvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBG
b3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVt
R2xpYi5jcHAKaW5kZXggNjg3ZmExMGMyNjc1MzZjMDU4ZTc5MjRkYmVjYjkzYTcxMjQ4Zjg5MC4u
NjNkNWRhZjFhOTk0ZmY3MjBjYzk0MzAzYzFmM2M1MmJhNDRlNDA4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTExOCwyNCArMTE4LDYgQEAgU3RyaW5nIGZpbGVu
YW1lRm9yRGlzcGxheShjb25zdCBTdHJpbmcmIHN0cmluZykKICNlbmRpZgogfQogCi1ib29sIGZp
bGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRp
b24oZmlsZW5hbWUpID8gZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9F
WElTVFMpIDogZmFsc2U7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
Ci17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
LSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX3JlbW92ZShmaWxl
bmFtZS5kYXRhKCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmls
ZW5hbWUpID8gZ19ybWRpcihmaWxlbmFtZS5kYXRhKCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KIHN0
YXRpYyBib29sIGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRC
dWZmZXIpCiB7CiAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKQEAgLTE1NCwxNiArMTM2LDYgQEAgc3RhdGljIGJvb2wgZ2V0RmlsZUxTdGF0KGNvbnN0
IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiAgICAgcmV0dXJuIGdfbHN0YXQo
ZmlsZW5hbWUuZGF0YSgpLCBzdGF0QnVmZmVyKSAhPSAtMTsKIH0KIAotYm9vbCBnZXRGaWxlU2l6
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKLXsKLSAgICBHU3Rh
dEJ1ZiBzdGF0UmVzdWx0OwotICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5z
dF9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKIHsKICAgICBHUmVmUHRy
PEdGaWxlSW5mbz4gaW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfaW9fc3RyZWFtX3F1ZXJ5X2luZm8o
aGFuZGxlLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIG51bGxwdHIsIG51bGxwdHIp
KTsKQEAgLTI0MywzMCArMjE1LDExIEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRz
KFN0cmluZ1ZpZXcgcGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21wCiAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29u
c3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUp
ID8gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKSAhPSAtMSA6
IGZhbHNlOwotfQotCiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAgIHJldHVybiBz
dHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGdfZ2V0X2hvbWVfZGlyKCkpOwogfQog
Ci1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0
IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdldFBhdGhGU1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBpZiAoIXZhbGlk
UmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aEZTUmVwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ1N0cmluZyBzeW1ib2xpY0xpbmtQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oc3ltYm9saWNMaW5rUGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHN5
bWJvbGljTGlua1BhdGhGU1JlcCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biAhc3ltbGluayh0YXJnZXRQYXRoRlNSZXAuZGF0YSgpLCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAu
ZGF0YSgpKTsKLX0KLQogU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgp
CiB7CiAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
QEAgLTI3NywyMSArMjMwLDYgQEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcm
IHBhdGgpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOwogfQog
Ci1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBm
cmVlU3BhY2UpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUlu
Zm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmls
ZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIG51bGxwdHIsIG51bGxw
dHIpKTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBm
cmVlU3BhY2UgPSBnX2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQo
KSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUpOwotICAgIHJldHVybiAhIWZyZWVT
cGFjZTsKLX0KLQogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC00
MjgsNjIgKzM2Niw2IEBAIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgbW92
ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0g
ICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsK
LSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24ob2xkRmlsZW5hbWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKG5ld1BhdGgpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihuZXdGaWxlbmFtZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IG9sZEZpbGUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChvbGRGaWxlbmFtZS5kYXRhKCkpKTsKLSAgICBH
UmVmUHRyPEdGaWxlPiBuZXdGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobmV3
RmlsZW5hbWUuZGF0YSgpKSk7Ci0KLSAgICByZXR1cm4gZ19maWxlX21vdmUob2xkRmlsZS5nZXQo
KSwgbmV3RmlsZS5nZXQoKSwgR19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyKTsKLX0KLQotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAg
IHJldHVybiBDcmVhdGVIYXJkTGluayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEo
KSwgc291cmNlLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAg
YXV0byBzb3VyY2VGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwot
ICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihzb3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9u
KGRlc3RpbmF0aW9uRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gIWxpbmsoc291cmNlRmlsZW5hbWUuZGF0YSgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEo
KSk7Ci0jZW5kaWYKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNv
dXJjZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQg
bGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0jaWYgT1MoV0lORE9XUykKLSAg
ICByZXR1cm4gISE6OkNvcHlGaWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgZGVz
dGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIFRSVUUpOwotI2Vsc2UKLSAgICBhdXRv
IHNvdXJjZUZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAg
aWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHNvdXJjZUZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbkZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZGVz
dGluYXRpb25GaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8
R0ZpbGU+IHNvdXJjZUZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VG
aWxlbmFtZS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBkZXN0aW5hdGlvbkZpbGUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSkp
OwotICAgIHJldHVybiBnX2ZpbGVfY29weShzb3VyY2VGaWxlLmdldCgpLCBkZXN0aW5hdGlvbkZp
bGUuZ2V0KCksIEdfRklMRV9DT1BZX05PTkUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIpOwotI2VuZGlmCi19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChj
b25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZzRmlsZS5kYXRhKCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9w
b3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IDk5ZGNiZjIzZTkwZjBhZTEzNDIxY2EwYmIz
ZTI5MGMyOTVjZjEyOTcuLmJmZThmYWJiNmJmYzY3MGU0ZWU0YjMwZDhiM2M0OGU0NzlkYzVkMjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNDksMzYgKzQ5
LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKLWJv
b2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1Jl
cC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGFjY2Vzcyhmc1JlcC5kYXRhKCksIEZfT0spICE9IC0xOwotfQotCi1ib29sIGRlbGV0ZUZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRh
KClbMF0gPT0gJ1wwJykgewotICAgICAgICBMT0dfRVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0
ZS4gRmFpbGVkIHRvIGdldCBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIHRvIGNyZWF0ZSBDU3Ry
aW5nIGZyb20gY2ZTdHJpbmcgb3IgZmlsZXN5c3RlbSByZXByZXNlbnRhdGlvbiBpcyBhIG51bGwg
dmFsdWUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHVubGluaygu
Li4pIHJldHVybnMgMCBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uIG9mIHRoZSBwYXRoIGFuZCBub24t
emVybyBpbiBhbnkgb3RoZXIgY2FzZSAoaW5jbHVkaW5nIGludmFsaWQgcGVybWlzc2lvbnMgb3Ig
bm9uLWV4aXN0ZW50IGZpbGUpCi0gICAgYm9vbCB1bmxpbmtlZCA9ICF1bmxpbmsoZnNSZXAuZGF0
YSgpKTsKLSAgICBpZiAoIXVubGlua2VkICYmIGVycm5vICE9IEVOT0VOVCkKLSAgICAgICAgTE9H
X0VSUk9SKCJGaWxlIGZhaWxlZCB0byBkZWxldGUuIEVycm9yIG1lc3NhZ2U6ICVzIiwgc3RyZXJy
b3IoZXJybm8pKTsKLQotICAgIHJldHVybiB1bmxpbmtlZDsKLX0KLQogUGxhdGZvcm1GaWxlSGFu
ZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVB
Y2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgZmFpbElmRmlsZUV4aXN0cykKIHsKICAg
ICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtMTg2
LDM1ICsxNTYsNiBAQCBib29sIHVubG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkK
IH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKE1BQykKLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5k
YXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gcm1kaXIo
Li4uKSByZXR1cm5zIDAgb24gc3VjY2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9u
LXplcm8gaW4gYW55IG90aGVyIGNhc2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9y
IG5vbi1leGlzdGVudCBmaWxlKQotICAgIHJldHVybiAhcm1kaXIoZnNSZXAuZGF0YSgpKTsKLX0K
LSNlbmRpZgotCi1ib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25n
JiByZXN1bHQpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAn
XDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsK
LQotICAgIGlmIChzdGF0KGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmVzdWx0ID0gZmlsZUluZm8uc3Rfc2l6ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25n
IGxvbmcmIHJlc3VsdCkKIHsKICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKQEAgLTMwMCwxOSAr
MjQxLDYgQEAgT3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1s
aW5rcyhjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIGZpbGVNZXRhZGF0YVVzaW5nRnVu
Y3Rpb24ocGF0aCwgJnN0YXQpOwogfQogCi1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBT
dHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAg
ICBDU3RyaW5nIHRhcmdldFBhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJn
ZXRQYXRoKTsKLSAgICBpZiAoIXRhcmdldFBhdGhGU1JlcC5kYXRhKCkgfHwgdGFyZ2V0UGF0aEZT
UmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3Ry
aW5nIHN5bWJvbGljTGlua1BhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzeW1i
b2xpY0xpbmtQYXRoKTsKLSAgICBpZiAoIXN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRhKCkgfHwg
c3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN5bWxpbmsodGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSwgc3lt
Ym9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSk7Ci19Ci0KIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsK
ICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLycpKQpAQCAtMzI5LDM1ICsyNTcsNiBAQCBTdHJpbmcg
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNvbnN0IFZlY3RvcjxT
dHJpbmdWaWV3PiYgY29tcAogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLWJv
b2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBDU3RyaW5n
IGZ1bGxQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmICghYWNj
ZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Y2hhciogcCA9IGZ1bGxQYXRoLm11dGFibGVEYXRhKCkgKyAxOwotICAgIGludCBsZW5ndGggPSBm
dWxsUGF0aC5sZW5ndGgoKTsKLQotICAgIGlmIChwW2xlbmd0aCAtIDFdID09ICcvJykKLSAgICAg
ICAgcFtsZW5ndGggLSAxXSA9ICdcMCc7Ci0gICAgZm9yICg7ICpwOyArK3ApIHsKLSAgICAgICAg
aWYgKCpwID09ICcvJykgewotICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICAgICAgaWYg
KGFjY2VzcyhmdWxsUGF0aC5kYXRhKCksIEZfT0spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1r
ZGlyKGZ1bGxQYXRoLmRhdGEoKSwgU19JUldYVSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpwID0gJy8nOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkgewotICAgICAg
ICBpZiAobWtkaXIoZnVsbFBhdGguZGF0YSgpLCBTX0lSV1hVKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU3RyaW5nIHBhdGhHZXRG
aWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5n
KHBhdGgucmV2ZXJzZUZpbmQoJy8nKSArIDEpOwpAQCAtNDE5LDI5ICszMTgsNiBAQCBDU3RyaW5n
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiAjZW5kaWYKIAog
I2lmICFQTEFURk9STShDT0NPQSkKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRo
LCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKLSAgICBpZiAob2xkRmlsZW5hbWUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24obmV3UGF0aCk7Ci0gICAgaWYgKG5ld0ZpbGVuYW1lLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuYW1lKG9sZEZpbGVu
YW1lLmRhdGEoKSwgbmV3RmlsZW5hbWUuZGF0YSgpKSAhPSAtMTsKLX0KLQotYm9vbCBnZXRWb2x1
bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewot
ICAgIHN0cnVjdCBzdGF0dmZzIGZpbGVTeXN0ZW1TdGF0OwotICAgIGlmICghc3RhdHZmcyhmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCAmZmlsZVN5c3RlbVN0YXQpKSB7Ci0g
ICAgICAgIGZyZWVTcGFjZSA9IGZpbGVTeXN0ZW1TdGF0LmZfYmF2YWlsICogZmlsZVN5c3RlbVN0
YXQuZl9mcnNpemU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwg
UGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgc3VmZml4KQogewogICAg
IC8vIEZJWE1FOiBTdWZmaXggaXMgbm90IHN1cHBvcnRlZCwgYnV0IE9LIGZvciBub3cgc2luY2Ug
dGhlIGNvZGUgdXNpbmcgaXQgaXMgbWFjT1MtcG9ydC1vbmx5LgpAQCAtNDY4LDUzICszNDQsNiBA
QCBlbmQ6CiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCi1ib29sIGhhcmRMaW5rKGNv
bnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIGlm
IChzb3VyY2UuaXNFbXB0eSgpIHx8IGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihzb3VyY2UpOwotICAgIGlmICghZnNTb3VyY2UuZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIGZzRGVzdGluYXRpb24gPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
ZGVzdGluYXRpb24pOwotICAgIGlmICghZnNEZXN0aW5hdGlvbi5kYXRhKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhbGluayhmc1NvdXJjZS5kYXRhKCksIGZzRGVzdGlu
YXRpb24uZGF0YSgpKTsKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5r
KHNvdXJjZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhh
cmQgbGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0gICAgaWYgKHNvdXJjZS5p
c0VtcHR5KCkgfHwgZGVzdGluYXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7
Ci0gICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gZnNEZXN0aW5hdGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlv
bik7Ci0gICAgaWYgKCFmc0Rlc3RpbmF0aW9uLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byBoYW5kbGUgPSBvcGVuKGZzRGVzdGluYXRpb24uZGF0YSgpLCBPX1dST05M
WSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotICAgIGlmIChoYW5kbGUgPT0gLTEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNv
bnRlbnRzVG9GaWxlSGFuZGxlKHNvdXJjZSwgaGFuZGxlKTsKLSAgICBjbG9zZShoYW5kbGUpOwot
Ci0gICAgLy8gSWYgdGhlIGNvcHkgZmFpbGVkLCBkZWxldGUgdGhlIHVudXNhYmxlIGZpbGUuCi0g
ICAgaWYgKCFhcHBlbmRSZXN1bHQpCi0gICAgICAgIHVubGluayhmc0Rlc3RpbmF0aW9uLmRhdGEo
KSk7Ci0KLSAgICByZXR1cm4gYXBwZW5kUmVzdWx0OwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBn
ZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIHN0cnVjdCBzdGF0
IGZpbGVTdGF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4u
Y3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IGEwM2Y4YTQ2
NDRlZGI5MDc4MWZlNDM5YWY2YzAzNzllNWExMmE3YTAuLjI1OWEyODdlOTc2ZmIxMzM3YzEwNmJk
MzU1NmU2MWU2ZmFjZmZlNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAg
LTEwNSwxNSArMTA1LDYgQEAgc3RhdGljIHZvaWQgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWVGcm9t
RmluZERhdGEoY29uc3QgV0lOMzJfRklORF9EQVRBVyYgZmluZERhdGEKICAgICB0aW1lID0gZmls
ZVRpbWUuUXVhZFBhcnQgLyAxMDAwMDAwMCAtIGtTZWNvbmRzRnJvbUZpbGVUaW1lVG9UaW1ldDsK
IH0KIAotYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgc2l6
ZSkKLXsKLSAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmREYXRhOwotICAgIGlmICghZ2V0RmluZERh
dGEocGF0aCwgZmluZERhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
Z2V0RmlsZVNpemVGcm9tRmluZERhdGEoZmluZERhdGEsIHNpemUpOwotfQotCiBib29sIGdldEZp
bGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBsb25nIGxvbmcmIHNpemUpCiB7
CiAgICAgQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gZmlsZUluZm9ybWF0aW9uOwpAQCAtMjI1
LDI0ICsyMTYsNiBAQCBib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdl
dFBhdGgsIGNvbnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aAogICAgIHJldHVybiA6OkNyZWF0
ZVN5bWJvbGljTGlua1coc3ltYm9saWNMaW5rUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwg
dGFyZ2V0UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgMCk7CiB9CiAKLWJvb2wgZmlsZUV4
aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0
YTsKLSAgICByZXR1cm4gZ2V0RmluZERhdGEocGF0aCwgZmluZERhdGEpOwotfQotCi1ib29sIGRl
bGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmaWxlbmFtZSA9IHBh
dGg7Ci0gICAgcmV0dXJuICEhRGVsZXRlRmlsZVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5k
YXRhKCkpOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIHJldHVybiAhIVJlbW92ZURp
cmVjdG9yeVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCkpOwotfQotCiBib29sIG1v
dmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQogewog
ICAgIFN0cmluZyBvbGRGaWxlbmFtZSA9IG9sZFBhdGg7CkBAIC0yOTEsMTkgKzI2NCw2IEBAIENT
dHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKIAogI2Vu
ZGlmIC8vICFVU0UoQ0YpCiAKLWJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYg
cGF0aCkKLXsKLSAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRoOwotICAgIGlmIChTSENyZWF0ZURp
cmVjdG9yeUV4KG51bGxwdHIsIGZ1bGxQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBudWxs
cHRyKSAhPSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gR2V0TGFzdEVy
cm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBFUlJPUl9GSUxFX0VYSVNUUyAmJiBlcnJvciAh
PSBFUlJPUl9BTFJFQURZX0VYSVNUUykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIHBhdGggJXMiLCBwYXRoLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU3Ry
aW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKIHsKICAgICByZXR1cm4gIiI7CkBAIC01MTQsMjAgKzQ3
NCw2IEBAIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihieXRlc1JlYWQp
OwogfQogCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBDcmVhdGVIYXJkTGluayhkZXN0aW5hdGlvbi53
aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgc291cmNlLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBu
dWxscHRyKTsKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNvdXJj
ZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQgbGlu
ayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0gICAgcmV0dXJuICEhOjpDb3B5Rmls
ZShzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBUUlVFKTsKLX0KLQogU3RyaW5nIGxvY2FsVXNlclNwZWNpZmljU3RvcmFn
ZURpcmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoQ1NJRExf
TE9DQUxfQVBQREFUQSk7CkBAIC01NTcsMTYgKzUwMyw2IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3RE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsdGVyKQog
ICAgIHJldHVybiBlbnRyaWVzOwogfQogCi1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBT
dHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0gICAgVUxBUkdFX0lOVEVHRVIg
ZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7Ci0gICAgaWYgKCFHZXREaXNrRnJlZVNwYWNlRXhX
KHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxl
ciwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZyZWVT
cGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0OwotICAgIHJldHVybiB0
cnVlOwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0cmlu
ZyYgZnNGaWxlKQogewogICAgIGF1dG8gaGFuZGxlID0gb3BlbkZpbGUoZnNGaWxlLmRhdGEoKSwg
RmlsZU9wZW5Nb2RlOjpSZWFkKTsKQEAgLTU5NiwyMSArNTMyLDYgQEAgU3RyaW5nIGNyZWF0ZVRl
bXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQotewotICAgIFNIRklMRU9QU1RSVUNU
IGRlbGV0ZU9wZXJhdGlvbiA9IHsKLSAgICAgICAgbnVsbHB0ciwKLSAgICAgICAgRk9fREVMRVRF
LAotICAgICAgICBkaXJlY3RvcnlQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLAotICAgICAg
ICBMIiIsCi0gICAgICAgIEZPRl9OT0NPTkZJUk1BVElPTiB8IEZPRl9OT0VSUk9SVUkgfCBGT0Zf
U0lMRU5ULAotICAgICAgICBmYWxzZSwKLSAgICAgICAgbnVsbHB0ciwKLSAgICAgICAgTCIiCi0g
ICAgfTsKLSAgICByZXR1cm4gIVNIRmlsZU9wZXJhdGlvbigmZGVsZXRlT3BlcmF0aW9uKTsKLX0K
LQogYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXplX3QpCiB7CiAgICAgcmV0
dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ4YTM5MjI5MzUyYWNjZWIzZWQ0MWM4ODQyNWIzMDdj
M2IwYTZkMjQuLjRlMWVhZjdhYzZjZjBjYzBkZTViOTA5NWZmZDcxMDAwYzlmY2YyYWQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MyBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5c3RlbQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MjU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0
ZXN0IGNvdmVyYWdlIGZvciB0aGUgRmlsZVN5c3RlbSBBUEkgdGhhdCB3YXMgbW9kaWZpZWQuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcDoKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRmlsZVBhdGggY29uc3QpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBGaWxlU3ltbGlua1Bh
dGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBF
bXB0eUZvbGRlclBhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3Rl
bVRlc3Q6OnRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRW1wdHlGaWxlUGF0aCBjb25zdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6c3BhY2VDb250YWluaW5nRmlsZVBh
dGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OmJhbmdD
b250YWluaW5nRmlsZVBhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5
c3RlbVRlc3Q6OnF1b3RlQ29udGFpbmluZ0ZpbGVQYXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMjEtMDQtMzAgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRh
cmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRzY3B5XSBTdXBwb3J0IGFyZ3VtZW50cyB0
byBUYXNrUG9vbCBzZXR1cCBhbmQgdGVhcmRvd24KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvRmlsZVN5c3RlbS5jcHAKaW5kZXggOGY2NTFkM2VhZTM0MzI5NzUxYWMzNjFkZDdlMDY0
Y2I2MzdlMzc1Mi4uYzI5MzVkMjkwMmU0NmZiOGNiY2EyMjVkMDZlNzg2MjVjNDgxZjcyYyAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAKQEAgLTQzLDcg
KzQzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVh
ZCgpOwogCi0gICAgICAgIC8vIGNyZWF0ZSB0ZW1wIGZpbGUKKyAgICAgICAgLy8gY3JlYXRlIHRl
bXAgZmlsZS4KICAgICAgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZTsK
ICAgICAgICAgbV90ZW1wRmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgi
dGVtcFRlc3RGaWxlIiwgaGFuZGxlKTsKICAgICAgICAgRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUo
aGFuZGxlLCBGaWxlU3lzdGVtVGVzdERhdGEsIHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsK
QEAgLTUyLDYgKzUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgbV90ZW1wRmlsZVN5bWxpbmtQYXRo
ID0gInRlbXBUZXN0RmlsZS1zeW1saW5rIjsKICAgICAgICAgRmlsZVN5c3RlbTo6Y3JlYXRlU3lt
Ym9saWNMaW5rKG1fdGVtcEZpbGVQYXRoLCBtX3RlbXBGaWxlU3ltbGlua1BhdGgpOwogCisgICAg
ICAgIC8vIENyZWF0ZSB0ZW1wIGRpcmVjdG9yeS4KKyAgICAgICAgRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlIHRlbXBvcmFyeUZpbGU7CisgICAgICAgIG1fdGVtcEVtcHR5Rm9sZGVyUGF0
aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlGb2xkZXIiLCB0ZW1w
b3JhcnlGaWxlKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGUp
OworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7
CisgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhtX3RlbXBFbXB0eUZvbGRl
clBhdGgpOworCisgICAgICAgIG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGggPSBGaWxlU3lz
dGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcEVtcHR5Rm9sZGVyLXN5bWxpbmsiLCB0ZW1wb3Jh
cnlGaWxlKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGUpOwor
ICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1Bh
dGgpOworICAgICAgICBGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsobV90ZW1wRW1wdHlG
b2xkZXJQYXRoLCBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKTsKKwogICAgICAgICBtX3Rl
bXBFbXB0eUZpbGVQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBFbXB0
eVRlc3RGaWxlIiwgaGFuZGxlKTsKICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRs
ZSk7CiAKQEAgLTY5LDIyICs4MSwyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBGaWxlU3lz
dGVtOjpkZWxldGVGaWxlKG1fdGVtcEZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShtX3RlbXBGaWxlU3ltbGlua1BhdGgpOworICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVFbXB0eURpcmVjdG9yeShtX3RlbXBFbXB0eUZvbGRlclBhdGgpOworICAgICAgICBGaWxlU3lz
dGVtOjpkZWxldGVGaWxlKG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgpOwogICAgICAgICBG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEVtcHR5RmlsZVBhdGgpOwogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKG1fc3BhY2VDb250YWluaW5nRmlsZVBhdGgpOwogICAgICAgICBG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCk7CiAgICAgICAg
IEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9xdW90ZUNvbnRhaW5pbmdGaWxlUGF0aCk7CiAgICAg
fQogCi0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBhdGgoKSB7IHJldHVybiBtX3RlbXBGaWxl
UGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgdGVtcEZpbGVTeW1saW5rUGF0aCgpIHsgcmV0dXJu
IG1fdGVtcEZpbGVTeW1saW5rUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rmls
ZVBhdGgoKSB7IHJldHVybiBtX3RlbXBFbXB0eUZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5n
JiBzcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fc3BhY2VDb250YWluaW5nRmls
ZVBhdGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIGJhbmdDb250YWluaW5nRmlsZVBhdGgoKSB7IHJl
dHVybiBtX2JhbmdDb250YWluaW5nRmlsZVBhdGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIHF1b3Rl
Q29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9xdW90ZUNvbnRhaW5pbmdGaWxlUGF0aDsg
fQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEZpbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV90ZW1w
RmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRlbXBGaWxlU3ltbGlua1BhdGgoKSBjb25z
dCB7IHJldHVybiBtX3RlbXBGaWxlU3ltbGlua1BhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRl
bXBFbXB0eUZvbGRlclBhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBFbXB0eUZvbGRlclBhdGg7
IH0KKyAgICBjb25zdCBTdHJpbmcmIHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aDsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgdGVtcEVtcHR5RmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBFbXB0eUZpbGVQYXRo
OyB9CisgICAgY29uc3QgU3RyaW5nJiBzcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BhY2VDb250YWluaW5nRmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIGJh
bmdDb250YWluaW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2JhbmdDb250YWluaW5nRmls
ZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHF1b3RlQ29udGFpbmluZ0ZpbGVQYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9xdW90ZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQogCiBwcml2YXRlOgogICAg
IFN0cmluZyBtX3RlbXBGaWxlUGF0aDsKICAgICBTdHJpbmcgbV90ZW1wRmlsZVN5bWxpbmtQYXRo
OworICAgIFN0cmluZyBtX3RlbXBFbXB0eUZvbGRlclBhdGg7CisgICAgU3RyaW5nIG1fdGVtcEVt
cHR5Rm9sZGVyU3ltbGlua1BhdGg7CiAgICAgU3RyaW5nIG1fdGVtcEVtcHR5RmlsZVBhdGg7CiAg
ICAgU3RyaW5nIG1fc3BhY2VDb250YWluaW5nRmlsZVBhdGg7CiAgICAgU3RyaW5nIG1fYmFuZ0Nv
bnRhaW5pbmdGaWxlUGF0aDsKQEAgLTE3Niw0ICsxOTQsMjQ2IEBAIFRFU1RfRihGaWxlU3lzdGVt
VGVzdCwgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkpCiAgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHModGVtcG9yYXJ5VGVzdEZvbGRlcikpOwogfQogCitURVNUX0YoRmlsZVN5
c3RlbVRlc3QsIGZpbGVFeGlzdHMpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHModGVtcEZpbGVTeW1saW5rUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3QiX3MpKSk7
Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZGVsZXRlU3ltbGluaykKK3sKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsK
KworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVTeW1saW5r
UGF0aCgpKSk7CisKKyAgICAvLyBTaG91bGQgaGF2ZSBkZWxldGVkIHRoZSBzeW1saW5rIGJ1dCBu
b3QgdGhlIHRhcmdldCBmaWxlLgorICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0
LCBkZWxldGVGaWxlKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
dGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZSh0ZW1wRmlsZVBhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0
ZUVtcHR5RGlyZWN0b3J5KQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZGVsZXRlRW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNU
X0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHRlbXBFbXB0
eUZvbGRlclBhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIG1vdmVGaWxlKQor
eworICAgIGF1dG8gZGVzdGluYXRpb24gPSB0ZW1wRmlsZVBhdGgoKSArICItbW92ZWQiOworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhkZXN0aW5hdGlvbikpOworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCBkZXN0aW5h
dGlvbikpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxl
UGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhkZXN0aW5h
dGlvbikpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjptb3ZlRmlsZSh0ZW1wRmlsZVBh
dGgoKSwgZGVzdGluYXRpb24pKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBtb3ZlRmls
ZU92ZXJ3cml0ZXNEZXN0aW5hdGlvbikKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisKKyAgICBsb25nIGxvbmcgZmlsZVNp
emUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRlbXBGaWxl
UGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7CisKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRW1wdHlGaWxlUGF0aCgpLCBm
aWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxlU2l6ZSk7CisKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjptb3ZlRmlsZSh0ZW1wRmlsZVBhdGgoKSwgdGVtcEVtcHR5RmlsZVBhdGgo
KSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0
aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlG
aWxlUGF0aCgpKSk7CisKKyAgICBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBF
WFBFQ1RfR1QoZmlsZVNpemUsIDApOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGdldEZp
bGVTaXplKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZp
bGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBF
bXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXpl
KSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmdldEZpbGVTaXplKHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAg
RVhQRUNUX1RSVUUoIWZpbGVTaXplKTsKKworICAgIGZpbGVTaXplID0gMDsKKyAgICBTdHJpbmcg
ZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3QiX3MpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlVGhhdERvZXNOb3RFeGlzdCwgZmls
ZVNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRSghZmlsZVNpemUpOworfQorCitURVNUX0YoRmlsZVN5
c3RlbVRlc3QsIGZpbGVJc0RpcmVjdG9yeSkKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgYXV0byBmb2xkZXJTeW1saW5rTWV0
YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEodGVtcEVtcHR5Rm9sZGVyU3ltbGlua1Bh
dGgoKSk7CisgICAgRVhQRUNUX1RSVUUoISFmb2xkZXJTeW1saW5rTWV0YWRhdGEpOworICAgIEVY
UEVDVF9FUShmb2xkZXJTeW1saW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6
U3ltYm9saWNMaW5rKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0
b3J5KHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlz
RGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9s
bG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Zmls
ZUlzRGlyZWN0b3J5KHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpZZXMpKTsKKworICAgIGF1dG8gZmlsZVN5bWxpbmtNZXRhZGF0YSA9IEZpbGVT
eXN0ZW06OmZpbGVNZXRhZGF0YSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpOworICAgIEVYUEVDVF9U
UlVFKCEhZmlsZVN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKGZpbGVTeW1saW5rTWV0
YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlU3ltbGlua1BhdGgo
KSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlU3ltbGlua1BhdGgo
KSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisKKyAgICBT
dHJpbmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3QiX3MpOworICAg
IEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZmlsZVRoYXREb2VzTm90
RXhpc3QsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAg
RVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShmaWxlVGhhdERvZXNOb3RF
eGlzdCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7Cit9CisK
K1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbWFrZUFsbERpcmVjdG9yaWVzKQoreworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRl
clBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXModGVtcEVtcHR5Rm9s
ZGVyUGF0aCgpKSk7CisgICAgU3RyaW5nIHN1YkZvbGRlclBhdGggPSBGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnRzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgeyAic3ViRm9sZGVy
MSIsICJzdWJGb2xkZXIyIiwgInN1YkZvbGRlcjMiIH0pOworICAgIEVYUEVDVF9GQUxTRShGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKHN1YkZvbGRlclBhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoc3ViRm9sZGVyUGF0aCkpOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShzdWJGb2xkZXJQYXRoLCBGaWxlU3lzdGVt
OjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOwor
ICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN1YkZvbGRlclBhdGgpKTsK
K30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBnZXRWb2x1bWVGcmVlU3BhY2UpCit7CisgICAg
dWludDY0X3QgZnJlZVNwYWNlID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRW
b2x1bWVGcmVlU3BhY2UodGVtcEZpbGVQYXRoKCksIGZyZWVTcGFjZSkpOworICAgIEVYUEVDVF9H
VChmcmVlU3BhY2UsIDBVKTsKKworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCks
ICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmdldFZv
bHVtZUZyZWVTcGFjZShmaWxlVGhhdERvZXNOb3RFeGlzdCwgZnJlZVNwYWNlKSk7Cit9CisKK1RF
U1RfRihGaWxlU3lzdGVtVGVzdCwgY3JlYXRlU3ltYm9saWNMaW5rKQoreworICAgIGF1dG8gc3lt
bGlua1BhdGggPSB0ZW1wRmlsZVBhdGgoKSArICItc3ltbGluayI7CisgICAgRVhQRUNUX0ZBTFNF
KEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShG
aWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsodGVtcEZpbGVQYXRoKCksIHN5bWxpbmtQYXRo
KSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkp
OworCisgICAgYXV0byBzeW1saW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEo
c3ltbGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhc3ltbGlua01ldGFkYXRhKTsKKyAgICBF
WFBFQ1RfRVEoc3ltbGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OlN5bWJv
bGljTGluayk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN5bWxp
bmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlu
a1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxl
UGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgY3JlYXRlU3ltYm9saWNMaW5r
Rm9sZGVyKQoreworICAgIGF1dG8gc3ltbGlua1BhdGggPSB0ZW1wRW1wdHlGb2xkZXJQYXRoKCkg
KyAiLXN5bWxpbmsiOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5
bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNM
aW5rKHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisKKyAgICBhdXRvIHN5bWxp
bmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YShzeW1saW5rUGF0aCk7CisgICAg
RVhQRUNUX1RSVUUoISFzeW1saW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShzeW1saW5rTWV0
YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKworICAgIEVY
UEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnkoc3ltbGlua1BhdGgsIEZpbGVT
eXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHN5bWxpbmtQYXRoLCBGaWxlU3lzdGVtOjpTaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
OmZpbGVFeGlzdHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lz
dGVtVGVzdCwgY3JlYXRlU3ltYm9saWNMaW5rRmlsZURvZXNOb3RFeGlzdCkKK3sKKyAgICBTdHJp
bmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3QiX3MpOworICAgIEVY
UEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVUaGF0RG9lc05vdEV4aXN0KSk7
CisKKyAgICBhdXRvIHN5bWxpbmtQYXRoID0gZmlsZVRoYXREb2VzTm90RXhpc3QgKyAiLXN5bWxp
bmsiOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRo
KSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKGZpbGVU
aGF0RG9lc05vdEV4aXN0LCBzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVz
dCwgY3JlYXRlSGFyZExpbmspCit7CisgICAgYXV0byBoYXJkbGlua1BhdGggPSB0ZW1wRmlsZVBh
dGgoKSArICItaGFyZGxpbmsiOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNp
emUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6aGFyZExpbmsodGVtcEZpbGVQYXRoKCksIGhhcmRsaW5rUGF0aCkpOworCisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAg
IGxvbmcgbG9uZyBsaW5rRmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKGhhcmRsaW5rUGF0aCwgbGlua0ZpbGVTaXplKSk7CisgICAgRVhQRUNUX0VR
KGxpbmtGaWxlU2l6ZSwgZmlsZVNpemUpOworCisgICAgYXV0byBoYXJkbGlua01ldGFkYXRhID0g
RmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKGhhcmRsaW5rUGF0aCk7CisgICAgRVhQRUNUX1RSVUUo
ISFoYXJkbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoaGFyZGxpbmtNZXRhZGF0YS0+dHlw
ZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpGaWxlKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsaW5rRmlsZVNpemUgPSAw
OworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGhhcmRsaW5rUGF0aCwg
bGlua0ZpbGVTaXplKSk7CisgICAgRVhQRUNUX0VRKGxpbmtGaWxlU2l6ZSwgZmlsZVNpemUpOwor
fQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZUhhcmRMaW5rT3JDb3B5RmlsZSkKK3sK
KyAgICBhdXRvIGhhcmRsaW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1oYXJkbGluayI7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisK
KyAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
OmdldEZpbGVTaXplKHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChm
aWxlU2l6ZSwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpoYXJkTGlua09yQ29w
eUZpbGUodGVtcEZpbGVQYXRoKCksIGhhcmRsaW5rUGF0aCkpOworCisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxvbmcgbG9uZyBs
aW5rRmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KGhhcmRsaW5rUGF0aCwgbGlua0ZpbGVTaXplKSk7CisgICAgRVhQRUNUX0VRKGxpbmtGaWxlU2l6
ZSwgZmlsZVNpemUpOworCisgICAgYXV0byBoYXJkbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6
ZmlsZU1ldGFkYXRhKGhhcmRsaW5rUGF0aCk7CisgICAgRVhQRUNUX1RSVUUoISFoYXJkbGlua01l
dGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoaGFyZGxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFk
YXRhOjpUeXBlOjpGaWxlKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsaW5rRmlsZVNpemUgPSAwOworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGhhcmRsaW5rUGF0aCwgbGlua0ZpbGVTaXpl
KSk7CisgICAgRVhQRUNUX0VRKGxpbmtGaWxlU2l6ZSwgZmlsZVNpemUpOwogfQorCit9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="commit-queue"
          id="448063"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427461</attachid>
            <date>2021-04-30 15:41:44 -0700</date>
            <delta_ts>2021-04-30 16:25:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210430154143.patch</filename>
            <type>text/plain</type>
            <size>45378</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li45
Y2YxNjJhNWFmYjI3MGVjMTc1NjdiZjFlOGY2N2M5MTQ1OGJkNGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCBsZXZl
cmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0gdG8gcmVkdWNlIHRoZSBh
bW91bnQgb2YKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVFeGlz
dHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlSXNE
aXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldFZvbHVtZUZyZWVTcGFjZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVTeW1ib2xpY0xpbmspOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6aGFyZExpbmspOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKiB3dGYvRmlsZVN5c3Rl
bS5oOgorICAgICAgICAqIHd0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW06CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAq
IHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorCiAy
MDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2luZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJh
eXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwppbmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcw
ZWUzNmQ5NGQxMDVmYTI1Li5jZTIyZTVkNDFkYjc2NTcwZWI4YjVmOGU0MjRlMzQ0NjY4ZWYzY2Mz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNj
cmlwdENvcmUueGNjb25maWcKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9E
VUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUgPSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1v
ZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9M
REZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRf
YWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19a
VFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18x
OGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5j
dGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVT
M19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdi
YWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMx
MGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVfY2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFu
Z2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5
c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdp
bkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04
X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNf
Y3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3Ry
aW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0Ux
NV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFp
dHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJLVF87CiAKIE9USEVSX0xERkxBR1NfQkFTRSA9ICQo
T1RIRVJfTERGTEFHU19ISURFX1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEiOwogT1RIRVJfTERG
TEFHU1tzZGs9ZW1iZWRkZWQqXSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAy
Y2Q2M2RlNTcuLjE4YTE1ODI1ODc3Y2NiYWM5NTg0NDM0YWEyNGEwNmM0OTI5MmI1YWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CiAjaW5j
bHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZpbGVNZXRhZGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KQEAgLTQ4LDYgKzQ5
LDggQEAgbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKK25h
bWVzcGFjZSBmcyA9IHN0ZDo6ZmlsZXN5c3RlbTsKKwogLy8gVGhlIGZvbGxvd2luZyBsb3dlci1B
U0NJSSBjaGFyYWN0ZXJzIG5lZWQgZXNjYXBpbmcgdG8gYmUgdXNlZCBpbiBhIGZpbGVuYW1lCiAv
LyBhY3Jvc3MgYWxsIHN5c3RlbXMsIGluY2x1ZGluZyBXaW5kb3dzOgogLy8gICAgIC0gVW5wcmlu
dGFibGUgQVNDSUkgKDAwLTFGKQpAQCAtMzgyLDE0ICszODUsNiBAQCB2b2lkIHVubG9ja0FuZENs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZShoYW5kbGUp
OwogfQogCi1ib29sIGZpbGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAgICBhdXRv
IG1ldGFkYXRhID0gc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpZZXMgPyBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRoKSA6IGZp
bGVNZXRhZGF0YShwYXRoKTsKLSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5
cGU6OkRpcmVjdG9yeTsKLX0KLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1Nh
ZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwyMCArNDAz
LDYgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5nJikKIH0K
ICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJvb2wgZGVs
ZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZW50
cmllcyA9IGxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYgZW50cnkg
OiBlbnRyaWVzKSB7Ci0gICAgICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0
b3J5KGVudHJ5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7
Ci0gICAgfQotICAgIHJldHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0KLSNlbmRp
ZgotCiBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3Qg
Ynl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhf
dCosIHNpemVfdCk+Jik+JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxl
KQogewogICAgIGNvbnN0ZXhwciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpAQCAtNTA0
LDUgKzQ4NSwxMDcgQEAgT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5n
JiBwYXRoKQogICAgIHJldHVybiBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OmV4
aXN0cyhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jv
b2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2Rl
IGVjOworICAgIHJldHVybiBmczo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KS5kYXRhKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykK
K2Jvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0
ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKyNlbmRpZgor
Citib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQ
YXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6cmVuYW1lKGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihuZXdQYXRoKS5kYXRhKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgc3Rk
OjplcnJvcl9jb2RlIGVjOworICAgIGF1dG8gc2l6ZSA9IGZzOjpmaWxlX3NpemUoZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgZmlsZUlzRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rcyBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQoreworICAgIHN0ZDo6ZXJyb3Jf
Y29kZSBlYzsKKyAgICBmczo6ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpCisg
ICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKS5kYXRhKCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3lt
bGlua19zdGF0dXMoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOwor
ICAgIHJldHVybiBmaWxlU3RhdHVzLnR5cGUoKSA9PSBmczo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7
Cit9CisKK2Jvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgZnM6OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30K
KworYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYg
ZnJlZVNwYWNlKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5m
byA9IGZzOjpzcGFjZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJlZVNwYWNlID0gc3Bh
Y2VJbmZvLmF2YWlsYWJsZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcmVhdGVTeW1i
b2xpY0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGlj
TGlua1BhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfc3lt
bGluayhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0
dXJuICFlYzsKK30KKworYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNv
bnN0IFN0cmluZyYgbGlua1BhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZz
OjpjcmVhdGVfaGFyZF9saW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5k
YXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpLCBlYyk7Cisg
ICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5n
JiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKQoreworICAgIGZzOjpwYXRoIGZz
VGFyZ2V0UGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCk7
CisgICAgZnM6OnBhdGggZnNMaW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5r
UGF0aCkuZGF0YSgpOworCisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVf
aGFyZF9saW5rKGZzVGFyZ2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgZnM6OmNvcHlfZmlsZShmc1RhcmdldFBhdGgsIGZz
TGlua1BhdGgsIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7
CisgICAgZnM6OnJlbW92ZV9hbGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEo
KSwgZWMpOworICAgIHJldHVybiAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1J
bXBsCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVT
eXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUz
Y2JlZjQyZWRmNjVlZTAzZDhjNWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0
Nzk4OWEyNzUxMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysr
IGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7
CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBp
dCB3YXMgbm90LgogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9G
aWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25z
dCBTdHJpbmcmIGRlc3RpbmF0aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5r
KGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBI
YXJkIGxpbmtzIGEgZmlsZSBpZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBP
UlRfUFJJVkFURSBib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJk
TGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxp
bmtQYXRoKTsKIAogI2lmIFVTRShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBs
b2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbSBiL1NvdXJj
ZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbQppbmRleCAxY2NlMTdkYzU5ZTIzM2M2
YTU4MDAxZTFiNmM5MDhlODQ1YTdjOTA2Li5jODUzN2VhMTczZTk5YmFiZGU3Zjc4YzlkM2NkYzgz
YzFlM2EzNWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29j
b2EubW0KKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCkBAIC0x
MjYsMjkgKzEyNiw2IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHBy
ZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgodGVtcG9yYXJ5RmlsZVBhdGguZGF0YSgpKTsKIH0KIAotYm9vbCBtb3ZlRmls
ZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICAv
LyBPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMuCi0gICAgYXV0byBtYW5hZ2VyID0gYWRvcHROUyhb
W05TRmlsZU1hbmFnZXIgYWxsb2NdIGluaXRdKTsKLSAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHRO
UyhbW1dURldlYkZpbGVNYW5hZ2VyRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbbWFuYWdl
ciBzZXREZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5p
bDsKLSAgICBib29sIHN1Y2Nlc3MgPSBbbWFuYWdlciBtb3ZlSXRlbUF0VVJMOltOU1VSTCBmaWxl
VVJMV2l0aFBhdGg6b2xkUGF0aF0gdG9VUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpuZXdQYXRo
XSBlcnJvcjomZXJyb3JdOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgTlNMb2coQCJFcnJv
ciBpbiBtb3ZlRmlsZTogJUAiLCBlcnJvcik7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJv
b2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVT
cGFjZSkKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGljdGlvbmFy
eSA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mRmlsZVN5c3Rl
bUZvclBhdGg6KE5TU3RyaW5nICopcGF0aCBlcnJvcjpOVUxMXTsKLSAgICBpZiAoIWZpbGVTeXN0
ZW1BdHRyaWJ1dGVzRGljdGlvbmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyZWVT
cGFjZSA9IFtbZmlsZVN5c3RlbUF0dHJpYnV0ZXNEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0Zp
bGVTeXN0ZW1GcmVlU2l6ZV0gdW5zaWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogTlNTdHJpbmcgKmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShOU1N0cmluZyAqZGly
ZWN0b3J5UHJlZml4KQogewogICAgIE5TU3RyaW5nICp0ZW1wRGlyZWN0b3J5ID0gTlNUZW1wb3Jh
cnlEaXJlY3RvcnkoKTsKQEAgLTE3OCwxMSArMTU1LDYgQEAgTlNTdHJpbmcgKmNyZWF0ZVRlbXBv
cmFyeURpcmVjdG9yeShOU1N0cmluZyAqZGlyZWN0b3J5UHJlZml4KQogICAgIHJldHVybiBbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50
YXRpb246cGF0aC5kYXRhKCkgbGVuZ3RoOmxlbmd0aF07CiB9CiAKLWJvb2wgZGVsZXRlTm9uRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjpuaWxdOwot
fQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIGJvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBG
b3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVt
R2xpYi5jcHAKaW5kZXggNjg3ZmExMGMyNjc1MzZjMDU4ZTc5MjRkYmVjYjkzYTcxMjQ4Zjg5MC4u
NjNkNWRhZjFhOTk0ZmY3MjBjYzk0MzAzYzFmM2M1MmJhNDRlNDA4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTExOCwyNCArMTE4LDYgQEAgU3RyaW5nIGZpbGVu
YW1lRm9yRGlzcGxheShjb25zdCBTdHJpbmcmIHN0cmluZykKICNlbmRpZgogfQogCi1ib29sIGZp
bGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRp
b24oZmlsZW5hbWUpID8gZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9F
WElTVFMpIDogZmFsc2U7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
Ci17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
LSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX3JlbW92ZShmaWxl
bmFtZS5kYXRhKCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmls
ZW5hbWUpID8gZ19ybWRpcihmaWxlbmFtZS5kYXRhKCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KIHN0
YXRpYyBib29sIGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRC
dWZmZXIpCiB7CiAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKQEAgLTE1NCwxNiArMTM2LDYgQEAgc3RhdGljIGJvb2wgZ2V0RmlsZUxTdGF0KGNvbnN0
IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiAgICAgcmV0dXJuIGdfbHN0YXQo
ZmlsZW5hbWUuZGF0YSgpLCBzdGF0QnVmZmVyKSAhPSAtMTsKIH0KIAotYm9vbCBnZXRGaWxlU2l6
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKLXsKLSAgICBHU3Rh
dEJ1ZiBzdGF0UmVzdWx0OwotICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5z
dF9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3Jt
RmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKIHsKICAgICBHUmVmUHRy
PEdGaWxlSW5mbz4gaW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfaW9fc3RyZWFtX3F1ZXJ5X2luZm8o
aGFuZGxlLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIG51bGxwdHIsIG51bGxwdHIp
KTsKQEAgLTI0MywzMCArMjE1LDExIEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRz
KFN0cmluZ1ZpZXcgcGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21wCiAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29u
c3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUp
ID8gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKSAhPSAtMSA6
IGZhbHNlOwotfQotCiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAgIHJldHVybiBz
dHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGdfZ2V0X2hvbWVfZGlyKCkpOwogfQog
Ci1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0
IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdldFBhdGhGU1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBpZiAoIXZhbGlk
UmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aEZTUmVwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ1N0cmluZyBzeW1ib2xpY0xpbmtQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oc3ltYm9saWNMaW5rUGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHN5
bWJvbGljTGlua1BhdGhGU1JlcCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biAhc3ltbGluayh0YXJnZXRQYXRoRlNSZXAuZGF0YSgpLCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAu
ZGF0YSgpKTsKLX0KLQogU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgp
CiB7CiAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
QEAgLTI3NywyMSArMjMwLDYgQEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcm
IHBhdGgpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOwogfQog
Ci1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBm
cmVlU3BhY2UpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUlu
Zm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmls
ZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIG51bGxwdHIsIG51bGxw
dHIpKTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBm
cmVlU3BhY2UgPSBnX2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQo
KSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUpOwotICAgIHJldHVybiAhIWZyZWVT
cGFjZTsKLX0KLQogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC00
MjgsNjIgKzM2Niw2IEBAIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgbW92
ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0g
ICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsK
LSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24ob2xkRmlsZW5hbWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKG5ld1BhdGgpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihuZXdGaWxlbmFtZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IG9sZEZpbGUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChvbGRGaWxlbmFtZS5kYXRhKCkpKTsKLSAgICBH
UmVmUHRyPEdGaWxlPiBuZXdGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobmV3
RmlsZW5hbWUuZGF0YSgpKSk7Ci0KLSAgICByZXR1cm4gZ19maWxlX21vdmUob2xkRmlsZS5nZXQo
KSwgbmV3RmlsZS5nZXQoKSwgR19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyKTsKLX0KLQotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAg
IHJldHVybiBDcmVhdGVIYXJkTGluayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEo
KSwgc291cmNlLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAg
YXV0byBzb3VyY2VGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwot
ICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihzb3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9u
KGRlc3RpbmF0aW9uRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gIWxpbmsoc291cmNlRmlsZW5hbWUuZGF0YSgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEo
KSk7Ci0jZW5kaWYKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNv
dXJjZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQg
bGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0jaWYgT1MoV0lORE9XUykKLSAg
ICByZXR1cm4gISE6OkNvcHlGaWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgZGVz
dGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIFRSVUUpOwotI2Vsc2UKLSAgICBhdXRv
IHNvdXJjZUZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAg
aWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHNvdXJjZUZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbkZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZGVz
dGluYXRpb25GaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8
R0ZpbGU+IHNvdXJjZUZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VG
aWxlbmFtZS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBkZXN0aW5hdGlvbkZpbGUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSkp
OwotICAgIHJldHVybiBnX2ZpbGVfY29weShzb3VyY2VGaWxlLmdldCgpLCBkZXN0aW5hdGlvbkZp
bGUuZ2V0KCksIEdfRklMRV9DT1BZX05PTkUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIpOwotI2VuZGlmCi19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChj
b25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZzRmlsZS5kYXRhKCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9w
b3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IDk5ZGNiZjIzZTkwZjBhZTEzNDIxY2EwYmIz
ZTI5MGMyOTVjZjEyOTcuLmJmZThmYWJiNmJmYzY3MGU0ZWU0YjMwZDhiM2M0OGU0NzlkYzVkMjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNDksMzYgKzQ5
LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKLWJv
b2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1Jl
cC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGFjY2Vzcyhmc1JlcC5kYXRhKCksIEZfT0spICE9IC0xOwotfQotCi1ib29sIGRlbGV0ZUZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRh
KClbMF0gPT0gJ1wwJykgewotICAgICAgICBMT0dfRVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0
ZS4gRmFpbGVkIHRvIGdldCBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIHRvIGNyZWF0ZSBDU3Ry
aW5nIGZyb20gY2ZTdHJpbmcgb3IgZmlsZXN5c3RlbSByZXByZXNlbnRhdGlvbiBpcyBhIG51bGwg
dmFsdWUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHVubGluaygu
Li4pIHJldHVybnMgMCBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uIG9mIHRoZSBwYXRoIGFuZCBub24t
emVybyBpbiBhbnkgb3RoZXIgY2FzZSAoaW5jbHVkaW5nIGludmFsaWQgcGVybWlzc2lvbnMgb3Ig
bm9uLWV4aXN0ZW50IGZpbGUpCi0gICAgYm9vbCB1bmxpbmtlZCA9ICF1bmxpbmsoZnNSZXAuZGF0
YSgpKTsKLSAgICBpZiAoIXVubGlua2VkICYmIGVycm5vICE9IEVOT0VOVCkKLSAgICAgICAgTE9H
X0VSUk9SKCJGaWxlIGZhaWxlZCB0byBkZWxldGUuIEVycm9yIG1lc3NhZ2U6ICVzIiwgc3RyZXJy
b3IoZXJybm8pKTsKLQotICAgIHJldHVybiB1bmxpbmtlZDsKLX0KLQogUGxhdGZvcm1GaWxlSGFu
ZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVB
Y2Nlc3NQZXJtaXNzaW9uIHBlcm1pc3Npb24sIGJvb2wgZmFpbElmRmlsZUV4aXN0cykKIHsKICAg
ICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtMTg2
LDM1ICsxNTYsNiBAQCBib29sIHVubG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkK
IH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKE1BQykKLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5k
YXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gcm1kaXIo
Li4uKSByZXR1cm5zIDAgb24gc3VjY2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9u
LXplcm8gaW4gYW55IG90aGVyIGNhc2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9y
IG5vbi1leGlzdGVudCBmaWxlKQotICAgIHJldHVybiAhcm1kaXIoZnNSZXAuZGF0YSgpKTsKLX0K
LSNlbmRpZgotCi1ib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25n
JiByZXN1bHQpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAn
XDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsK
LQotICAgIGlmIChzdGF0KGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmVzdWx0ID0gZmlsZUluZm8uc3Rfc2l6ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25n
IGxvbmcmIHJlc3VsdCkKIHsKICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKQEAgLTMwMCwxOSAr
MjQxLDYgQEAgT3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1s
aW5rcyhjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIGZpbGVNZXRhZGF0YVVzaW5nRnVu
Y3Rpb24ocGF0aCwgJnN0YXQpOwogfQogCi1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBT
dHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAg
ICBDU3RyaW5nIHRhcmdldFBhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJn
ZXRQYXRoKTsKLSAgICBpZiAoIXRhcmdldFBhdGhGU1JlcC5kYXRhKCkgfHwgdGFyZ2V0UGF0aEZT
UmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3Ry
aW5nIHN5bWJvbGljTGlua1BhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzeW1i
b2xpY0xpbmtQYXRoKTsKLSAgICBpZiAoIXN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRhKCkgfHwg
c3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN5bWxpbmsodGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSwgc3lt
Ym9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSk7Ci19Ci0KIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsK
ICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLycpKQpAQCAtMzI5LDM1ICsyNTcsNiBAQCBTdHJpbmcg
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNvbnN0IFZlY3RvcjxT
dHJpbmdWaWV3PiYgY29tcAogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLWJv
b2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBDU3RyaW5n
IGZ1bGxQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmICghYWNj
ZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Y2hhciogcCA9IGZ1bGxQYXRoLm11dGFibGVEYXRhKCkgKyAxOwotICAgIGludCBsZW5ndGggPSBm
dWxsUGF0aC5sZW5ndGgoKTsKLQotICAgIGlmIChwW2xlbmd0aCAtIDFdID09ICcvJykKLSAgICAg
ICAgcFtsZW5ndGggLSAxXSA9ICdcMCc7Ci0gICAgZm9yICg7ICpwOyArK3ApIHsKLSAgICAgICAg
aWYgKCpwID09ICcvJykgewotICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICAgICAgaWYg
KGFjY2VzcyhmdWxsUGF0aC5kYXRhKCksIEZfT0spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1r
ZGlyKGZ1bGxQYXRoLmRhdGEoKSwgU19JUldYVSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpwID0gJy8nOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkgewotICAgICAg
ICBpZiAobWtkaXIoZnVsbFBhdGguZGF0YSgpLCBTX0lSV1hVKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU3RyaW5nIHBhdGhHZXRG
aWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5n
KHBhdGgucmV2ZXJzZUZpbmQoJy8nKSArIDEpOwpAQCAtNDE5LDI5ICszMTgsNiBAQCBDU3RyaW5n
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiAjZW5kaWYKIAog
I2lmICFQTEFURk9STShDT0NPQSkKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRo
LCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKLSAgICBpZiAob2xkRmlsZW5hbWUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24obmV3UGF0aCk7Ci0gICAgaWYgKG5ld0ZpbGVuYW1lLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuYW1lKG9sZEZpbGVu
YW1lLmRhdGEoKSwgbmV3RmlsZW5hbWUuZGF0YSgpKSAhPSAtMTsKLX0KLQotYm9vbCBnZXRWb2x1
bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewot
ICAgIHN0cnVjdCBzdGF0dmZzIGZpbGVTeXN0ZW1TdGF0OwotICAgIGlmICghc3RhdHZmcyhmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCAmZmlsZVN5c3RlbVN0YXQpKSB7Ci0g
ICAgICAgIGZyZWVTcGFjZSA9IGZpbGVTeXN0ZW1TdGF0LmZfYmF2YWlsICogZmlsZVN5c3RlbVN0
YXQuZl9mcnNpemU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwg
UGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgc3VmZml4KQogewogICAg
IC8vIEZJWE1FOiBTdWZmaXggaXMgbm90IHN1cHBvcnRlZCwgYnV0IE9LIGZvciBub3cgc2luY2Ug
dGhlIGNvZGUgdXNpbmcgaXQgaXMgbWFjT1MtcG9ydC1vbmx5LgpAQCAtNDY4LDUzICszNDQsNiBA
QCBlbmQ6CiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCi1ib29sIGhhcmRMaW5rKGNv
bnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIGlm
IChzb3VyY2UuaXNFbXB0eSgpIHx8IGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihzb3VyY2UpOwotICAgIGlmICghZnNTb3VyY2UuZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIGZzRGVzdGluYXRpb24gPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
ZGVzdGluYXRpb24pOwotICAgIGlmICghZnNEZXN0aW5hdGlvbi5kYXRhKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhbGluayhmc1NvdXJjZS5kYXRhKCksIGZzRGVzdGlu
YXRpb24uZGF0YSgpKTsKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5r
KHNvdXJjZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhh
cmQgbGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0gICAgaWYgKHNvdXJjZS5p
c0VtcHR5KCkgfHwgZGVzdGluYXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7
Ci0gICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gZnNEZXN0aW5hdGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlv
bik7Ci0gICAgaWYgKCFmc0Rlc3RpbmF0aW9uLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byBoYW5kbGUgPSBvcGVuKGZzRGVzdGluYXRpb24uZGF0YSgpLCBPX1dST05M
WSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotICAgIGlmIChoYW5kbGUgPT0gLTEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNv
bnRlbnRzVG9GaWxlSGFuZGxlKHNvdXJjZSwgaGFuZGxlKTsKLSAgICBjbG9zZShoYW5kbGUpOwot
Ci0gICAgLy8gSWYgdGhlIGNvcHkgZmFpbGVkLCBkZWxldGUgdGhlIHVudXNhYmxlIGZpbGUuCi0g
ICAgaWYgKCFhcHBlbmRSZXN1bHQpCi0gICAgICAgIHVubGluayhmc0Rlc3RpbmF0aW9uLmRhdGEo
KSk7Ci0KLSAgICByZXR1cm4gYXBwZW5kUmVzdWx0OwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBn
ZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIHN0cnVjdCBzdGF0
IGZpbGVTdGF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4u
Y3BwIGIvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IGEwM2Y4YTQ2
NDRlZGI5MDc4MWZlNDM5YWY2YzAzNzllNWExMmE3YTAuLmZkNTlmMTkwM2U2ZTFmZTg0ZDE1OGQ1
NzVhOTYyOWVhYjkwMGM5ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lz
dGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAg
LTEwNSwxNSArMTA1LDYgQEAgc3RhdGljIHZvaWQgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWVGcm9t
RmluZERhdGEoY29uc3QgV0lOMzJfRklORF9EQVRBVyYgZmluZERhdGEKICAgICB0aW1lID0gZmls
ZVRpbWUuUXVhZFBhcnQgLyAxMDAwMDAwMCAtIGtTZWNvbmRzRnJvbUZpbGVUaW1lVG9UaW1ldDsK
IH0KIAotYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgc2l6
ZSkKLXsKLSAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmREYXRhOwotICAgIGlmICghZ2V0RmluZERh
dGEocGF0aCwgZmluZERhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
Z2V0RmlsZVNpemVGcm9tRmluZERhdGEoZmluZERhdGEsIHNpemUpOwotfQotCiBib29sIGdldEZp
bGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBsb25nIGxvbmcmIHNpemUpCiB7
CiAgICAgQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gZmlsZUluZm9ybWF0aW9uOwpAQCAtMjIw
LDM2ICsyMTEsNiBAQCBPcHRpb25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YUZvbGxvd2lu
Z1N5bWxpbmtzKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gZmluZERhdGFUb0ZpbGVN
ZXRhZGF0YShmaW5kRGF0YSk7CiB9CiAKLWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0
cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAg
IHJldHVybiA6OkNyZWF0ZVN5bWJvbGljTGlua1coc3ltYm9saWNMaW5rUGF0aC53aWRlQ2hhcmFj
dGVycygpLmRhdGEoKSwgdGFyZ2V0UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgMCk7Ci19
Ci0KLWJvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgV0lOMzJfRklO
RF9EQVRBVyBmaW5kRGF0YTsKLSAgICByZXR1cm4gZ2V0RmluZERhdGEocGF0aCwgZmluZERhdGEp
OwotfQotCi1ib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmlu
ZyBmaWxlbmFtZSA9IHBhdGg7Ci0gICAgcmV0dXJuICEhRGVsZXRlRmlsZVcoZmlsZW5hbWUud2lk
ZUNoYXJhY3RlcnMoKS5kYXRhKCkpOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNv
bnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIHJl
dHVybiAhIVJlbW92ZURpcmVjdG9yeVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCkp
OwotfQotCi1ib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5n
JiBuZXdQYXRoKQotewotICAgIFN0cmluZyBvbGRGaWxlbmFtZSA9IG9sZFBhdGg7Ci0gICAgU3Ry
aW5nIG5ld0ZpbGVuYW1lID0gbmV3UGF0aDsKLSAgICByZXR1cm4gISE6Ok1vdmVGaWxlRXgob2xk
RmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIG5ld0ZpbGVuYW1lLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBNT1ZFRklMRV9DT1BZX0FMTE9XRUQgfCBNT1ZFRklMRV9SRVBMQUNFX0VY
SVNUSU5HKTsKLX0KLQogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxVQ2hhcj4g
YnVmZmVyKE1BWF9QQVRIKTsKQEAgLTI5MSwxOSArMjUyLDYgQEAgQ1N0cmluZyBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogCiAjZW5kaWYgLy8gIVVTRShDRikK
IAotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0
cmluZyBmdWxsUGF0aCA9IHBhdGg7Ci0gICAgaWYgKFNIQ3JlYXRlRGlyZWN0b3J5RXgobnVsbHB0
ciwgZnVsbFBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpICE9IEVSUk9SX1NV
Q0NFU1MpIHsKLSAgICAgICAgRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAg
aWYgKGVycm9yICE9IEVSUk9SX0ZJTEVfRVhJU1RTICYmIGVycm9yICE9IEVSUk9SX0FMUkVBRFlf
RVhJU1RTKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcGF0aCAl
cyIsIHBhdGguYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiBTdHJpbmcgaG9tZURpcmVjdG9y
eVBhdGgoKQogewogICAgIHJldHVybiAiIjsKQEAgLTUxNCwyMCArNDYyLDYgQEAgaW50IHJlYWRG
cm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CiB9CiAKLWJvb2wgaGFy
ZExpbmsoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17
Ci0gICAgcmV0dXJuIENyZWF0ZUhhcmRMaW5rKGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCku
ZGF0YSgpLCBzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpOwotfQotCi1i
b29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoaGFyZExpbmsoc291cmNlLCBkZXN0aW5hdGlvbikp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9y
bSBhIGNvcHkgaW5zdGVhZC4KLSAgICByZXR1cm4gISE6OkNvcHlGaWxlKHNvdXJjZS53aWRlQ2hh
cmFjdGVycygpLmRhdGEoKSwgZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIFRS
VUUpOwotfQotCiBTdHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCkKIHsK
ICAgICByZXR1cm4gY2FjaGVkU3RvcmFnZURpcmVjdG9yeShDU0lETF9MT0NBTF9BUFBEQVRBKTsK
QEAgLTU1NywxNiArNDkxLDYgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBT
dHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVudHJp
ZXM7CiB9CiAKLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWlu
dDY0X3QmIGZyZWVTcGFjZSkKLXsKLSAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFi
bGVUb0NhbGxlcjsKLSAgICBpZiAoIUdldERpc2tGcmVlU3BhY2VFeFcocGF0aC53aWRlQ2hhcmFj
dGVycygpLmRhdGEoKSwgJmZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLCBudWxscHRyLCBudWxs
cHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZnJlZVNwYWNlID0gZnJlZUJ5dGVz
QXZhaWxhYmxlVG9DYWxsZXIuUXVhZFBhcnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE9wdGlv
bmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAg
ICAgYXV0byBoYW5kbGUgPSBvcGVuRmlsZShmc0ZpbGUuZGF0YSgpLCBGaWxlT3Blbk1vZGU6OlJl
YWQpOwpAQCAtNTk2LDIxICs1MjAsNiBAQCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5
KCkKICAgICB9KTsKIH0KIAotYm9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJp
bmcmIGRpcmVjdG9yeVBhdGgpCi17Ci0gICAgU0hGSUxFT1BTVFJVQ1QgZGVsZXRlT3BlcmF0aW9u
ID0gewotICAgICAgICBudWxscHRyLAotICAgICAgICBGT19ERUxFVEUsCi0gICAgICAgIGRpcmVj
dG9yeVBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksCi0gICAgICAgIEwiIiwKLSAgICAgICAg
Rk9GX05PQ09ORklSTUFUSU9OIHwgRk9GX05PRVJST1JVSSB8IEZPRl9TSUxFTlQsCi0gICAgICAg
IGZhbHNlLAotICAgICAgICBudWxscHRyLAotICAgICAgICBMIiIKLSAgICB9OwotICAgIHJldHVy
biAhU0hGaWxlT3BlcmF0aW9uKCZkZWxldGVPcGVyYXRpb24pOwotfQotCiBib29sIHVubWFwVmll
d09mRmlsZSh2b2lkKiBidWZmZXIsIHNpemVfdCkKIHsKICAgICByZXR1cm4gVW5tYXBWaWV3T2ZG
aWxlKGJ1ZmZlcik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggZDhhMzkyMjkzNTJhY2NlYjNlZDQxYzg4NDI1YjMwN2MzYjBhNmQyNC4uNGUxZWFm
N2FjNmNmMGNjMGRlNWI5MDk1ZmZkNzEwMDBjOWZjZjJhZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA0LTMw
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RhcnQgbGV2ZXJh
Z2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UgZm9y
IHRoZSBGaWxlU3lzdGVtIEFQSSB0aGF0IHdhcyBtb2RpZmllZC4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEZpbGVTeW1saW5rUGF0aCBjb25zdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyUGF0aCBj
b25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5
Rm9sZGVyU3ltbGlua1BhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5
c3RlbVRlc3Q6OnRlbXBFbXB0eUZpbGVQYXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkZpbGVTeXN0ZW1UZXN0OjpzcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6YmFuZ0NvbnRhaW5pbmdGaWxlUGF0
aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6cXVvdGVD
b250YWluaW5nRmlsZVBhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9G
KToKKwogMjAyMS0wNC0zMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgW3dlYmtpdHNjcHldIFN1cHBvcnQgYXJndW1lbnRzIHRvIFRhc2tQb29sIHNldHVw
IGFuZCB0ZWFyZG93bgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
RmlsZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVt
LmNwcAppbmRleCA4ZjY1MWQzZWFlMzQzMjk3NTFhYzM2MWRkN2UwNjRjYjYzN2UzNzUyLi5jMjkz
NWQyOTAyZTQ2ZmI4Y2JjYTIyNWQwNmU3ODYyNWM0ODFmNzJjIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLSAgICAgICAg
Ly8gY3JlYXRlIHRlbXAgZmlsZQorICAgICAgICAvLyBjcmVhdGUgdGVtcCBmaWxlLgogICAgICAg
ICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwogICAgICAgICBtX3RlbXBG
aWxlUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wVGVzdEZpbGUiLCBo
YW5kbGUpOwogICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIEZpbGVTeXN0
ZW1UZXN0RGF0YSwgc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwpAQCAtNTIsNiArNTIsMTgg
QEAgcHVibGljOgogICAgICAgICBtX3RlbXBGaWxlU3ltbGlua1BhdGggPSAidGVtcFRlc3RGaWxl
LXN5bWxpbmsiOwogICAgICAgICBGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsobV90ZW1w
RmlsZVBhdGgsIG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7CiAKKyAgICAgICAgLy8gQ3JlYXRlIHRl
bXAgZGlyZWN0b3J5LgorICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgdGVt
cG9yYXJ5RmlsZTsKKyAgICAgICAgbV90ZW1wRW1wdHlGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6
b3BlblRlbXBvcmFyeUZpbGUoInRlbXBFbXB0eUZvbGRlciIsIHRlbXBvcmFyeUZpbGUpOworICAg
ICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5
c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisKKyAgICAg
ICAgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3Jh
cnlGaWxlKCJ0ZW1wRW1wdHlGb2xkZXItc3ltbGluayIsIHRlbXBvcmFyeUZpbGUpOworICAgICAg
ICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7CisgICAgICAgIEZp
bGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhtX3RlbXBFbXB0eUZvbGRlclBhdGgsIG1fdGVt
cEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgpOworCiAgICAgICAgIG1fdGVtcEVtcHR5RmlsZVBhdGgg
PSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcEVtcHR5VGVzdEZpbGUiLCBoYW5k
bGUpOwogICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKIApAQCAtNjksMjIg
KzgxLDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
bV90ZW1wRmlsZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEZp
bGVTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5
KG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
bV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUobV90ZW1wRW1wdHlGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUobV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUobV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICB9CiAKLSAgICBjb25zdCBT
dHJpbmcmIHRlbXBGaWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiB0ZW1wRmlsZVN5bWxpbmtQYXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVN5bWxp
bmtQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIHsgcmV0dXJu
IG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmlu
Z0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNv
bnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRh
aW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBh
dGgoKSB7IHJldHVybiBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3Ry
aW5nJiB0ZW1wRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBGaWxlUGF0aDsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGVtcEZpbGVTeW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVt
cEZpbGVTeW1saW5rUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyUGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsgfQorICAgIGNvbnN0IFN0
cmluZyYgdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBF
bXB0eUZvbGRlclN5bWxpbmtQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxl
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0KKyAgICBjb25zdCBT
dHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUNv
bnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxl
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNv
bnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3F1
b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGVtcEZp
bGVQYXRoOwogICAgIFN0cmluZyBtX3RlbXBGaWxlU3ltbGlua1BhdGg7CisgICAgU3RyaW5nIG1f
dGVtcEVtcHR5Rm9sZGVyUGF0aDsKKyAgICBTdHJpbmcgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5r
UGF0aDsKICAgICBTdHJpbmcgbV90ZW1wRW1wdHlGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9zcGFj
ZUNvbnRhaW5pbmdGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRo
OwpAQCAtMTc2LDQgKzE5NCwyNDYgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVOb25F
bXB0eURpcmVjdG9yeSkKICAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0
ZW1wb3JhcnlUZXN0Rm9sZGVyKSk7CiB9CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUV4
aXN0cykKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxl
UGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmls
ZVN5bWxpbmtQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1w
RW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcykpKTsKK30KKworVEVTVF9GKEZp
bGVTeXN0ZW1UZXN0LCBkZWxldGVTeW1saW5rKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworCisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKworICAg
IC8vIFNob3VsZCBoYXZlIGRlbGV0ZWQgdGhlIHN5bWxpbmsgYnV0IG5vdCB0aGUgdGFyZ2V0IGZp
bGUuCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgo
KSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3lt
bGlua1BhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0ZUZpbGUpCit7
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkp
OworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRoKCkp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgo
KSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0
aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZGVsZXRlRW1wdHlEaXJlY3Rvcnkp
Cit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xk
ZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVj
dG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7
Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbW92ZUZpbGUpCit7CisgICAgYXV0byBkZXN0
aW5hdGlvbiA9IHRlbXBGaWxlUGF0aCgpICsgIi1tb3ZlZCI7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6bW92ZUZpbGUodGVtcEZpbGVQYXRoKCksIGRlc3RpbmF0aW9uKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCBkZXN0aW5hdGlv
bikpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIG1vdmVGaWxlT3ZlcndyaXRlc0Rlc3Rp
bmF0aW9uKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZp
bGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBF
bXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXpl
KSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmdldEZpbGVTaXplKHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAg
RVhQRUNUX1RSVUUoIWZpbGVTaXplKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1v
dmVGaWxlKHRlbXBGaWxlUGF0aCgpLCB0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNU
X0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKwor
ICAgIGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSh0ZW1wRW1wdHlGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6
ZSwgMCk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZ2V0RmlsZVNpemUpCit7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5RmlsZVBhdGgoKSkp
OworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1Rf
R1QoZmlsZVNpemUsIDApOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNp
emUodGVtcEVtcHR5RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRSghZmls
ZVNpemUpOworCisgICAgZmlsZVNpemUgPSAwOworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RF
eGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xk
ZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmdldEZpbGVTaXplKGZpbGVUaGF0RG9lc05vdEV4aXN0LCBmaWxlU2l6ZSkpOworICAgIEVY
UEVDVF9UUlVFKCFmaWxlU2l6ZSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUlz
RGlyZWN0b3J5KQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9y
eSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5
KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6WWVzKSk7CisKKyAgICBhdXRvIGZvbGRlclN5bWxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0
ZW06OmZpbGVNZXRhZGF0YSh0ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCgpKTsKKyAgICBFWFBF
Q1RfVFJVRSghIWZvbGRlclN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKGZvbGRlclN5
bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOwor
ICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9s
ZGVyU3ltbGlua1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6
Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVt
cHR5Rm9sZGVyU3ltbGlua1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6WWVzKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0
b3J5KHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
OjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVt
cEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Olllcykp
OworCisgICAgYXV0byBmaWxlU3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFk
YXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoISFmaWxlU3ltbGlu
a01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoZmlsZVN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmls
ZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpT
aG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpT
aG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKTsKKworICAgIFN0cmluZyBmaWxlVGhhdERv
ZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1w
dHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZp
bGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShmaWxlVGhhdERvZXNOb3RFeGlzdCwgRmlsZVN5c3Rl
bTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmls
ZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBGaWxlU3lzdGVt
OjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0
ZW1UZXN0LCBtYWtlQWxsRGlyZWN0b3JpZXMpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShG
aWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lz
dGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZp
bGVTeXN0ZW06Om1ha2VBbGxEaXJlY3Rvcmllcyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAg
ICBTdHJpbmcgc3ViRm9sZGVyUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCB7ICJzdWJGb2xkZXIxIiwgInN1YkZvbGRlcjIi
LCAic3ViRm9sZGVyMyIgfSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMoc3ViRm9sZGVyUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VBbGxE
aXJlY3RvcmllcyhzdWJGb2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhzdWJGb2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUlzRGlyZWN0b3J5KHN1YkZvbGRlclBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5
bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlTm9u
RW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNF
KEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOworfQorCitURVNUX0YoRmls
ZVN5c3RlbVRlc3QsIGdldFZvbHVtZUZyZWVTcGFjZSkKK3sKKyAgICB1aW50NjRfdCBmcmVlU3Bh
Y2UgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldFZvbHVtZUZyZWVTcGFjZSh0
ZW1wRmlsZVBhdGgoKSwgZnJlZVNwYWNlKSk7CisgICAgRVhQRUNUX0dUKGZyZWVTcGFjZSwgMFUp
OworCisgICAgU3RyaW5nIGZpbGVUaGF0RG9lc05vdEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0
Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Z2V0Vm9sdW1lRnJlZVNwYWNlKGZp
bGVUaGF0RG9lc05vdEV4aXN0LCBmcmVlU3BhY2UpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1U
ZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmspCit7CisgICAgYXV0byBzeW1saW5rUGF0aCA9IHRlbXBG
aWxlUGF0aCgpICsgIi1zeW1saW5rIjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmNyZWF0
ZVN5bWJvbGljTGluayh0ZW1wRmlsZVBhdGgoKSwgc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisKKyAgICBhdXRvIHN5
bWxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YShzeW1saW5rUGF0aCk7Cisg
ICAgRVhQRUNUX1RSVUUoISFzeW1saW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShzeW1saW5r
TWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc3ltbGlua1BhdGgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKK30KKwor
VEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGb2xkZXIpCit7CisgICAg
YXV0byBzeW1saW5rUGF0aCA9IHRlbXBFbXB0eUZvbGRlclBhdGgoKSArICItc3ltbGluayI7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsodGVtcEVtcHR5Rm9s
ZGVyUGF0aCgpLCBzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gRmls
ZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN5
bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmls
ZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworCisgICAgRVhQRUNUX0ZBTFNFKEZpbGVT
eXN0ZW06OmZpbGVJc0RpcmVjdG9yeShzeW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9s
bG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxl
SXNEaXJlY3Rvcnkoc3ltbGlua1BhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3M6OlllcykpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShz
eW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5
bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RW1wdHlGb2xkZXJQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVT
eW1ib2xpY0xpbmtGaWxlRG9lc05vdEV4aXN0KQoreworICAgIFN0cmluZyBmaWxlVGhhdERvZXNO
b3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlG
b2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoZmlsZVRoYXREb2VzTm90RXhpc3QpKTsKKworICAgIGF1dG8gc3lt
bGlua1BhdGggPSBmaWxlVGhhdERvZXNOb3RFeGlzdCArICItc3ltbGluayI7CisgICAgRVhQRUNU
X0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsoZmlsZVRoYXREb2VzTm90RXhpc3Qs
IHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
c3ltbGlua1BhdGgpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVIYXJkTGlu
aykKK3sKKyAgICBhdXRvIGhhcmRsaW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1oYXJkbGlu
ayI7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRo
KSk7CisKKyAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmdldEZpbGVTaXplKHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVD
VF9HVChmaWxlU2l6ZSwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpoYXJkTGlu
ayh0ZW1wRmlsZVBhdGgoKSwgaGFyZGxpbmtQYXRoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtG
aWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFy
ZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBm
aWxlU2l6ZSk7CisKKyAgICBhdXRvIGhhcmRsaW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxl
TWV0YWRhdGEoaGFyZGxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRh
dGEpOworICAgIEVYUEVDVF9FUShoYXJkbGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6
OlR5cGU6OkZpbGUpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0
ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsK
KyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7Cit9CisKK1RFU1RfRihGaWxl
U3lzdGVtVGVzdCwgY3JlYXRlSGFyZExpbmtPckNvcHlGaWxlKQoreworICAgIGF1dG8gaGFyZGxp
bmtQYXRoID0gdGVtcEZpbGVQYXRoKCkgKyAiLWhhcmRsaW5rIjsKKyAgICBFWFBFQ1RfRkFMU0Uo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxvbmcgbG9uZyBm
aWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVt
cEZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKwor
ICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmhhcmRMaW5rT3JDb3B5RmlsZSh0ZW1wRmlsZVBh
dGgoKSwgaGFyZGxpbmtQYXRoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtGaWxlU2l6ZSA9IDA7
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBs
aW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CisK
KyAgICBhdXRvIGhhcmRsaW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEoaGFy
ZGxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRhdGEpOworICAgIEVY
UEVDVF9FUShoYXJkbGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUp
OworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgo
KSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0
aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1Bh
dGgpKTsKKworICAgIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1Rf
RVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>
<flag name="commit-queue"
          id="448070"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427466</attachid>
            <date>2021-04-30 16:04:46 -0700</date>
            <delta_ts>2021-04-30 16:29:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210430160445.patch</filename>
            <type>text/plain</type>
            <size>45588</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li45
Y2YxNjJhNWFmYjI3MGVjMTc1NjdiZjFlOGY2N2M5MTQ1OGJkNGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCBsZXZl
cmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0gdG8gcmVkdWNlIHRoZSBh
bW91bnQgb2YKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVFeGlz
dHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlSXNE
aXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldFZvbHVtZUZyZWVTcGFjZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVTeW1ib2xpY0xpbmspOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6aGFyZExpbmspOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKiB3dGYvRmlsZVN5c3Rl
bS5oOgorICAgICAgICAqIHd0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW06CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAq
IHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorCiAy
MDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2luZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJh
eXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwppbmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcw
ZWUzNmQ5NGQxMDVmYTI1Li5jNGI0ZDY2Mzg1ZDUwYmYxNDFkYzJlNDJmNWUwYWQ3MWUyYzZjYzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNj
cmlwdENvcmUueGNjb25maWcKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9E
VUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUgPSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1v
ZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9M
REZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRf
YWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19a
VFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18x
OGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5j
dGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVT
M19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdi
YWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMx
MGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVfY2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFu
Z2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5
c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdp
bkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04
X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNf
Y3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3Ry
aW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0Ux
NV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFp
dHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJLVF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pO
U3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VF
TlNfOWVuYWJsZV9pZklYc3IyMV9faXNfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5
cGVFUk5TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJ
Y0VFRUVTOF9TOF87CiAKIE9USEVSX0xERkxBR1NfQkFTRSA9ICQoT1RIRVJfTERGTEFHU19ISURF
X1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEiOwogT1RIRVJfTERGTEFHU1tzZGs9ZW1iZWRkZWQq
XSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAyY2Q2M2RlNTcuLjE4YTE1ODI1
ODc3Y2NiYWM5NTg0NDM0YWEyNGEwNmM0OTI5MmI1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8d3RmL0ZpbGVT
eXN0ZW0uaD4KIAorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVNZXRhZGF0YS5oPgog
I2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KQEAgLTQ4LDYgKzQ5LDggQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKK25hbWVzcGFjZSBmcyA9IHN0ZDo6
ZmlsZXN5c3RlbTsKKwogLy8gVGhlIGZvbGxvd2luZyBsb3dlci1BU0NJSSBjaGFyYWN0ZXJzIG5l
ZWQgZXNjYXBpbmcgdG8gYmUgdXNlZCBpbiBhIGZpbGVuYW1lCiAvLyBhY3Jvc3MgYWxsIHN5c3Rl
bXMsIGluY2x1ZGluZyBXaW5kb3dzOgogLy8gICAgIC0gVW5wcmludGFibGUgQVNDSUkgKDAwLTFG
KQpAQCAtMzgyLDE0ICszODUsNiBAQCB2b2lkIHVubG9ja0FuZENsb3NlRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZShoYW5kbGUpOwogfQogCi1ib29sIGZpbGVJ
c0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mg
c2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAgICBhdXRvIG1ldGFkYXRhID0gc2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMgPyBm
aWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRoKSA6IGZpbGVNZXRhZGF0YShwYXRoKTsK
LSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1l
dGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGU6OkRpcmVjdG9yeTsKLX0K
LQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZv
clBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwyMCArNDAzLDYgQEAgU3RyaW5nIGNyZWF0
ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5nJikKIH0KICNlbmRpZgogCi0jaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZW50cmllcyA9IGxpc3REaXJlY3Rv
cnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7Ci0gICAg
ICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6
Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGVudHJ5KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7Ci0gICAgfQotICAgIHJldHVy
biBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0KLSNlbmRpZgotCiBNYXBwZWRGaWxlRGF0
YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlv
bjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+JiYg
YXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQogewogICAgIGNvbnN0ZXhw
ciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpAQCAtNTA0LDUgKzQ4NSwxMDcgQEAgT3B0
aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVy
biBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OmV4aXN0cyhmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHJldHVybiBm
czo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVjKTsKKyAg
ICByZXR1cm4gIWVjOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykKK2Jvb2wgZGVsZXRlRW1wdHlE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsK
KyAgICByZXR1cm4gZnM6OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0
YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKyNlbmRpZgorCitib29sIG1vdmVGaWxlKGNv
bnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIHN0ZDo6
ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6cmVuYW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihv
bGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKS5kYXRhKCks
IGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOwor
ICAgIGF1dG8gc2l6ZSA9IGZzOjpmaWxlX3NpemUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJlc3VsdCA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsZUlzRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91bGRG
b2xsb3dTeW1ib2xpY0xpbmtzKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6
ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
cyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpCisgICAgICAgIGZpbGVTdGF0dXMg
PSBmczo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVjKTsK
KyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3ltbGlua19zdGF0dXMoZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVybiBmaWxlU3Rh
dHVzLnR5cGUoKSA9PSBmczo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2Jvb2wgbWFrZUFs
bERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUg
ZWM7CisgICAgZnM6OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRWb2x1bWVG
cmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQoreworICAg
IHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5mbyA9IGZzOjpzcGFjZShmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJlZVNwYWNlID0gc3BhY2VJbmZvLmF2YWlsYWJsZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3Ry
aW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCit7CisgICAg
c3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfc3ltbGluayhmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
c3ltYm9saWNMaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9v
bCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgbGlua1Bh
dGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9saW5r
KGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30K
KworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25z
dCBTdHJpbmcmIGxpbmtQYXRoKQoreworICAgIGZzOjpwYXRoIGZzVGFyZ2V0UGF0aCA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCk7CisgICAgZnM6OnBhdGggZnNM
aW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpOworCisg
ICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9saW5rKGZzVGFyZ2V0
UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgZnM6OmNvcHlfZmlsZShmc1RhcmdldFBhdGgsIGZzTGlua1BhdGgsIGVjKTsKKyAg
ICByZXR1cm4gIWVjOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgZnM6OnJlbW92ZV9h
bGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVy
biAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUzY2JlZjQyZWRmNjVlZTAzZDhj
NWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0Nzk4OWEyNzUxMjA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYv
RmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
dW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CiAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90LgogV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0
aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgdGFy
Z2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBIYXJkIGxpbmtzIGEgZmlsZSBp
ZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGhh
cmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0
aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29u
c3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKTsKIAogI2lmIFVT
RShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBsb2NrRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL0Zp
bGVTeXN0ZW1Db2NvYS5tbQppbmRleCAxY2NlMTdkYzU5ZTIzM2M2YTU4MDAxZTFiNmM5MDhlODQ1
YTdjOTA2Li5jODUzN2VhMTczZTk5YmFiZGU3Zjc4YzlkM2NkYzgzYzFlM2EzNWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0KKysrIGIvU291cmNl
L1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCkBAIC0xMjYsMjkgKzEyNiw2IEBAIFN0
cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxl
SGFuZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcG9y
YXJ5RmlsZVBhdGguZGF0YSgpKTsKIH0KIAotYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9s
ZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICAvLyBPdmVyd3JpdGUgZXhpc3Rp
bmcgZmlsZXMuCi0gICAgYXV0byBtYW5hZ2VyID0gYWRvcHROUyhbW05TRmlsZU1hbmFnZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1dURldlYkZpbGVNYW5h
Z2VyRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbbWFuYWdlciBzZXREZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBib29sIHN1Y2Nl
c3MgPSBbbWFuYWdlciBtb3ZlSXRlbUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6b2xkUGF0
aF0gdG9VUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpuZXdQYXRoXSBlcnJvcjomZXJyb3JdOwot
ICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgTlNMb2coQCJFcnJvciBpbiBtb3ZlRmlsZTogJUAi
LCBlcnJvcik7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgZ2V0Vm9sdW1lRnJlZVNw
YWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKLXsKLSAgICBOU0Rp
Y3Rpb25hcnkgKmZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGljdGlvbmFyeSA9IFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mRmlsZVN5c3RlbUZvclBhdGg6KE5TU3RyaW5n
ICopcGF0aCBlcnJvcjpOVUxMXTsKLSAgICBpZiAoIWZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGljdGlv
bmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyZWVTcGFjZSA9IFtbZmlsZVN5c3Rl
bUF0dHJpYnV0ZXNEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZpbGVTeXN0ZW1GcmVlU2l6ZV0g
dW5zaWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogTlNTdHJpbmcg
KmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShOU1N0cmluZyAqZGlyZWN0b3J5UHJlZml4KQogewog
ICAgIE5TU3RyaW5nICp0ZW1wRGlyZWN0b3J5ID0gTlNUZW1wb3JhcnlEaXJlY3RvcnkoKTsKQEAg
LTE3OCwxMSArMTU1LDYgQEAgTlNTdHJpbmcgKmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShOU1N0
cmluZyAqZGlyZWN0b3J5UHJlZml4KQogICAgIHJldHVybiBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246cGF0aC5kYXRhKCkg
bGVuZ3RoOmxlbmd0aF07CiB9CiAKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjpuaWxdOwotfQotCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIGJvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUds
aWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKaW5kZXggNjg3
ZmExMGMyNjc1MzZjMDU4ZTc5MjRkYmVjYjkzYTcxMjQ4Zjg5MC4uNjNkNWRhZjFhOTk0ZmY3MjBj
Yzk0MzAzYzFmM2M1MmJhNDRlNDA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9G
aWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xp
Yi5jcHAKQEAgLTExOCwyNCArMTE4LDYgQEAgU3RyaW5nIGZpbGVuYW1lRm9yRGlzcGxheShjb25z
dCBTdHJpbmcmIHN0cmluZykKICNlbmRpZgogfQogCi1ib29sIGZpbGVFeGlzdHMoY29uc3QgU3Ry
aW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19m
aWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpIDogZmFsc2U7Ci19
Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRS
ZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpICE9IC0x
IDogZmFsc2U7Ci19Ci0KLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19ybWRpcihm
aWxlbmFtZS5kYXRhKCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29sIGdldEZpbGVT
dGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7CiAgICAgYXV0
byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE1NCwxNiAr
MTM2LDYgQEAgc3RhdGljIGJvb2wgZ2V0RmlsZUxTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0
YXRCdWYqIHN0YXRCdWZmZXIpCiAgICAgcmV0dXJuIGdfbHN0YXQoZmlsZW5hbWUuZGF0YSgpLCBz
dGF0QnVmZmVyKSAhPSAtMTsKIH0KIAotYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKLXsKLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0Owot
ICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIHJldHVy
biB0cnVlOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUs
IGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKIHsKICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5mbyA9
IGFkb3B0R1JlZihnX2ZpbGVfaW9fc3RyZWFtX3F1ZXJ5X2luZm8oaGFuZGxlLCBHX0ZJTEVfQVRU
UklCVVRFX1NUQU5EQVJEX1NJWkUsIG51bGxwdHIsIG51bGxwdHIpKTsKQEAgLTI0MywzMCArMjE1
LDExIEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKFN0cmluZ1ZpZXcgcGF0aCwg
Y29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21wCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIAotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQot
ewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0g
ICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19ta2Rpcl93aXRoX3Bh
cmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKSAhPSAtMSA6IGZhbHNlOwotfQotCiBTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAgIHJldHVybiBzdHJpbmdGcm9tRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKGdfZ2V0X2hvbWVfZGlyKCkpOwogfQogCi1ib29sIGNyZWF0ZVN5bWJv
bGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgc3ltYm9saWNM
aW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdldFBhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24odGFy
Z2V0UGF0aEZTUmVwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBzeW1i
b2xpY0xpbmtQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5r
UGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1BhdGhGU1Jl
cCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhc3ltbGluayh0YXJnZXRQ
YXRoRlNSZXAuZGF0YSgpLCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpKTsKLX0KLQogU3Ry
aW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTI3NywyMSArMjMwLDYg
QEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOwogfQogCi1ib29sIGdldFZvbHVtZUZy
ZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0gICAg
YXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAo
IXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
ZmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRv
cHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmlsZS5nZXQoKSwgR19GSUxFX0FU
VFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBpZiAoIWZp
bGVJbmZvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmcmVlU3BhY2UgPSBnX2ZpbGVf
aW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgR19GSUxFX0FUVFJJQlVU
RV9GSUxFU1lTVEVNX0ZSRUUpOwotICAgIHJldHVybiAhIWZyZWVTcGFjZTsKLX0KLQogU3RyaW5n
IGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8gZmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC00MjgsNjIgKzM2Niw2IEBAIGlu
dCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5n
JiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVw
cmVzZW50YXRpb24ob2xkRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG5ld1BhdGgpOwotICAg
IGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihuZXdGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IG9sZEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfcGF0aChvbGRGaWxlbmFtZS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBuZXdG
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobmV3RmlsZW5hbWUuZGF0YSgpKSk7
Ci0KLSAgICByZXR1cm4gZ19maWxlX21vdmUob2xkRmlsZS5nZXQoKSwgbmV3RmlsZS5nZXQoKSwg
R19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
KTsKLX0KLQotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbikKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBDcmVhdGVIYXJk
TGluayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgc291cmNlLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAgYXV0byBzb3VyY2VGaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghdmFsaWRSZXBy
ZXNlbnRhdGlvbihzb3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gZGVzdGluYXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0
aW5hdGlvbik7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uRmlsZW5h
bWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIWxpbmsoc291cmNlRmls
ZW5hbWUuZGF0YSgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSk7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRpb24p
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBlcmZv
cm0gYSBjb3B5IGluc3RlYWQuCi0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gISE6OkNvcHlG
aWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgZGVzdGluYXRpb24ud2lkZUNoYXJh
Y3RlcnMoKS5kYXRhKCksIFRSVUUpOwotI2Vsc2UKLSAgICBhdXRvIHNvdXJjZUZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2Vu
dGF0aW9uKHNvdXJjZUZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBkZXN0aW5hdGlvbkZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0
aW9uKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb25GaWxlbmFtZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZUZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VGaWxlbmFtZS5kYXRhKCkpKTsK
LSAgICBHUmVmUHRyPEdGaWxlPiBkZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfcGF0aChkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSkpOwotICAgIHJldHVybiBnX2Zp
bGVfY29weShzb3VyY2VGaWxlLmdldCgpLCBkZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9D
T1BZX05PTkUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwotI2VuZGlmCi19
Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0Zp
bGUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zv
cl9wYXRoKGZzRmlsZS5kYXRhKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4
L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCmluZGV4IDk5ZGNiZjIzZTkwZjBhZTEzNDIxY2EwYmIzZTI5MGMyOTVjZjEyOTcuLmJm
ZThmYWJiNmJmYzY3MGU0ZWU0YjMwZDhiM2M0OGU0NzlkYzVkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNDksMzYgKzQ5LDYgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKLWJvb2wgZmlsZUV4aXN0cyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1ww
JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFjY2Vzcyhmc1JlcC5kYXRh
KCksIEZfT0spICE9IC0xOwotfQotCi1ib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7
Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykgewot
ICAgICAgICBMT0dfRVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0ZS4gRmFpbGVkIHRvIGdldCBm
aWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIHRvIGNyZWF0ZSBDU3RyaW5nIGZyb20gY2ZTdHJpbmcg
b3IgZmlsZXN5c3RlbSByZXByZXNlbnRhdGlvbiBpcyBhIG51bGwgdmFsdWUiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHVubGluayguLi4pIHJldHVybnMgMCBvbiBz
dWNjZXNzZnVsIGRlbGV0aW9uIG9mIHRoZSBwYXRoIGFuZCBub24temVybyBpbiBhbnkgb3RoZXIg
Y2FzZSAoaW5jbHVkaW5nIGludmFsaWQgcGVybWlzc2lvbnMgb3Igbm9uLWV4aXN0ZW50IGZpbGUp
Ci0gICAgYm9vbCB1bmxpbmtlZCA9ICF1bmxpbmsoZnNSZXAuZGF0YSgpKTsKLSAgICBpZiAoIXVu
bGlua2VkICYmIGVycm5vICE9IEVOT0VOVCkKLSAgICAgICAgTE9HX0VSUk9SKCJGaWxlIGZhaWxl
ZCB0byBkZWxldGUuIEVycm9yIG1lc3NhZ2U6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQotICAg
IHJldHVybiB1bmxpbmtlZDsKLX0KLQogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBl
cm1pc3Npb24sIGJvb2wgZmFpbElmRmlsZUV4aXN0cykKIHsKICAgICBDU3RyaW5nIGZzUmVwID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtMTg2LDM1ICsxNTYsNiBAQCBib29s
IHVubG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkKIH0KICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKE1BQykKLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gcm1kaXIoLi4uKSByZXR1cm5zIDAgb24g
c3VjY2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9uLXplcm8gaW4gYW55IG90aGVy
IGNhc2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9yIG5vbi1leGlzdGVudCBmaWxl
KQotICAgIHJldHVybiAhcm1kaXIoZnNSZXAuZGF0YSgpKTsKLX0KLSNlbmRpZgotCi1ib29sIGdl
dEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCi17Ci0gICAg
Q1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlm
ICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKLQotICAgIGlmIChzdGF0KGZz
UmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVz
dWx0ID0gZmlsZUluZm8uc3Rfc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBnZXRG
aWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcmIHJlc3VsdCkKIHsK
ICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKQEAgLTMwMCwxOSArMjQxLDYgQEAgT3B0aW9uYWw8
RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhjb25zdCBTdHJpbmcm
IHBhdGgpCiAgICAgcmV0dXJuIGZpbGVNZXRhZGF0YVVzaW5nRnVuY3Rpb24ocGF0aCwgJnN0YXQp
OwogfQogCi1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgs
IGNvbnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdldFBh
dGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBpZiAo
IXRhcmdldFBhdGhGU1JlcC5kYXRhKCkgfHwgdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKVswXSA9PSAn
XDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIHN5bWJvbGljTGlua1Bh
dGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoKTsKLSAg
ICBpZiAoIXN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRhKCkgfHwgc3ltYm9saWNMaW5rUGF0aEZT
UmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gIXN5bWxpbmsodGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZTUmVw
LmRhdGEoKSk7Ci19Ci0KIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsKICAgICBpZiAocGF0aC5lbmRz
V2l0aCgnLycpKQpAQCAtMzI5LDM1ICsyNTcsNiBAQCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNvbnN0IFZlY3RvcjxTdHJpbmdWaWV3PiYgY29tcAog
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLWJvb2wgbWFrZUFsbERpcmVjdG9y
aWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBDU3RyaW5nIGZ1bGxQYXRoID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmICghYWNjZXNzKGZ1bGxQYXRoLmRhdGEo
KSwgRl9PSykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2hhciogcCA9IGZ1bGxQYXRo
Lm11dGFibGVEYXRhKCkgKyAxOwotICAgIGludCBsZW5ndGggPSBmdWxsUGF0aC5sZW5ndGgoKTsK
LQotICAgIGlmIChwW2xlbmd0aCAtIDFdID09ICcvJykKLSAgICAgICAgcFtsZW5ndGggLSAxXSA9
ICdcMCc7Ci0gICAgZm9yICg7ICpwOyArK3ApIHsKLSAgICAgICAgaWYgKCpwID09ICcvJykgewot
ICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICAgICAgaWYgKGFjY2VzcyhmdWxsUGF0aC5k
YXRhKCksIEZfT0spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRoLmRhdGEo
KSwgU19JUldYVSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICpwID0gJy8nOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChh
Y2Nlc3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkgewotICAgICAgICBpZiAobWtkaXIoZnVsbFBh
dGguZGF0YSgpLCBTX0lSV1hVKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJp
bmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQo
Jy8nKSArIDEpOwpAQCAtNDE5LDI5ICszMTgsNiBAQCBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiAjZW5kaWYKIAogI2lmICFQTEFURk9STShDT0NP
QSkKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5l
d1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihvbGRQYXRoKTsKLSAgICBpZiAob2xkRmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24obmV3UGF0aCk7Ci0gICAgaWYgKG5ld0ZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuYW1lKG9sZEZpbGVuYW1lLmRhdGEoKSwgbmV3Rmls
ZW5hbWUuZGF0YSgpKSAhPSAtMTsKLX0KLQotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewotICAgIHN0cnVjdCBzdGF0dmZz
IGZpbGVTeXN0ZW1TdGF0OwotICAgIGlmICghc3RhdHZmcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpLCAmZmlsZVN5c3RlbVN0YXQpKSB7Ci0gICAgICAgIGZyZWVTcGFjZSA9
IGZpbGVTeXN0ZW1TdGF0LmZfYmF2YWlsICogZmlsZVN5c3RlbVN0YXQuZl9mcnNpemU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFN0cmluZyBv
cGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgc3VmZml4KQogewogICAgIC8vIEZJWE1FOiBTdWZmaXgg
aXMgbm90IHN1cHBvcnRlZCwgYnV0IE9LIGZvciBub3cgc2luY2UgdGhlIGNvZGUgdXNpbmcgaXQg
aXMgbWFjT1MtcG9ydC1vbmx5LgpAQCAtNDY4LDUzICszNDQsNiBAQCBlbmQ6CiB9CiAjZW5kaWYg
Ly8gIVBMQVRGT1JNKENPQ09BKQogCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgp
IHx8IGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlm
ICghZnNTb3VyY2UuZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZz
RGVzdGluYXRpb24gPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOwotICAg
IGlmICghZnNEZXN0aW5hdGlvbi5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiAhbGluayhmc1NvdXJjZS5kYXRhKCksIGZzRGVzdGluYXRpb24uZGF0YSgpKTsKLX0K
LQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRp
b24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBl
cmZvcm0gYSBjb3B5IGluc3RlYWQuCi0gICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVzdGlu
YXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZzU291
cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAgaWYgKCFmc1NvdXJj
ZS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZnNEZXN0aW5hdGlv
biA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgaWYgKCFmc0Rl
c3RpbmF0aW9uLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBoYW5k
bGUgPSBvcGVuKGZzRGVzdGluYXRpb24uZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VY
Q0wsIDA2NjYpOwotICAgIGlmIChoYW5kbGUgPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxl
KHNvdXJjZSwgaGFuZGxlKTsKLSAgICBjbG9zZShoYW5kbGUpOwotCi0gICAgLy8gSWYgdGhlIGNv
cHkgZmFpbGVkLCBkZWxldGUgdGhlIHVudXNhYmxlIGZpbGUuCi0gICAgaWYgKCFhcHBlbmRSZXN1
bHQpCi0gICAgICAgIHVubGluayhmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICByZXR1cm4g
YXBwZW5kUmVzdWx0OwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29u
c3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93
dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IGEwM2Y4YTQ2NDRlZGI5MDc4MWZlNDM5YWY2
YzAzNzllNWExMmE3YTAuLmZkNTlmMTkwM2U2ZTFmZTg0ZDE1OGQ1NzVhOTYyOWVhYjkwMGM5ZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTEwNSwxNSArMTA1LDYgQEAg
c3RhdGljIHZvaWQgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWVGcm9tRmluZERhdGEoY29uc3QgV0lO
MzJfRklORF9EQVRBVyYgZmluZERhdGEKICAgICB0aW1lID0gZmlsZVRpbWUuUXVhZFBhcnQgLyAx
MDAwMDAwMCAtIGtTZWNvbmRzRnJvbUZpbGVUaW1lVG9UaW1ldDsKIH0KIAotYm9vbCBnZXRGaWxl
U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgc2l6ZSkKLXsKLSAgICBXSU4zMl9G
SU5EX0RBVEFXIGZpbmREYXRhOwotICAgIGlmICghZ2V0RmluZERhdGEocGF0aCwgZmluZERhdGEp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZ2V0RmlsZVNpemVGcm9tRmlu
ZERhdGEoZmluZERhdGEsIHNpemUpOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmls
ZUhhbmRsZSBmaWxlSGFuZGxlLCBsb25nIGxvbmcmIHNpemUpCiB7CiAgICAgQllfSEFORExFX0ZJ
TEVfSU5GT1JNQVRJT04gZmlsZUluZm9ybWF0aW9uOwpAQCAtMjIwLDM2ICsyMTEsNiBAQCBPcHRp
b25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxpbmtzKGNvbnN0IFN0
cmluZyYgcGF0aCkKICAgICByZXR1cm4gZmluZERhdGFUb0ZpbGVNZXRhZGF0YShmaW5kRGF0YSk7
CiB9CiAKLWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwg
Y29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAgIHJldHVybiA6OkNyZWF0ZVN5
bWJvbGljTGlua1coc3ltYm9saWNMaW5rUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgdGFy
Z2V0UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgMCk7Ci19Ci0KLWJvb2wgZmlsZUV4aXN0
cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0YTsK
LSAgICByZXR1cm4gZ2V0RmluZERhdGEocGF0aCwgZmluZERhdGEpOwotfQotCi1ib29sIGRlbGV0
ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmaWxlbmFtZSA9IHBhdGg7
Ci0gICAgcmV0dXJuICEhRGVsZXRlRmlsZVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRh
KCkpOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIHJldHVybiAhIVJlbW92ZURpcmVj
dG9yeVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCkpOwotfQotCi1ib29sIG1vdmVG
aWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewotICAg
IFN0cmluZyBvbGRGaWxlbmFtZSA9IG9sZFBhdGg7Ci0gICAgU3RyaW5nIG5ld0ZpbGVuYW1lID0g
bmV3UGF0aDsKLSAgICByZXR1cm4gISE6Ok1vdmVGaWxlRXgob2xkRmlsZW5hbWUud2lkZUNoYXJh
Y3RlcnMoKS5kYXRhKCksIG5ld0ZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBNT1ZF
RklMRV9DT1BZX0FMTE9XRUQgfCBNT1ZFRklMRV9SRVBMQUNFX0VYSVNUSU5HKTsKLX0KLQogU3Ry
aW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsK
QEAgLTI5MSwxOSArMjUyLDYgQEAgQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiBwYXRoKQogCiAjZW5kaWYgLy8gIVVTRShDRikKIAotYm9vbCBtYWtlQWxsRGly
ZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmdWxsUGF0aCA9IHBh
dGg7Ci0gICAgaWYgKFNIQ3JlYXRlRGlyZWN0b3J5RXgobnVsbHB0ciwgZnVsbFBhdGgud2lkZUNo
YXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpICE9IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAg
RFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEVSUk9S
X0ZJTEVfRVhJU1RTICYmIGVycm9yICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcGF0aCAlcyIsIHBhdGguYXNjaWkoKS5k
YXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAgIHJl
dHVybiAiIjsKQEAgLTUxNCwyMCArNDYyLDYgQEAgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CiB9CiAKLWJvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgcmV0dXJuIENyZWF0
ZUhhcmRMaW5rKGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBzb3VyY2Uud2lk
ZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpOwotfQotCi1ib29sIGhhcmRMaW5rT3JDb3B5
RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsK
LSAgICBpZiAoaGFyZExpbmsoc291cmNlLCBkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4K
LSAgICByZXR1cm4gISE6OkNvcHlGaWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwg
ZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIFRSVUUpOwotfQotCiBTdHJpbmcg
bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCkKIHsKICAgICByZXR1cm4gY2FjaGVk
U3RvcmFnZURpcmVjdG9yeShDU0lETF9MT0NBTF9BUFBEQVRBKTsKQEAgLTU1NywxNiArNDkxLDYg
QEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwg
Y29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wgZ2V0
Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkK
LXsKLSAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlcjsKLSAgICBp
ZiAoIUdldERpc2tGcmVlU3BhY2VFeFcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgJmZy
ZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZnJlZVNwYWNlID0gZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIu
UXVhZFBhcnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdldEZp
bGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAgICAgYXV0byBoYW5kbGUgPSBv
cGVuRmlsZShmc0ZpbGUuZGF0YSgpLCBGaWxlT3Blbk1vZGU6OlJlYWQpOwpAQCAtNTk2LDIxICs1
MjAsNiBAQCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCkKICAgICB9KTsKIH0KIAot
Ym9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgp
Ci17Ci0gICAgU0hGSUxFT1BTVFJVQ1QgZGVsZXRlT3BlcmF0aW9uID0gewotICAgICAgICBudWxs
cHRyLAotICAgICAgICBGT19ERUxFVEUsCi0gICAgICAgIGRpcmVjdG9yeVBhdGgud2lkZUNoYXJh
Y3RlcnMoKS5kYXRhKCksCi0gICAgICAgIEwiIiwKLSAgICAgICAgRk9GX05PQ09ORklSTUFUSU9O
IHwgRk9GX05PRVJST1JVSSB8IEZPRl9TSUxFTlQsCi0gICAgICAgIGZhbHNlLAotICAgICAgICBu
dWxscHRyLAotICAgICAgICBMIiIKLSAgICB9OwotICAgIHJldHVybiAhU0hGaWxlT3BlcmF0aW9u
KCZkZWxldGVPcGVyYXRpb24pOwotfQotCiBib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKIHsKICAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGJ1ZmZlcik7CmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDhhMzkyMjkz
NTJhY2NlYjNlZDQxYzg4NDI1YjMwN2MzYjBhNmQyNC4uNGUxZWFmN2FjNmNmMGNjMGRlNWI5MDk1
ZmZkNzEwMDBjOWZjZjJhZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0
ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjUyNTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UgZm9yIHRoZSBGaWxlU3lzdGVtIEFQ
SSB0aGF0IHdhcyBtb2RpZmllZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6
OnRlbXBGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVt
VGVzdDo6dGVtcEZpbGVTeW1saW5rUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyUGF0aCBjb25zdCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgg
Y29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBFbXB0
eUZpbGVQYXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0
OjpzcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpGaWxlU3lzdGVtVGVzdDo6YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6cXVvdGVDb250YWluaW5nRmlsZVBhdGgg
Y29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAyMS0wNC0zMCAg
Sm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNj
cHldIFN1cHBvcnQgYXJndW1lbnRzIHRvIFRhc2tQb29sIHNldHVwIGFuZCB0ZWFyZG93bgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCA4ZjY1MWQz
ZWFlMzQzMjk3NTFhYzM2MWRkN2UwNjRjYjYzN2UzNzUyLi5jMjkzNWQyOTAyZTQ2ZmI4Y2JjYTIy
NWQwNmU3ODYyNWM0ODFmNzJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9GaWxlU3lzdGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBX
VEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLSAgICAgICAgLy8gY3JlYXRlIHRlbXAgZmls
ZQorICAgICAgICAvLyBjcmVhdGUgdGVtcCBmaWxlLgogICAgICAgICBGaWxlU3lzdGVtOjpQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwogICAgICAgICBtX3RlbXBGaWxlUGF0aCA9IEZpbGVTeXN0
ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wVGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBG
aWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3RybGVu
KEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwpAQCAtNTIsNiArNTIsMTggQEAgcHVibGljOgogICAgICAg
ICBtX3RlbXBGaWxlU3ltbGlua1BhdGggPSAidGVtcFRlc3RGaWxlLXN5bWxpbmsiOwogICAgICAg
ICBGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsobV90ZW1wRmlsZVBhdGgsIG1fdGVtcEZp
bGVTeW1saW5rUGF0aCk7CiAKKyAgICAgICAgLy8gQ3JlYXRlIHRlbXAgZGlyZWN0b3J5LgorICAg
ICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgdGVtcG9yYXJ5RmlsZTsKKyAgICAg
ICAgbV90ZW1wRW1wdHlGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUo
InRlbXBFbXB0eUZvbGRlciIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpj
bG9zZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
bV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVj
dG9yaWVzKG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisKKyAgICAgICAgbV90ZW1wRW1wdHlGb2xk
ZXJTeW1saW5rUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlG
b2xkZXItc3ltbGluayIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90
ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5
bWJvbGljTGluayhtX3RlbXBFbXB0eUZvbGRlclBhdGgsIG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlu
a1BhdGgpOworCiAgICAgICAgIG1fdGVtcEVtcHR5RmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVu
VGVtcG9yYXJ5RmlsZSgidGVtcEVtcHR5VGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxl
U3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKIApAQCAtNjksMjIgKzgxLDI4IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRmlsZVBhdGgpOwog
ICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7Cisg
ICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fdGVtcEVtcHR5Rm9sZGVy
UGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJT
eW1saW5rUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlG
aWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zcGFjZUNvbnRhaW5p
bmdGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9iYW5nQ29udGFp
bmluZ0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3F1b3RlQ29u
dGFpbmluZ0ZpbGVQYXRoKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRlbXBGaWxlUGF0
aCgpIHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRmls
ZVN5bWxpbmtQYXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVN5bWxpbmtQYXRoOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBh
dGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1
cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFuZ0Nv
bnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQot
ICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX3F1
b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3RlbXBGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVt
cEZpbGVTeW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEZpbGVTeW1saW5rUGF0aDsg
fQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyUGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9s
ZGVyU3ltbGlua1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQ
YXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFp
bmluZ0ZpbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsg
fQorICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgcXVvdGVD
b250YWluaW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQ
YXRoOyB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVQYXRoOwogICAgIFN0cmlu
ZyBtX3RlbXBGaWxlU3ltbGlua1BhdGg7CisgICAgU3RyaW5nIG1fdGVtcEVtcHR5Rm9sZGVyUGF0
aDsKKyAgICBTdHJpbmcgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aDsKICAgICBTdHJpbmcg
bV90ZW1wRW1wdHlGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0
aDsKICAgICBTdHJpbmcgbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOwpAQCAtMTc2LDQgKzE5NCwy
NDYgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVOb25FbXB0eURpcmVjdG9yeSkKICAg
ICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wb3JhcnlUZXN0Rm9sZGVy
KSk7CiB9CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUV4aXN0cykKK3sKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRo
KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZv
bGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCks
ICJkb2VzLW5vdC1leGlzdCJfcykpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxl
dGVTeW1saW5rKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVt
cEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRl
bXBGaWxlU3ltbGlua1BhdGgoKSkpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKworICAgIC8vIFNob3VsZCBoYXZlIGRl
bGV0ZWQgdGhlIHN5bWxpbmsgYnV0IG5vdCB0aGUgdGFyZ2V0IGZpbGUuCisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9G
QUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworfQor
CitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0ZUZpbGUpCit7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9G
QUxTRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgpKSk7Cit9CisKK1RFU1Rf
RihGaWxlU3lzdGVtVGVzdCwgZGVsZXRlRW1wdHlEaXJlY3RvcnkpCit7CisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xk
ZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZGVsZXRl
RW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxl
U3lzdGVtVGVzdCwgbW92ZUZpbGUpCit7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IHRlbXBGaWxl
UGF0aCgpICsgIi1tb3ZlZCI7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6bW92ZUZpbGUo
dGVtcEZpbGVQYXRoKCksIGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCBkZXN0aW5hdGlvbikpOworfQorCitURVNUX0Yo
RmlsZVN5c3RlbVRlc3QsIG1vdmVGaWxlT3ZlcndyaXRlc0Rlc3RpbmF0aW9uKQoreworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsK
KworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dU
KGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX1RSVUUoIWZpbGVT
aXplKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0
aCgpLCB0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06
OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGZpbGVTaXplID0gMDsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRW1wdHlGaWxlUGF0
aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7Cit9CisKK1RFU1Rf
RihGaWxlU3lzdGVtVGVzdCwgZ2V0RmlsZVNpemUpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5RmlsZVBhdGgoKSkpOworCisgICAgbG9uZyBsb25n
IGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0
ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOwor
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBh
dGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRSghZmlsZVNpemUpOworCisgICAgZmls
ZVNpemUgPSAwOworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5v
dC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGZp
bGVUaGF0RG9lc05vdEV4aXN0LCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxlU2l6
ZSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUlzRGlyZWN0b3J5KQoreworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQ
YXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclBh
dGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisKKyAg
ICBhdXRvIGZvbGRlclN5bWxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YSh0
ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIWZvbGRlclN5
bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKGZvbGRlclN5bWxpbmtNZXRhZGF0YS0+dHlw
ZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgoKSwg
RmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyU3ltbGlua1Bh
dGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisKKyAg
ICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlUGF0aCgp
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEZpbGVQYXRoKCksIEZpbGVT
eXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgYXV0byBmaWxl
U3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlu
a1BhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoISFmaWxlU3ltbGlua01ldGFkYXRhKTsKKyAgICBF
WFBFQ1RfRVEoZmlsZVN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpT
eW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rv
cnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xp
Y0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rv
cnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xp
Y0xpbmtzOjpZZXMpKTsKKworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVT
eXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJk
b2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0Rp
cmVjdG9yeShmaWxlVGhhdERvZXNOb3RFeGlzdCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGly
ZWN0b3J5KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpZZXMpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBtYWtlQWxsRGly
ZWN0b3JpZXMpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNE
aXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dT
eW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VBbGxE
aXJlY3Rvcmllcyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBTdHJpbmcgc3ViRm9sZGVy
UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHModGVtcEVtcHR5Rm9s
ZGVyUGF0aCgpLCB7ICJzdWJGb2xkZXIxIiwgInN1YkZvbGRlcjIiLCAic3ViRm9sZGVyMyIgfSk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkp
OworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhzdWJGb2xk
ZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdWJGb2xk
ZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHN1
YkZvbGRlclBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkodGVt
cEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoc3ViRm9sZGVyUGF0aCkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGdldFZv
bHVtZUZyZWVTcGFjZSkKK3sKKyAgICB1aW50NjRfdCBmcmVlU3BhY2UgPSAwOworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmdldFZvbHVtZUZyZWVTcGFjZSh0ZW1wRmlsZVBhdGgoKSwgZnJl
ZVNwYWNlKSk7CisgICAgRVhQRUNUX0dUKGZyZWVTcGFjZSwgMFUpOworCisgICAgU3RyaW5nIGZp
bGVUaGF0RG9lc05vdEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoRmlsZVN5c3RlbTo6Z2V0Vm9sdW1lRnJlZVNwYWNlKGZpbGVUaGF0RG9lc05vdEV4aXN0
LCBmcmVlU3BhY2UpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xp
Y0xpbmspCit7CisgICAgYXV0byBzeW1saW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1zeW1s
aW5rIjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0
aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayh0ZW1w
RmlsZVBhdGgoKSwgc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisKKyAgICBhdXRvIHN5bWxpbmtNZXRhZGF0YSA9IEZp
bGVTeXN0ZW06OmZpbGVNZXRhZGF0YShzeW1saW5rUGF0aCk7CisgICAgRVhQRUNUX1RSVUUoISFz
eW1saW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShzeW1saW5rTWV0YWRhdGEtPnR5cGUsIEZp
bGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1U
ZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGb2xkZXIpCit7CisgICAgYXV0byBzeW1saW5rUGF0aCA9
IHRlbXBFbXB0eUZvbGRlclBhdGgoKSArICItc3ltbGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBzeW1saW5r
UGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1Bh
dGgpKTsKKworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFk
YXRhKHN5bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7Cisg
ICAgRVhQRUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpT
eW1ib2xpY0xpbmspOworCisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVj
dG9yeShzeW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6
Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnkoc3ltbGlu
a1BhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzeW1saW5rUGF0aCkpOworICAg
IEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkp
KTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGaWxlRG9l
c05vdEV4aXN0KQoreworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2Vz
LW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
ZmlsZVRoYXREb2VzTm90RXhpc3QpKTsKKworICAgIGF1dG8gc3ltbGlua1BhdGggPSBmaWxlVGhh
dERvZXNOb3RFeGlzdCArICItc3ltbGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06
OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpj
cmVhdGVTeW1ib2xpY0xpbmsoZmlsZVRoYXREb2VzTm90RXhpc3QsIHN5bWxpbmtQYXRoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKK30K
KworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVIYXJkTGluaykKK3sKKyAgICBhdXRvIGhh
cmRsaW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1oYXJkbGluayI7CisgICAgRVhQRUNUX0ZB
TFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxv
bmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7
CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpoYXJkTGluayh0ZW1wRmlsZVBhdGgoKSwg
aGFyZGxpbmtQYXRoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmls
ZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CisKKyAgICBh
dXRvIGhhcmRsaW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEoaGFyZGxpbmtQ
YXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9F
UShoYXJkbGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOworCisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkpOwor
ICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsK
KworICAgIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0
RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlu
a0ZpbGVTaXplLCBmaWxlU2l6ZSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgY3JlYXRl
SGFyZExpbmtPckNvcHlGaWxlKQoreworICAgIGF1dG8gaGFyZGxpbmtQYXRoID0gdGVtcEZpbGVQ
YXRoKCkgKyAiLWhhcmRsaW5rIjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVT
aXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZp
bGVTeXN0ZW06OmhhcmRMaW5rT3JDb3B5RmlsZSh0ZW1wRmlsZVBhdGgoKSwgaGFyZGxpbmtQYXRo
KSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0
aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAg
ICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CisKKyAgICBhdXRvIGhhcmRsaW5r
TWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEoaGFyZGxpbmtQYXRoKTsKKyAgICBF
WFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShoYXJkbGlua01l
dGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOworCisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9G
QUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxpbmtG
aWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFy
ZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBm
aWxlU2l6ZSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="commit-queue"
          id="448072"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427467</attachid>
            <date>2021-04-30 16:24:22 -0700</date>
            <delta_ts>2021-04-30 17:26:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210430162421.patch</filename>
            <type>text/plain</type>
            <size>46356</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li45
Y2YxNjJhNWFmYjI3MGVjMTc1NjdiZjFlOGY2N2M5MTQ1OGJkNGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCBsZXZl
cmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0gdG8gcmVkdWNlIHRoZSBh
bW91bnQgb2YKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVFeGlz
dHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlSXNE
aXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldFZvbHVtZUZyZWVTcGFjZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVTeW1ib2xpY0xpbmspOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6aGFyZExpbmspOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKiB3dGYvRmlsZVN5c3Rl
bS5oOgorICAgICAgICAqIHd0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW06CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAq
IHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorCiAy
MDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2luZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJh
eXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwppbmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcw
ZWUzNmQ5NGQxMDVmYTI1Li5jNGI0ZDY2Mzg1ZDUwYmYxNDFkYzJlNDJmNWUwYWQ3MWUyYzZjYzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNj
cmlwdENvcmUueGNjb25maWcKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9E
VUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUgPSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1v
ZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9M
REZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRf
YWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19a
VFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18x
OGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5j
dGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVT
M19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdi
YWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMx
MGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVfY2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFu
Z2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5
c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdp
bkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04
X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNf
Y3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3Ry
aW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0Ux
NV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFp
dHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJLVF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pO
U3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VF
TlNfOWVuYWJsZV9pZklYc3IyMV9faXNfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5
cGVFUk5TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJ
Y0VFRUVTOF9TOF87CiAKIE9USEVSX0xERkxBR1NfQkFTRSA9ICQoT1RIRVJfTERGTEFHU19ISURF
X1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEiOwogT1RIRVJfTERGTEFHU1tzZGs9ZW1iZWRkZWQq
XSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAyY2Q2M2RlNTcuLjE4YTE1ODI1
ODc3Y2NiYWM5NTg0NDM0YWEyNGEwNmM0OTI5MmI1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8d3RmL0ZpbGVT
eXN0ZW0uaD4KIAorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVNZXRhZGF0YS5oPgog
I2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KQEAgLTQ4LDYgKzQ5LDggQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKK25hbWVzcGFjZSBmcyA9IHN0ZDo6
ZmlsZXN5c3RlbTsKKwogLy8gVGhlIGZvbGxvd2luZyBsb3dlci1BU0NJSSBjaGFyYWN0ZXJzIG5l
ZWQgZXNjYXBpbmcgdG8gYmUgdXNlZCBpbiBhIGZpbGVuYW1lCiAvLyBhY3Jvc3MgYWxsIHN5c3Rl
bXMsIGluY2x1ZGluZyBXaW5kb3dzOgogLy8gICAgIC0gVW5wcmludGFibGUgQVNDSUkgKDAwLTFG
KQpAQCAtMzgyLDE0ICszODUsNiBAQCB2b2lkIHVubG9ja0FuZENsb3NlRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZShoYW5kbGUpOwogfQogCi1ib29sIGZpbGVJ
c0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mg
c2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAgICBhdXRvIG1ldGFkYXRhID0gc2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMgPyBm
aWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRoKSA6IGZpbGVNZXRhZGF0YShwYXRoKTsK
LSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1l
dGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGU6OkRpcmVjdG9yeTsKLX0K
LQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZv
clBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwyMCArNDAzLDYgQEAgU3RyaW5nIGNyZWF0
ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5nJikKIH0KICNlbmRpZgogCi0jaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZW50cmllcyA9IGxpc3REaXJlY3Rv
cnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7Ci0gICAg
ICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6
Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGVudHJ5KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7Ci0gICAgfQotICAgIHJldHVy
biBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0KLSNlbmRpZgotCiBNYXBwZWRGaWxlRGF0
YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5jdGlv
bjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+JiYg
YXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQogewogICAgIGNvbnN0ZXhw
ciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpAQCAtNTA0LDUgKzQ4NSwxMDcgQEAgT3B0
aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVy
biBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OmV4aXN0cyhmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHJldHVybiBm
czo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVjKTsKKyAg
ICByZXR1cm4gIWVjOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykKK2Jvb2wgZGVsZXRlRW1wdHlE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsK
KyAgICByZXR1cm4gZnM6OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0
YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKyNlbmRpZgorCitib29sIG1vdmVGaWxlKGNv
bnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIHN0ZDo6
ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6cmVuYW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihv
bGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKS5kYXRhKCks
IGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOwor
ICAgIGF1dG8gc2l6ZSA9IGZzOjpmaWxlX3NpemUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJlc3VsdCA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsZUlzRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91bGRG
b2xsb3dTeW1ib2xpY0xpbmtzKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6
ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
cyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpCisgICAgICAgIGZpbGVTdGF0dXMg
PSBmczo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVjKTsK
KyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3ltbGlua19zdGF0dXMoZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVybiBmaWxlU3Rh
dHVzLnR5cGUoKSA9PSBmczo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2Jvb2wgbWFrZUFs
bERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUg
ZWM7CisgICAgZnM6OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRWb2x1bWVG
cmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQoreworICAg
IHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5mbyA9IGZzOjpzcGFjZShmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJlZVNwYWNlID0gc3BhY2VJbmZvLmF2YWlsYWJsZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3Ry
aW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCit7CisgICAg
c3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfc3ltbGluayhmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
c3ltYm9saWNMaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9v
bCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgbGlua1Bh
dGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9saW5r
KGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30K
KworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25z
dCBTdHJpbmcmIGxpbmtQYXRoKQoreworICAgIGZzOjpwYXRoIGZzVGFyZ2V0UGF0aCA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCk7CisgICAgZnM6OnBhdGggZnNM
aW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpOworCisg
ICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9saW5rKGZzVGFyZ2V0
UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgZnM6OmNvcHlfZmlsZShmc1RhcmdldFBhdGgsIGZzTGlua1BhdGgsIGVjKTsKKyAg
ICByZXR1cm4gIWVjOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgZnM6OnJlbW92ZV9h
bGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVy
biAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUzY2JlZjQyZWRmNjVlZTAzZDhj
NWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0Nzk4OWEyNzUxMjA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYv
RmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
dW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CiAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90LgogV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0
aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgdGFy
Z2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBIYXJkIGxpbmtzIGEgZmlsZSBp
ZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGhh
cmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0
aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29u
c3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKTsKIAogI2lmIFVT
RShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBsb2NrRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL0Zp
bGVTeXN0ZW1Db2NvYS5tbQppbmRleCAxY2NlMTdkYzU5ZTIzM2M2YTU4MDAxZTFiNmM5MDhlODQ1
YTdjOTA2Li5jODUzN2VhMTczZTk5YmFiZGU3Zjc4YzlkM2NkYzgzYzFlM2EzNWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0KKysrIGIvU291cmNl
L1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCkBAIC0xMjYsMjkgKzEyNiw2IEBAIFN0
cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxl
SGFuZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcG9y
YXJ5RmlsZVBhdGguZGF0YSgpKTsKIH0KIAotYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9s
ZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICAvLyBPdmVyd3JpdGUgZXhpc3Rp
bmcgZmlsZXMuCi0gICAgYXV0byBtYW5hZ2VyID0gYWRvcHROUyhbW05TRmlsZU1hbmFnZXIgYWxs
b2NdIGluaXRdKTsKLSAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1dURldlYkZpbGVNYW5h
Z2VyRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbbWFuYWdlciBzZXREZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBib29sIHN1Y2Nl
c3MgPSBbbWFuYWdlciBtb3ZlSXRlbUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6b2xkUGF0
aF0gdG9VUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpuZXdQYXRoXSBlcnJvcjomZXJyb3JdOwot
ICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgTlNMb2coQCJFcnJvciBpbiBtb3ZlRmlsZTogJUAi
LCBlcnJvcik7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgZ2V0Vm9sdW1lRnJlZVNw
YWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKLXsKLSAgICBOU0Rp
Y3Rpb25hcnkgKmZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGljdGlvbmFyeSA9IFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mRmlsZVN5c3RlbUZvclBhdGg6KE5TU3RyaW5n
ICopcGF0aCBlcnJvcjpOVUxMXTsKLSAgICBpZiAoIWZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGljdGlv
bmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyZWVTcGFjZSA9IFtbZmlsZVN5c3Rl
bUF0dHJpYnV0ZXNEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZpbGVTeXN0ZW1GcmVlU2l6ZV0g
dW5zaWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogTlNTdHJpbmcg
KmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShOU1N0cmluZyAqZGlyZWN0b3J5UHJlZml4KQogewog
ICAgIE5TU3RyaW5nICp0ZW1wRGlyZWN0b3J5ID0gTlNUZW1wb3JhcnlEaXJlY3RvcnkoKTsKQEAg
LTE3OCwxMSArMTU1LDYgQEAgTlNTdHJpbmcgKmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShOU1N0
cmluZyAqZGlyZWN0b3J5UHJlZml4KQogICAgIHJldHVybiBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246cGF0aC5kYXRhKCkg
bGVuZ3RoOmxlbmd0aF07CiB9CiAKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjpuaWxdOwotfQotCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIGJvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUds
aWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKaW5kZXggNjg3
ZmExMGMyNjc1MzZjMDU4ZTc5MjRkYmVjYjkzYTcxMjQ4Zjg5MC4uNjNkNWRhZjFhOTk0ZmY3MjBj
Yzk0MzAzYzFmM2M1MmJhNDRlNDA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9G
aWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xp
Yi5jcHAKQEAgLTExOCwyNCArMTE4LDYgQEAgU3RyaW5nIGZpbGVuYW1lRm9yRGlzcGxheShjb25z
dCBTdHJpbmcmIHN0cmluZykKICNlbmRpZgogfQogCi1ib29sIGZpbGVFeGlzdHMoY29uc3QgU3Ry
aW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19m
aWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpIDogZmFsc2U7Ci19
Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRS
ZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpICE9IC0x
IDogZmFsc2U7Ci19Ci0KLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19ybWRpcihm
aWxlbmFtZS5kYXRhKCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29sIGdldEZpbGVT
dGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7CiAgICAgYXV0
byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE1NCwxNiAr
MTM2LDYgQEAgc3RhdGljIGJvb2wgZ2V0RmlsZUxTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0
YXRCdWYqIHN0YXRCdWZmZXIpCiAgICAgcmV0dXJuIGdfbHN0YXQoZmlsZW5hbWUuZGF0YSgpLCBz
dGF0QnVmZmVyKSAhPSAtMTsKIH0KIAotYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKLXsKLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0Owot
ICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIHJldHVy
biB0cnVlOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUs
IGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKIHsKICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5mbyA9
IGFkb3B0R1JlZihnX2ZpbGVfaW9fc3RyZWFtX3F1ZXJ5X2luZm8oaGFuZGxlLCBHX0ZJTEVfQVRU
UklCVVRFX1NUQU5EQVJEX1NJWkUsIG51bGxwdHIsIG51bGxwdHIpKTsKQEAgLTI0MywzMCArMjE1
LDExIEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKFN0cmluZ1ZpZXcgcGF0aCwg
Y29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21wCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIAotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQot
ewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0g
ICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19ta2Rpcl93aXRoX3Bh
cmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKSAhPSAtMSA6IGZhbHNlOwotfQotCiBTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAgIHJldHVybiBzdHJpbmdGcm9tRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKGdfZ2V0X2hvbWVfZGlyKCkpOwogfQogCi1ib29sIGNyZWF0ZVN5bWJv
bGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgc3ltYm9saWNM
aW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdldFBhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24odGFy
Z2V0UGF0aEZTUmVwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBzeW1i
b2xpY0xpbmtQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5r
UGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1BhdGhGU1Jl
cCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhc3ltbGluayh0YXJnZXRQ
YXRoRlNSZXAuZGF0YSgpLCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpKTsKLX0KLQogU3Ry
aW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTI3NywyMSArMjMwLDYg
QEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOwogfQogCi1ib29sIGdldFZvbHVtZUZy
ZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0gICAg
YXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAo
IXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
ZmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRv
cHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmlsZS5nZXQoKSwgR19GSUxFX0FU
VFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBpZiAoIWZp
bGVJbmZvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmcmVlU3BhY2UgPSBnX2ZpbGVf
aW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgR19GSUxFX0FUVFJJQlVU
RV9GSUxFU1lTVEVNX0ZSRUUpOwotICAgIHJldHVybiAhIWZyZWVTcGFjZTsKLX0KLQogU3RyaW5n
IGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8gZmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC00MjgsNjIgKzM2Niw2IEBAIGlu
dCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5n
JiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVw
cmVzZW50YXRpb24ob2xkRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG5ld1BhdGgpOwotICAg
IGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihuZXdGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IG9sZEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfcGF0aChvbGRGaWxlbmFtZS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBuZXdG
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobmV3RmlsZW5hbWUuZGF0YSgpKSk7
Ci0KLSAgICByZXR1cm4gZ19maWxlX21vdmUob2xkRmlsZS5nZXQoKSwgbmV3RmlsZS5nZXQoKSwg
R19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
KTsKLX0KLQotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbikKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBDcmVhdGVIYXJk
TGluayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgc291cmNlLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAgYXV0byBzb3VyY2VGaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghdmFsaWRSZXBy
ZXNlbnRhdGlvbihzb3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gZGVzdGluYXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0
aW5hdGlvbik7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uRmlsZW5h
bWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIWxpbmsoc291cmNlRmls
ZW5hbWUuZGF0YSgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSk7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRpb24p
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBlcmZv
cm0gYSBjb3B5IGluc3RlYWQuCi0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gISE6OkNvcHlG
aWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgZGVzdGluYXRpb24ud2lkZUNoYXJh
Y3RlcnMoKS5kYXRhKCksIFRSVUUpOwotI2Vsc2UKLSAgICBhdXRvIHNvdXJjZUZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2Vu
dGF0aW9uKHNvdXJjZUZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBkZXN0aW5hdGlvbkZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0
aW9uKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb25GaWxlbmFtZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZUZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VGaWxlbmFtZS5kYXRhKCkpKTsK
LSAgICBHUmVmUHRyPEdGaWxlPiBkZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfcGF0aChkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSkpOwotICAgIHJldHVybiBnX2Zp
bGVfY29weShzb3VyY2VGaWxlLmdldCgpLCBkZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9D
T1BZX05PTkUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwotI2VuZGlmCi19
Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0Zp
bGUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zv
cl9wYXRoKGZzRmlsZS5kYXRhKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4
L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCmluZGV4IDk5ZGNiZjIzZTkwZjBhZTEzNDIxY2EwYmIzZTI5MGMyOTVjZjEyOTcuLmJm
ZThmYWJiNmJmYzY3MGU0ZWU0YjMwZDhiM2M0OGU0NzlkYzVkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNDksMzYgKzQ5LDYgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKLWJvb2wgZmlsZUV4aXN0cyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1ww
JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFjY2Vzcyhmc1JlcC5kYXRh
KCksIEZfT0spICE9IC0xOwotfQotCi1ib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7
Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykgewot
ICAgICAgICBMT0dfRVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0ZS4gRmFpbGVkIHRvIGdldCBm
aWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIHRvIGNyZWF0ZSBDU3RyaW5nIGZyb20gY2ZTdHJpbmcg
b3IgZmlsZXN5c3RlbSByZXByZXNlbnRhdGlvbiBpcyBhIG51bGwgdmFsdWUiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHVubGluayguLi4pIHJldHVybnMgMCBvbiBz
dWNjZXNzZnVsIGRlbGV0aW9uIG9mIHRoZSBwYXRoIGFuZCBub24temVybyBpbiBhbnkgb3RoZXIg
Y2FzZSAoaW5jbHVkaW5nIGludmFsaWQgcGVybWlzc2lvbnMgb3Igbm9uLWV4aXN0ZW50IGZpbGUp
Ci0gICAgYm9vbCB1bmxpbmtlZCA9ICF1bmxpbmsoZnNSZXAuZGF0YSgpKTsKLSAgICBpZiAoIXVu
bGlua2VkICYmIGVycm5vICE9IEVOT0VOVCkKLSAgICAgICAgTE9HX0VSUk9SKCJGaWxlIGZhaWxl
ZCB0byBkZWxldGUuIEVycm9yIG1lc3NhZ2U6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQotICAg
IHJldHVybiB1bmxpbmtlZDsKLX0KLQogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9uIHBl
cm1pc3Npb24sIGJvb2wgZmFpbElmRmlsZUV4aXN0cykKIHsKICAgICBDU3RyaW5nIGZzUmVwID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtMTg2LDM1ICsxNTYsNiBAQCBib29s
IHVubG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkKIH0KICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKE1BQykKLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gcm1kaXIoLi4uKSByZXR1cm5zIDAgb24g
c3VjY2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9uLXplcm8gaW4gYW55IG90aGVy
IGNhc2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9yIG5vbi1leGlzdGVudCBmaWxl
KQotICAgIHJldHVybiAhcm1kaXIoZnNSZXAuZGF0YSgpKTsKLX0KLSNlbmRpZgotCi1ib29sIGdl
dEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCi17Ci0gICAg
Q1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlm
ICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKLQotICAgIGlmIChzdGF0KGZz
UmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVz
dWx0ID0gZmlsZUluZm8uc3Rfc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBnZXRG
aWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcmIHJlc3VsdCkKIHsK
ICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKQEAgLTMwMCwxOSArMjQxLDYgQEAgT3B0aW9uYWw8
RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhjb25zdCBTdHJpbmcm
IHBhdGgpCiAgICAgcmV0dXJuIGZpbGVNZXRhZGF0YVVzaW5nRnVuY3Rpb24ocGF0aCwgJnN0YXQp
OwogfQogCi1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgs
IGNvbnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdldFBh
dGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBpZiAo
IXRhcmdldFBhdGhGU1JlcC5kYXRhKCkgfHwgdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKVswXSA9PSAn
XDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIHN5bWJvbGljTGlua1Bh
dGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoKTsKLSAg
ICBpZiAoIXN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRhKCkgfHwgc3ltYm9saWNMaW5rUGF0aEZT
UmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gIXN5bWxpbmsodGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZTUmVw
LmRhdGEoKSk7Ci19Ci0KIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsKICAgICBpZiAocGF0aC5lbmRz
V2l0aCgnLycpKQpAQCAtMzI5LDM1ICsyNTcsNiBAQCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNvbnN0IFZlY3RvcjxTdHJpbmdWaWV3PiYgY29tcAog
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLWJvb2wgbWFrZUFsbERpcmVjdG9y
aWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBDU3RyaW5nIGZ1bGxQYXRoID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmICghYWNjZXNzKGZ1bGxQYXRoLmRhdGEo
KSwgRl9PSykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2hhciogcCA9IGZ1bGxQYXRo
Lm11dGFibGVEYXRhKCkgKyAxOwotICAgIGludCBsZW5ndGggPSBmdWxsUGF0aC5sZW5ndGgoKTsK
LQotICAgIGlmIChwW2xlbmd0aCAtIDFdID09ICcvJykKLSAgICAgICAgcFtsZW5ndGggLSAxXSA9
ICdcMCc7Ci0gICAgZm9yICg7ICpwOyArK3ApIHsKLSAgICAgICAgaWYgKCpwID09ICcvJykgewot
ICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICAgICAgaWYgKGFjY2VzcyhmdWxsUGF0aC5k
YXRhKCksIEZfT0spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRoLmRhdGEo
KSwgU19JUldYVSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICpwID0gJy8nOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChh
Y2Nlc3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkgewotICAgICAgICBpZiAobWtkaXIoZnVsbFBh
dGguZGF0YSgpLCBTX0lSV1hVKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJp
bmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQo
Jy8nKSArIDEpOwpAQCAtNDE5LDI5ICszMTgsNiBAQCBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiAjZW5kaWYKIAogI2lmICFQTEFURk9STShDT0NP
QSkKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5l
d1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihvbGRQYXRoKTsKLSAgICBpZiAob2xkRmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24obmV3UGF0aCk7Ci0gICAgaWYgKG5ld0ZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuYW1lKG9sZEZpbGVuYW1lLmRhdGEoKSwgbmV3Rmls
ZW5hbWUuZGF0YSgpKSAhPSAtMTsKLX0KLQotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewotICAgIHN0cnVjdCBzdGF0dmZz
IGZpbGVTeXN0ZW1TdGF0OwotICAgIGlmICghc3RhdHZmcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpLCAmZmlsZVN5c3RlbVN0YXQpKSB7Ci0gICAgICAgIGZyZWVTcGFjZSA9
IGZpbGVTeXN0ZW1TdGF0LmZfYmF2YWlsICogZmlsZVN5c3RlbVN0YXQuZl9mcnNpemU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFN0cmluZyBv
cGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgc3VmZml4KQogewogICAgIC8vIEZJWE1FOiBTdWZmaXgg
aXMgbm90IHN1cHBvcnRlZCwgYnV0IE9LIGZvciBub3cgc2luY2UgdGhlIGNvZGUgdXNpbmcgaXQg
aXMgbWFjT1MtcG9ydC1vbmx5LgpAQCAtNDY4LDUzICszNDQsNiBAQCBlbmQ6CiB9CiAjZW5kaWYg
Ly8gIVBMQVRGT1JNKENPQ09BKQogCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgp
IHx8IGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlm
ICghZnNTb3VyY2UuZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZz
RGVzdGluYXRpb24gPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOwotICAg
IGlmICghZnNEZXN0aW5hdGlvbi5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiAhbGluayhmc1NvdXJjZS5kYXRhKCksIGZzRGVzdGluYXRpb24uZGF0YSgpKTsKLX0K
LQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRp
b24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBl
cmZvcm0gYSBjb3B5IGluc3RlYWQuCi0gICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVzdGlu
YXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZzU291
cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAgaWYgKCFmc1NvdXJj
ZS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZnNEZXN0aW5hdGlv
biA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgaWYgKCFmc0Rl
c3RpbmF0aW9uLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBoYW5k
bGUgPSBvcGVuKGZzRGVzdGluYXRpb24uZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VY
Q0wsIDA2NjYpOwotICAgIGlmIChoYW5kbGUgPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxl
KHNvdXJjZSwgaGFuZGxlKTsKLSAgICBjbG9zZShoYW5kbGUpOwotCi0gICAgLy8gSWYgdGhlIGNv
cHkgZmFpbGVkLCBkZWxldGUgdGhlIHVudXNhYmxlIGZpbGUuCi0gICAgaWYgKCFhcHBlbmRSZXN1
bHQpCi0gICAgICAgIHVubGluayhmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICByZXR1cm4g
YXBwZW5kUmVzdWx0OwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29u
c3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dURi93
dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IGEwM2Y4YTQ2NDRlZGI5MDc4MWZlNDM5YWY2
YzAzNzllNWExMmE3YTAuLmZkNTlmMTkwM2U2ZTFmZTg0ZDE1OGQ1NzVhOTYyOWVhYjkwMGM5ZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTEwNSwxNSArMTA1LDYgQEAg
c3RhdGljIHZvaWQgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWVGcm9tRmluZERhdGEoY29uc3QgV0lO
MzJfRklORF9EQVRBVyYgZmluZERhdGEKICAgICB0aW1lID0gZmlsZVRpbWUuUXVhZFBhcnQgLyAx
MDAwMDAwMCAtIGtTZWNvbmRzRnJvbUZpbGVUaW1lVG9UaW1ldDsKIH0KIAotYm9vbCBnZXRGaWxl
U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgc2l6ZSkKLXsKLSAgICBXSU4zMl9G
SU5EX0RBVEFXIGZpbmREYXRhOwotICAgIGlmICghZ2V0RmluZERhdGEocGF0aCwgZmluZERhdGEp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZ2V0RmlsZVNpemVGcm9tRmlu
ZERhdGEoZmluZERhdGEsIHNpemUpOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmls
ZUhhbmRsZSBmaWxlSGFuZGxlLCBsb25nIGxvbmcmIHNpemUpCiB7CiAgICAgQllfSEFORExFX0ZJ
TEVfSU5GT1JNQVRJT04gZmlsZUluZm9ybWF0aW9uOwpAQCAtMjIwLDM2ICsyMTEsNiBAQCBPcHRp
b25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxpbmtzKGNvbnN0IFN0
cmluZyYgcGF0aCkKICAgICByZXR1cm4gZmluZERhdGFUb0ZpbGVNZXRhZGF0YShmaW5kRGF0YSk7
CiB9CiAKLWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwg
Y29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAgIHJldHVybiA6OkNyZWF0ZVN5
bWJvbGljTGlua1coc3ltYm9saWNMaW5rUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgdGFy
Z2V0UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgMCk7Ci19Ci0KLWJvb2wgZmlsZUV4aXN0
cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0YTsK
LSAgICByZXR1cm4gZ2V0RmluZERhdGEocGF0aCwgZmluZERhdGEpOwotfQotCi1ib29sIGRlbGV0
ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmaWxlbmFtZSA9IHBhdGg7
Ci0gICAgcmV0dXJuICEhRGVsZXRlRmlsZVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRh
KCkpOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIHJldHVybiAhIVJlbW92ZURpcmVj
dG9yeVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCkpOwotfQotCi1ib29sIG1vdmVG
aWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewotICAg
IFN0cmluZyBvbGRGaWxlbmFtZSA9IG9sZFBhdGg7Ci0gICAgU3RyaW5nIG5ld0ZpbGVuYW1lID0g
bmV3UGF0aDsKLSAgICByZXR1cm4gISE6Ok1vdmVGaWxlRXgob2xkRmlsZW5hbWUud2lkZUNoYXJh
Y3RlcnMoKS5kYXRhKCksIG5ld0ZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBNT1ZF
RklMRV9DT1BZX0FMTE9XRUQgfCBNT1ZFRklMRV9SRVBMQUNFX0VYSVNUSU5HKTsKLX0KLQogU3Ry
aW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsK
QEAgLTI5MSwxOSArMjUyLDYgQEAgQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiBwYXRoKQogCiAjZW5kaWYgLy8gIVVTRShDRikKIAotYm9vbCBtYWtlQWxsRGly
ZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmdWxsUGF0aCA9IHBh
dGg7Ci0gICAgaWYgKFNIQ3JlYXRlRGlyZWN0b3J5RXgobnVsbHB0ciwgZnVsbFBhdGgud2lkZUNo
YXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpICE9IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAg
RFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEVSUk9S
X0ZJTEVfRVhJU1RTICYmIGVycm9yICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcGF0aCAlcyIsIHBhdGguYXNjaWkoKS5k
YXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAgIHJl
dHVybiAiIjsKQEAgLTUxNCwyMCArNDYyLDYgQEAgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CiB9CiAKLWJvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgcmV0dXJuIENyZWF0
ZUhhcmRMaW5rKGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBzb3VyY2Uud2lk
ZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpOwotfQotCi1ib29sIGhhcmRMaW5rT3JDb3B5
RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsK
LSAgICBpZiAoaGFyZExpbmsoc291cmNlLCBkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4K
LSAgICByZXR1cm4gISE6OkNvcHlGaWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwg
ZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIFRSVUUpOwotfQotCiBTdHJpbmcg
bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCkKIHsKICAgICByZXR1cm4gY2FjaGVk
U3RvcmFnZURpcmVjdG9yeShDU0lETF9MT0NBTF9BUFBEQVRBKTsKQEAgLTU1NywxNiArNDkxLDYg
QEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwg
Y29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wgZ2V0
Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkK
LXsKLSAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlcjsKLSAgICBp
ZiAoIUdldERpc2tGcmVlU3BhY2VFeFcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgJmZy
ZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZnJlZVNwYWNlID0gZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIu
UXVhZFBhcnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdldEZp
bGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAgICAgYXV0byBoYW5kbGUgPSBv
cGVuRmlsZShmc0ZpbGUuZGF0YSgpLCBGaWxlT3Blbk1vZGU6OlJlYWQpOwpAQCAtNTk2LDIxICs1
MjAsNiBAQCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCkKICAgICB9KTsKIH0KIAot
Ym9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgp
Ci17Ci0gICAgU0hGSUxFT1BTVFJVQ1QgZGVsZXRlT3BlcmF0aW9uID0gewotICAgICAgICBudWxs
cHRyLAotICAgICAgICBGT19ERUxFVEUsCi0gICAgICAgIGRpcmVjdG9yeVBhdGgud2lkZUNoYXJh
Y3RlcnMoKS5kYXRhKCksCi0gICAgICAgIEwiIiwKLSAgICAgICAgRk9GX05PQ09ORklSTUFUSU9O
IHwgRk9GX05PRVJST1JVSSB8IEZPRl9TSUxFTlQsCi0gICAgICAgIGZhbHNlLAotICAgICAgICBu
dWxscHRyLAotICAgICAgICBMIiIKLSAgICB9OwotICAgIHJldHVybiAhU0hGaWxlT3BlcmF0aW9u
KCZkZWxldGVPcGVyYXRpb24pOwotfQotCiBib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBidWZm
ZXIsIHNpemVfdCkKIHsKICAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGJ1ZmZlcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0Q29tcGlsZXJGbGFncy5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9XZWJLaXRDb21waWxlckZsYWdzLmNtYWtlCmluZGV4IGU1NDc0YWM5YTNhNDQyMTk4OTdl
OWU5Yzc1NTViZmFkYjMyYWVlYjMuLjNlYTExOTY0NzIzZDA1YjhhZmQ2MzVhMWQ4MDMxMTkxYmJi
NTkyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRDb21waWxlckZsYWdzLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRDb21waWxlckZsYWdzLmNtYWtlCkBAIC0yOTEsNiAr
MjkxLDEzIEBAIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgICAgIHVuc2V0KENN
QUtFX1JFUVVJUkVEX0xJQlJBUklFUykKICAgICBlbmRpZiAoKQogCisgICAgIyA8ZmlsZXN5c3Rl
bT4gc3VwcG9ydCBmb3Igb2xkZXIgY29tcGlsZXJzLgorICAgIGlmIChDT01QSUxFUl9JU19DTEFO
RykKKyAgICAgICAgc2V0KENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MgIi1sYysrZnMgJHtDTUFL
RV9TSEFSRURfTElOS0VSX0ZMQUdTfSIpCisgICAgZWxzZSAoKQorICAgICAgICBzZXQoQ01BS0Vf
U0hBUkVEX0xJTktFUl9GTEFHUyAiLWxzdGRjKytmcyAke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxB
R1N9IikKKyAgICBlbmRpZiAoKQorCiAgICAgIyA8ZmlsZXN5c3RlbT4gdnMgPGV4cGVyaW1lbnRh
bC9maWxlc3lzdGVtPgogICAgIHNldChGSUxFU1lTVEVNX1RFU1RfU09VUkNFICIKICAgICAgICAg
I2luY2x1ZGUgPGZpbGVzeXN0ZW0+CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggZDhhMzkyMjkzNTJhY2NlYjNlZDQxYzg4NDI1YjMwN2MzYjBhNmQy
NC4uNGUxZWFmN2FjNmNmMGNjMGRlNWI5MDk1ZmZkNzEwMDBjOWZjZjJhZCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisy
MDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3Rh
cnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292
ZXJhZ2UgZm9yIHRoZSBGaWxlU3lzdGVtIEFQSSB0aGF0IHdhcyBtb2RpZmllZC4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBGaWxlUGF0aCBjb25zdCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEZpbGVTeW1saW5rUGF0aCBjb25z
dCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9s
ZGVyUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6
dGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBFbXB0eUZpbGVQYXRoIGNvbnN0KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpzcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCBjb25z
dCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6YmFuZ0NvbnRhaW5p
bmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVz
dDo6cXVvdGVDb250YWluaW5nRmlsZVBhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVF9GKToKKwogMjAyMS0wNC0zMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjcHldIFN1cHBvcnQgYXJndW1lbnRzIHRvIFRhc2tQ
b29sIHNldHVwIGFuZCB0ZWFyZG93bgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcAppbmRleCA4ZjY1MWQzZWFlMzQzMjk3NTFhYzM2MWRkN2UwNjRjYjYzN2Uz
NzUyLi5jMjkzNWQyOTAyZTQ2ZmI4Y2JjYTIyNWQwNmU3ODYyNWM0ODFmNzJjIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcApAQCAtNDMsNyArNDMsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAK
LSAgICAgICAgLy8gY3JlYXRlIHRlbXAgZmlsZQorICAgICAgICAvLyBjcmVhdGUgdGVtcCBmaWxl
LgogICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwogICAgICAg
ICBtX3RlbXBGaWxlUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wVGVz
dEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUs
IEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3RybGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwpAQCAtNTIs
NiArNTIsMTggQEAgcHVibGljOgogICAgICAgICBtX3RlbXBGaWxlU3ltbGlua1BhdGggPSAidGVt
cFRlc3RGaWxlLXN5bWxpbmsiOwogICAgICAgICBGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xp
bmsobV90ZW1wRmlsZVBhdGgsIG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7CiAKKyAgICAgICAgLy8g
Q3JlYXRlIHRlbXAgZGlyZWN0b3J5LgorICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgdGVtcG9yYXJ5RmlsZTsKKyAgICAgICAgbV90ZW1wRW1wdHlGb2xkZXJQYXRoID0gRmls
ZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBFbXB0eUZvbGRlciIsIHRlbXBvcmFyeUZp
bGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAg
ICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKyAgICAg
ICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7
CisKKyAgICAgICAgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCA9IEZpbGVTeXN0ZW06Om9w
ZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlGb2xkZXItc3ltbGluayIsIHRlbXBvcmFyeUZpbGUp
OworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAg
IEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7Cisg
ICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhtX3RlbXBFbXB0eUZvbGRlclBh
dGgsIG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgpOworCiAgICAgICAgIG1fdGVtcEVtcHR5
RmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcEVtcHR5VGVzdEZp
bGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKIApA
QCAtNjksMjIgKzgxLDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRl
bGV0ZUZpbGUobV90ZW1wRmlsZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5
RGlyZWN0b3J5KG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRl
bGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUobV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUobV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5
c3RlbTo6ZGVsZXRlRmlsZShtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICB9CiAKLSAg
ICBjb25zdCBTdHJpbmcmIHRlbXBGaWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVN5bWxpbmtQYXRoKCkgeyByZXR1cm4gbV90ZW1w
RmlsZVN5bWxpbmtQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgp
IHsgcmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIHNwYWNl
Q29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsg
fQotICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1f
YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWlu
aW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAg
Y29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBGaWxlUGF0
aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEZpbGVTeW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGVtcEZpbGVTeW1saW5rUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5
Rm9sZGVyUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgoKSBjb25zdCB7IHJldHVy
biBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1w
RW1wdHlGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0KKyAg
ICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRh
aW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsg
fQorICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5n
IG1fdGVtcEZpbGVQYXRoOwogICAgIFN0cmluZyBtX3RlbXBGaWxlU3ltbGlua1BhdGg7CisgICAg
U3RyaW5nIG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsKKyAgICBTdHJpbmcgbV90ZW1wRW1wdHlGb2xk
ZXJTeW1saW5rUGF0aDsKICAgICBTdHJpbmcgbV90ZW1wRW1wdHlGaWxlUGF0aDsKICAgICBTdHJp
bmcgbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9iYW5nQ29udGFpbmlu
Z0ZpbGVQYXRoOwpAQCAtMTc2LDQgKzE5NCwyNDYgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBk
ZWxldGVOb25FbXB0eURpcmVjdG9yeSkKICAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyh0ZW1wb3JhcnlUZXN0Rm9sZGVyKSk7CiB9CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVz
dCwgZmlsZUV4aXN0cykKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcykpKTsKK30KKwor
VEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVTeW1saW5rKQoreworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworCisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkp
KTsKKworICAgIC8vIFNob3VsZCBoYXZlIGRlbGV0ZWQgdGhlIHN5bWxpbmsgYnV0IG5vdCB0aGUg
dGFyZ2V0IGZpbGUuCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRl
bXBGaWxlU3ltbGlua1BhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0
ZUZpbGUpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmls
ZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZp
bGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRl
bXBGaWxlUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZGVsZXRlRW1wdHlE
aXJlY3RvcnkpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVF
bXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVy
UGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbW92ZUZpbGUpCit7CisgICAg
YXV0byBkZXN0aW5hdGlvbiA9IHRlbXBGaWxlUGF0aCgpICsgIi1tb3ZlZCI7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6bW92ZUZpbGUodGVtcEZpbGVQYXRoKCksIGRlc3RpbmF0aW9uKSk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGRlc3RpbmF0aW9uKSk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCBk
ZXN0aW5hdGlvbikpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIG1vdmVGaWxlT3Zlcndy
aXRlc0Rlc3RpbmF0aW9uKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCks
IGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXpl
KSk7CisgICAgRVhQRUNUX1RSVUUoIWZpbGVTaXplKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCB0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRo
KCkpKTsKKworICAgIGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpn
ZXRGaWxlU2l6ZSh0ZW1wRW1wdHlGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9H
VChmaWxlU2l6ZSwgMCk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZ2V0RmlsZVNpemUp
Cit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgo
KSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5Rmls
ZVBhdGgoKSkpOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAg
ICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1Rf
VFJVRSghZmlsZVNpemUpOworCisgICAgZmlsZVNpemUgPSAwOworICAgIFN0cmluZyBmaWxlVGhh
dERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1w
RW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNF
KEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGZpbGVUaGF0RG9lc05vdEV4aXN0LCBmaWxlU2l6ZSkp
OworICAgIEVYUEVDVF9UUlVFKCFmaWxlU2l6ZSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVz
dCwgZmlsZUlzRGlyZWN0b3J5KQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJ
c0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlz
RGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93
U3ltYm9saWNMaW5rczo6WWVzKSk7CisKKyAgICBhdXRvIGZvbGRlclN5bWxpbmtNZXRhZGF0YSA9
IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YSh0ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCgpKTsK
KyAgICBFWFBFQ1RfVFJVRSghIWZvbGRlclN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VR
KGZvbGRlclN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xp
Y0xpbmspOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVt
cEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9s
aWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rv
cnkodGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93
U3ltYm9saWNMaW5rczo6WWVzKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Zmls
ZUlzRGlyZWN0b3J5KHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJl
Y3RvcnkodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3M6OlllcykpOworCisgICAgYXV0byBmaWxlU3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6
ZmlsZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoISFm
aWxlU3ltbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoZmlsZVN5bWxpbmtNZXRhZGF0YS0+
dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxl
U3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxl
U3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKTsKKworICAgIFN0cmluZyBm
aWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNU
X0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShmaWxlVGhhdERvZXNOb3RFeGlzdCwg
RmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBG
aWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKTsKK30KKworVEVTVF9G
KEZpbGVTeXN0ZW1UZXN0LCBtYWtlQWxsRGlyZWN0b3JpZXMpCit7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgp
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3Rvcmllcyh0ZW1wRW1wdHlGb2xkZXJQYXRo
KCkpKTsKKyAgICBTdHJpbmcgc3ViRm9sZGVyUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCB7ICJzdWJGb2xkZXIxIiwgInN1
YkZvbGRlcjIiLCAic3ViRm9sZGVyMyIgfSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06
OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhzdWJGb2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdWJGb2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHN1YkZvbGRlclBhdGgsIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOworfQorCitU
RVNUX0YoRmlsZVN5c3RlbVRlc3QsIGdldFZvbHVtZUZyZWVTcGFjZSkKK3sKKyAgICB1aW50NjRf
dCBmcmVlU3BhY2UgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldFZvbHVtZUZy
ZWVTcGFjZSh0ZW1wRmlsZVBhdGgoKSwgZnJlZVNwYWNlKSk7CisgICAgRVhQRUNUX0dUKGZyZWVT
cGFjZSwgMFUpOworCisgICAgU3RyaW5nIGZpbGVUaGF0RG9lc05vdEV4aXN0ID0gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgImRvZXMt
bm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Z2V0Vm9sdW1lRnJl
ZVNwYWNlKGZpbGVUaGF0RG9lc05vdEV4aXN0LCBmcmVlU3BhY2UpKTsKK30KKworVEVTVF9GKEZp
bGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmspCit7CisgICAgYXV0byBzeW1saW5rUGF0
aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1zeW1saW5rIjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmNyZWF0ZVN5bWJvbGljTGluayh0ZW1wRmlsZVBhdGgoKSwgc3ltbGlua1BhdGgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisKKyAg
ICBhdXRvIHN5bWxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YShzeW1saW5r
UGF0aCk7CisgICAgRVhQRUNUX1RSVUUoISFzeW1saW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9F
UShzeW1saW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5r
KTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc3ltbGlua1BhdGgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkp
OworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkp
KTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGb2xkZXIp
Cit7CisgICAgYXV0byBzeW1saW5rUGF0aCA9IHRlbXBFbXB0eUZvbGRlclBhdGgoKSArICItc3lt
bGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1Bh
dGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsodGVt
cEVtcHR5Rm9sZGVyUGF0aCgpLCBzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKworICAgIGF1dG8gc3ltbGlua01ldGFk
YXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1Rf
VFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+
dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworCisgICAgRVhQRUNUX0ZB
TFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShzeW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6
U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlSXNEaXJlY3Rvcnkoc3ltbGlua1BhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0
LCBjcmVhdGVTeW1ib2xpY0xpbmtGaWxlRG9lc05vdEV4aXN0KQoreworICAgIFN0cmluZyBmaWxl
VGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0
ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZB
TFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVRoYXREb2VzTm90RXhpc3QpKTsKKworICAg
IGF1dG8gc3ltbGlua1BhdGggPSBmaWxlVGhhdERvZXNOb3RFeGlzdCArICItc3ltbGluayI7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsoZmlsZVRoYXREb2Vz
Tm90RXhpc3QsIHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVh
dGVIYXJkTGluaykKK3sKKyAgICBhdXRvIGhhcmRsaW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsg
Ii1oYXJkbGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoaGFy
ZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOwor
ICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpoYXJkTGluayh0ZW1wRmlsZVBhdGgoKSwgaGFyZGxpbmtQYXRoKSk7CisKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBs
b25nIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0Rmls
ZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0Zp
bGVTaXplLCBmaWxlU2l6ZSk7CisKKyAgICBhdXRvIGhhcmRsaW5rTWV0YWRhdGEgPSBGaWxlU3lz
dGVtOjpmaWxlTWV0YWRhdGEoaGFyZGxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIWhhcmRs
aW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShoYXJkbGlua01ldGFkYXRhLT50eXBlLCBGaWxl
TWV0YWRhdGE6OlR5cGU6OkZpbGUpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmls
ZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7Cit9CisKK1RF
U1RfRihGaWxlU3lzdGVtVGVzdCwgY3JlYXRlSGFyZExpbmtPckNvcHlGaWxlKQoreworICAgIGF1
dG8gaGFyZGxpbmtQYXRoID0gdGVtcEZpbGVQYXRoKCkgKyAiLWhhcmRsaW5rIjsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxv
bmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0Rmls
ZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXpl
LCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmhhcmRMaW5rT3JDb3B5RmlsZSh0
ZW1wRmlsZVBhdGgoKSwgaGFyZGxpbmtQYXRoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtGaWxl
U2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxp
bmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxl
U2l6ZSk7CisKKyAgICBhdXRvIGhhcmRsaW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0
YWRhdGEoaGFyZGxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRhdGEp
OworICAgIEVYUEVDVF9FUShoYXJkbGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5
cGU6OkZpbGUpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1w
RmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRl
bXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyho
YXJkbGlua1BhdGgpKTsKKworICAgIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAg
ICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CiB9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkK
</data>
<flag name="commit-queue"
          id="448077"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427468</attachid>
            <date>2021-04-30 16:48:40 -0700</date>
            <delta_ts>2021-04-30 18:02:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210430164839.patch</filename>
            <type>text/plain</type>
            <size>45591</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li45
Y2YxNjJhNWFmYjI3MGVjMTc1NjdiZjFlOGY2N2M5MTQ1OGJkNGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCBsZXZl
cmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0gdG8gcmVkdWNlIHRoZSBh
bW91bnQgb2YKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVFeGlz
dHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlSXNE
aXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldFZvbHVtZUZyZWVTcGFjZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVTeW1ib2xpY0xpbmspOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6aGFyZExpbmspOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKiB3dGYvRmlsZVN5c3Rl
bS5oOgorICAgICAgICAqIHd0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW06CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAq
IHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorCiAy
MDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2luZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJh
eXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwppbmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcw
ZWUzNmQ5NGQxMDVmYTI1Li5jNGI0ZDY2Mzg1ZDUwYmYxNDFkYzJlNDJmNWUwYWQ3MWUyYzZjYzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNj
cmlwdENvcmUueGNjb25maWcKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9E
VUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUgPSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1v
ZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9M
REZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRf
YWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19a
VFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18x
OGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5j
dGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVT
M19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdi
YWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMx
MGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVfY2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFu
Z2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5
c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdp
bkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04
X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNf
Y3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3Ry
aW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0Ux
NV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFp
dHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJLVF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pO
U3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VF
TlNfOWVuYWJsZV9pZklYc3IyMV9faXNfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5
cGVFUk5TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJ
Y0VFRUVTOF9TOF87CiAKIE9USEVSX0xERkxBR1NfQkFTRSA9ICQoT1RIRVJfTERGTEFHU19ISURF
X1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEiOwogT1RIRVJfTERGTEFHU1tzZGs9ZW1iZWRkZWQq
XSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAyY2Q2M2RlNTcuLmIyODQ0MWMx
YWYxMDQ2MDI3MGIzMDJkYTcwMDNkNjA4ZTcwY2Q3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVNZXRhZGF0YS5oPgogI2luY2x1ZGUg
PHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkRmlsZXN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTQ4LDYgKzQ5LDggQEAgbmFtZXNwYWNl
IFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKK25hbWVzcGFjZSBmcyA9IHN0
ZDo6ZmlsZXN5c3RlbTsKKwogLy8gVGhlIGZvbGxvd2luZyBsb3dlci1BU0NJSSBjaGFyYWN0ZXJz
IG5lZWQgZXNjYXBpbmcgdG8gYmUgdXNlZCBpbiBhIGZpbGVuYW1lCiAvLyBhY3Jvc3MgYWxsIHN5
c3RlbXMsIGluY2x1ZGluZyBXaW5kb3dzOgogLy8gICAgIC0gVW5wcmludGFibGUgQVNDSUkgKDAw
LTFGKQpAQCAtMzgyLDE0ICszODUsNiBAQCB2b2lkIHVubG9ja0FuZENsb3NlRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZShoYW5kbGUpOwogfQogCi1ib29sIGZp
bGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAgICBhdXRvIG1ldGFkYXRhID0gc2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMg
PyBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRoKSA6IGZpbGVNZXRhZGF0YShwYXRo
KTsKLSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGU6OkRpcmVjdG9yeTsK
LX0KLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1h
cEZvclBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwyMCArNDAzLDYgQEAgU3RyaW5nIGNy
ZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5nJikKIH0KICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZW50cmllcyA9IGxpc3REaXJl
Y3RvcnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7Ci0g
ICAgICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3M6Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGVudHJ5KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7Ci0gICAgfQotICAgIHJl
dHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0KLSNlbmRpZgotCiBNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQogewogICAgIGNvbnN0
ZXhwciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpAQCAtNTA0LDUgKzQ4NSwxMDcgQEAg
T3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJl
dHVybiBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OmV4aXN0cyhmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHJldHVy
biBmczo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVjKTsK
KyAgICByZXR1cm4gIWVjOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykKK2Jvb2wgZGVsZXRlRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBl
YzsKKyAgICByZXR1cm4gZnM6OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKyNlbmRpZgorCitib29sIG1vdmVGaWxl
KGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIHN0
ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6cmVuYW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihvbGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKS5kYXRh
KCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGdldEZpbGVTaXplKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVj
OworICAgIGF1dG8gc2l6ZSA9IGZzOjpmaWxlX3NpemUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc3VsdCA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsZUlzRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBm
czo6ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpCisgICAgICAgIGZpbGVTdGF0
dXMgPSBmczo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVj
KTsKKyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3ltbGlua19zdGF0dXMoZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVybiBmaWxl
U3RhdHVzLnR5cGUoKSA9PSBmczo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2Jvb2wgbWFr
ZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2Nv
ZGUgZWM7CisgICAgZnM6OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRWb2x1
bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQorewor
ICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5mbyA9IGZzOjpzcGFjZShm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJlZVNwYWNlID0gc3BhY2VJbmZvLmF2YWlsYWJs
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3Qg
U3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCit7Cisg
ICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfc3ltbGluayhmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oc3ltYm9saWNMaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKwor
Ym9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgbGlu
a1BhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9s
aW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsK
K30KKworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBj
b25zdCBTdHJpbmcmIGxpbmtQYXRoKQoreworICAgIGZzOjpwYXRoIGZzVGFyZ2V0UGF0aCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCk7CisgICAgZnM6OnBhdGgg
ZnNMaW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpOwor
CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9saW5rKGZzVGFy
Z2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZnM6OmNvcHlfZmlsZShmc1RhcmdldFBhdGgsIGZzTGlua1BhdGgsIGVjKTsK
KyAgICByZXR1cm4gIWVjOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgZnM6OnJlbW92
ZV9hbGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJl
dHVybiAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJj
ZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUzY2JlZjQyZWRmNjVlZTAz
ZDhjNWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0Nzk4OWEyNzUxMjA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93
dGYvRmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgdW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CiAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90LgogV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3Rp
bmF0aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYg
dGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBIYXJkIGxpbmtzIGEgZmls
ZSBpZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBPUlRfUFJJVkFURSBib29s
IGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBk
ZXN0aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJkTGlua09yQ29weUZpbGUo
Y29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKTsKIAogI2lm
IFVTRShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBsb2NrRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29h
L0ZpbGVTeXN0ZW1Db2NvYS5tbQppbmRleCAxY2NlMTdkYzU5ZTIzM2M2YTU4MDAxZTFiNmM5MDhl
ODQ1YTdjOTA2Li5jODUzN2VhMTczZTk5YmFiZGU3Zjc4YzlkM2NkYzgzYzFlM2EzNWNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0KKysrIGIvU291
cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCkBAIC0xMjYsMjkgKzEyNiw2IEBA
IFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1G
aWxlSGFuZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVt
cG9yYXJ5RmlsZVBhdGguZGF0YSgpKTsKIH0KIAotYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcm
IG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICAvLyBPdmVyd3JpdGUgZXhp
c3RpbmcgZmlsZXMuCi0gICAgYXV0byBtYW5hZ2VyID0gYWRvcHROUyhbW05TRmlsZU1hbmFnZXIg
YWxsb2NdIGluaXRdKTsKLSAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1dURldlYkZpbGVN
YW5hZ2VyRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbbWFuYWdlciBzZXREZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBib29sIHN1
Y2Nlc3MgPSBbbWFuYWdlciBtb3ZlSXRlbUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6b2xk
UGF0aF0gdG9VUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpuZXdQYXRoXSBlcnJvcjomZXJyb3Jd
OwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgTlNMb2coQCJFcnJvciBpbiBtb3ZlRmlsZTog
JUAiLCBlcnJvcik7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgZ2V0Vm9sdW1lRnJl
ZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKLXsKLSAgICBO
U0RpY3Rpb25hcnkgKmZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGljdGlvbmFyeSA9IFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mRmlsZVN5c3RlbUZvclBhdGg6KE5TU3Ry
aW5nICopcGF0aCBlcnJvcjpOVUxMXTsKLSAgICBpZiAoIWZpbGVTeXN0ZW1BdHRyaWJ1dGVzRGlj
dGlvbmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyZWVTcGFjZSA9IFtbZmlsZVN5
c3RlbUF0dHJpYnV0ZXNEaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZpbGVTeXN0ZW1GcmVlU2l6
ZV0gdW5zaWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogTlNTdHJp
bmcgKmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShOU1N0cmluZyAqZGlyZWN0b3J5UHJlZml4KQog
ewogICAgIE5TU3RyaW5nICp0ZW1wRGlyZWN0b3J5ID0gTlNUZW1wb3JhcnlEaXJlY3RvcnkoKTsK
QEAgLTE3OCwxMSArMTU1LDYgQEAgTlNTdHJpbmcgKmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeShO
U1N0cmluZyAqZGlyZWN0b3J5UHJlZml4KQogICAgIHJldHVybiBbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246cGF0aC5kYXRh
KCkgbGVuZ3RoOmxlbmd0aF07CiB9CiAKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIHJlbW92ZUl0ZW1BdFBhdGg6cGF0aCBlcnJvcjpuaWxdOwotfQotCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKIGJvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKaW5kZXgg
Njg3ZmExMGMyNjc1MzZjMDU4ZTc5MjRkYmVjYjkzYTcxMjQ4Zjg5MC4uNjNkNWRhZjFhOTk0ZmY3
MjBjYzk0MzAzYzFmM2M1MmJhNDRlNDA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xp
Yi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9GaWxlU3lzdGVt
R2xpYi5jcHAKQEAgLTExOCwyNCArMTE4LDYgQEAgU3RyaW5nIGZpbGVuYW1lRm9yRGlzcGxheShj
b25zdCBTdHJpbmcmIHN0cmluZykKICNlbmRpZgogfQogCi1ib29sIGZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8g
Z19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpIDogZmFsc2U7
Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBm
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFs
aWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkgPyBnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpICE9
IC0xIDogZmFsc2U7Ci19Ci0KLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19ybWRp
cihmaWxlbmFtZS5kYXRhKCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29sIGdldEZp
bGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7CiAgICAg
YXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE1NCwx
NiArMTM2LDYgQEAgc3RhdGljIGJvb2wgZ2V0RmlsZUxTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwg
R1N0YXRCdWYqIHN0YXRCdWZmZXIpCiAgICAgcmV0dXJuIGdfbHN0YXQoZmlsZW5hbWUuZGF0YSgp
LCBzdGF0QnVmZmVyKSAhPSAtMTsKIH0KIAotYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcm
IHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKLXsKLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0
OwotICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIHJl
dHVybiB0cnVlOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKIHsKICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5m
byA9IGFkb3B0R1JlZihnX2ZpbGVfaW9fc3RyZWFtX3F1ZXJ5X2luZm8oaGFuZGxlLCBHX0ZJTEVf
QVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIG51bGxwdHIsIG51bGxwdHIpKTsKQEAgLTI0MywzMCAr
MjE1LDExIEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKFN0cmluZ1ZpZXcgcGF0
aCwgY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXc+JiBjb21wCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKIH0KIAotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7
Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19ta2Rpcl93aXRo
X3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKSAhPSAtMSA6IGZhbHNlOwotfQotCiBT
dHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAgIHJldHVybiBzdHJpbmdGcm9tRmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKGdfZ2V0X2hvbWVfZGlyKCkpOwogfQogCi1ib29sIGNyZWF0ZVN5
bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgc3ltYm9s
aWNMaW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdldFBhdGhGU1JlcCA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24o
dGFyZ2V0UGF0aEZTUmVwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBz
eW1ib2xpY0xpbmtQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNM
aW5rUGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1BhdGhG
U1JlcCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhc3ltbGluayh0YXJn
ZXRQYXRoRlNSZXAuZGF0YSgpLCBzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpKTsKLX0KLQog
U3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgYXV0byBm
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTI3NywyMSArMjMw
LDYgQEAgU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOwogfQogCi1ib29sIGdldFZvbHVt
ZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0g
ICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBp
ZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0g
YWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmlsZS5nZXQoKSwgR19GSUxF
X0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBpZiAo
IWZpbGVJbmZvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmcmVlU3BhY2UgPSBnX2Zp
bGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgR19GSUxFX0FUVFJJ
QlVURV9GSUxFU1lTVEVNX0ZSRUUpOwotICAgIHJldHVybiAhIWZyZWVTcGFjZTsKLX0KLQogU3Ry
aW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8gZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC00MjgsNjIgKzM2Niw2IEBA
IGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3Ry
aW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKLSAgICBpZiAoIXZhbGlk
UmVwcmVzZW50YXRpb24ob2xkRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG5ld1BhdGgpOwot
ICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihuZXdGaWxlbmFtZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IG9sZEZpbGUgPSBhZG9wdEdSZWYoZ19maWxl
X25ld19mb3JfcGF0aChvbGRGaWxlbmFtZS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBu
ZXdGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobmV3RmlsZW5hbWUuZGF0YSgp
KSk7Ci0KLSAgICByZXR1cm4gZ19maWxlX21vdmUob2xkRmlsZS5nZXQoKSwgbmV3RmlsZS5nZXQo
KSwgR19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxs
cHRyKTsKLX0KLQotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBkZXN0aW5hdGlvbikKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBDcmVhdGVI
YXJkTGluayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgc291cmNlLndpZGVD
aGFyYWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAgYXV0byBzb3VyY2VGaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghdmFsaWRS
ZXByZXNlbnRhdGlvbihzb3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGF1dG8gZGVzdGluYXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihk
ZXN0aW5hdGlvbik7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uRmls
ZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIWxpbmsoc291cmNl
RmlsZW5hbWUuZGF0YSgpLCBkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSk7Ci0jZW5kaWYKLX0K
LQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRp
b24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBl
cmZvcm0gYSBjb3B5IGluc3RlYWQuCi0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gISE6OkNv
cHlGaWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgZGVzdGluYXRpb24ud2lkZUNo
YXJhY3RlcnMoKS5kYXRhKCksIFRSVUUpOwotI2Vsc2UKLSAgICBhdXRvIHNvdXJjZUZpbGVuYW1l
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAgaWYgKCF2YWxpZFJlcHJl
c2VudGF0aW9uKHNvdXJjZUZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBkZXN0aW5hdGlvbkZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3Rp
bmF0aW9uKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb25GaWxlbmFt
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZUZp
bGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VGaWxlbmFtZS5kYXRhKCkp
KTsKLSAgICBHUmVmUHRyPEdGaWxlPiBkZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxl
X25ld19mb3JfcGF0aChkZXN0aW5hdGlvbkZpbGVuYW1lLmRhdGEoKSkpOwotICAgIHJldHVybiBn
X2ZpbGVfY29weShzb3VyY2VGaWxlLmdldCgpLCBkZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklM
RV9DT1BZX05PTkUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwotI2VuZGlm
Ci19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdldEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBm
c0ZpbGUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3
X2Zvcl9wYXRoKGZzRmlsZS5kYXRhKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVt
UE9TSVguY3BwCmluZGV4IDk5ZGNiZjIzZTkwZjBhZTEzNDIxY2EwYmIzZTI5MGMyOTVjZjEyOTcu
LmJmZThmYWJiNmJmYzY3MGU0ZWU0YjMwZDhiM2M0OGU0NzlkYzVkMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNDksMzYgKzQ5LDYgQEAgbmFtZXNwYWNl
IFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKLWJvb2wgZmlsZUV4aXN0cyhj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0g
J1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFjY2Vzcyhmc1JlcC5k
YXRhKCksIEZfT0spICE9IC0xOwotfQotCi1ib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykg
ewotICAgICAgICBMT0dfRVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0ZS4gRmFpbGVkIHRvIGdl
dCBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIHRvIGNyZWF0ZSBDU3RyaW5nIGZyb20gY2ZTdHJp
bmcgb3IgZmlsZXN5c3RlbSByZXByZXNlbnRhdGlvbiBpcyBhIG51bGwgdmFsdWUiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHVubGluayguLi4pIHJldHVybnMgMCBv
biBzdWNjZXNzZnVsIGRlbGV0aW9uIG9mIHRoZSBwYXRoIGFuZCBub24temVybyBpbiBhbnkgb3Ro
ZXIgY2FzZSAoaW5jbHVkaW5nIGludmFsaWQgcGVybWlzc2lvbnMgb3Igbm9uLWV4aXN0ZW50IGZp
bGUpCi0gICAgYm9vbCB1bmxpbmtlZCA9ICF1bmxpbmsoZnNSZXAuZGF0YSgpKTsKLSAgICBpZiAo
IXVubGlua2VkICYmIGVycm5vICE9IEVOT0VOVCkKLSAgICAgICAgTE9HX0VSUk9SKCJGaWxlIGZh
aWxlZCB0byBkZWxldGUuIEVycm9yIG1lc3NhZ2U6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQot
ICAgIHJldHVybiB1bmxpbmtlZDsKLX0KLQogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUsIEZpbGVBY2Nlc3NQZXJtaXNzaW9u
IHBlcm1pc3Npb24sIGJvb2wgZmFpbElmRmlsZUV4aXN0cykKIHsKICAgICBDU3RyaW5nIGZzUmVw
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtMTg2LDM1ICsxNTYsNiBAQCBi
b29sIHVubG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkKIH0KICNlbmRpZgogCi0j
aWYgIVBMQVRGT1JNKE1BQykKLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoKQotewotICAgIENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1ww
JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gcm1kaXIoLi4uKSByZXR1cm5zIDAg
b24gc3VjY2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9uLXplcm8gaW4gYW55IG90
aGVyIGNhc2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9yIG5vbi1leGlzdGVudCBm
aWxlKQotICAgIHJldHVybiAhcm1kaXIoZnNSZXAuZGF0YSgpKTsKLX0KLSNlbmRpZgotCi1ib29s
IGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCi17Ci0g
ICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAg
IGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKLQotICAgIGlmIChzdGF0
KGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmVzdWx0ID0gZmlsZUluZm8uc3Rfc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBn
ZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcmIHJlc3VsdCkK
IHsKICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKQEAgLTMwMCwxOSArMjQxLDYgQEAgT3B0aW9u
YWw8RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhjb25zdCBTdHJp
bmcmIHBhdGgpCiAgICAgcmV0dXJuIGZpbGVNZXRhZGF0YVVzaW5nRnVuY3Rpb24ocGF0aCwgJnN0
YXQpOwogfQogCi1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBh
dGgsIGNvbnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICBDU3RyaW5nIHRhcmdl
dFBhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKTsKLSAgICBp
ZiAoIXRhcmdldFBhdGhGU1JlcC5kYXRhKCkgfHwgdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKVswXSA9
PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIHN5bWJvbGljTGlu
a1BhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoKTsK
LSAgICBpZiAoIXN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRhKCkgfHwgc3ltYm9saWNMaW5rUGF0
aEZTUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gIXN5bWxpbmsodGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZT
UmVwLmRhdGEoKSk7Ci19Ci0KIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsKICAgICBpZiAocGF0aC5l
bmRzV2l0aCgnLycpKQpAQCAtMzI5LDM1ICsyNTcsNiBAQCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNvbnN0IFZlY3RvcjxTdHJpbmdWaWV3PiYgY29t
cAogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLWJvb2wgbWFrZUFsbERpcmVj
dG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBDU3RyaW5nIGZ1bGxQYXRoID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmICghYWNjZXNzKGZ1bGxQYXRoLmRh
dGEoKSwgRl9PSykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2hhciogcCA9IGZ1bGxQ
YXRoLm11dGFibGVEYXRhKCkgKyAxOwotICAgIGludCBsZW5ndGggPSBmdWxsUGF0aC5sZW5ndGgo
KTsKLQotICAgIGlmIChwW2xlbmd0aCAtIDFdID09ICcvJykKLSAgICAgICAgcFtsZW5ndGggLSAx
XSA9ICdcMCc7Ci0gICAgZm9yICg7ICpwOyArK3ApIHsKLSAgICAgICAgaWYgKCpwID09ICcvJykg
ewotICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICAgICAgaWYgKGFjY2VzcyhmdWxsUGF0
aC5kYXRhKCksIEZfT0spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRoLmRh
dGEoKSwgU19JUldYVSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICpwID0gJy8nOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChhY2Nlc3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkgewotICAgICAgICBpZiAobWtkaXIoZnVs
bFBhdGguZGF0YSgpLCBTX0lSV1hVKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBT
dHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZp
bmQoJy8nKSArIDEpOwpAQCAtNDE5LDI5ICszMTgsNiBAQCBDU3RyaW5nIGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiAjZW5kaWYKIAogI2lmICFQTEFURk9STShD
T0NPQSkKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcm
IG5ld1BhdGgpCi17Ci0gICAgYXV0byBvbGRGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihvbGRQYXRoKTsKLSAgICBpZiAob2xkRmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24obmV3UGF0aCk7Ci0gICAgaWYgKG5ld0ZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuYW1lKG9sZEZpbGVuYW1lLmRhdGEoKSwgbmV3
RmlsZW5hbWUuZGF0YSgpKSAhPSAtMTsKLX0KLQotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29u
c3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewotICAgIHN0cnVjdCBzdGF0
dmZzIGZpbGVTeXN0ZW1TdGF0OwotICAgIGlmICghc3RhdHZmcyhmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCkuZGF0YSgpLCAmZmlsZVN5c3RlbVN0YXQpKSB7Ci0gICAgICAgIGZyZWVTcGFj
ZSA9IGZpbGVTeXN0ZW1TdGF0LmZfYmF2YWlsICogZmlsZVN5c3RlbVN0YXQuZl9mcnNpemU7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFN0cmlu
ZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFu
ZGxlJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgc3VmZml4KQogewogICAgIC8vIEZJWE1FOiBTdWZm
aXggaXMgbm90IHN1cHBvcnRlZCwgYnV0IE9LIGZvciBub3cgc2luY2UgdGhlIGNvZGUgdXNpbmcg
aXQgaXMgbWFjT1MtcG9ydC1vbmx5LgpAQCAtNDY4LDUzICszNDQsNiBAQCBlbmQ6CiB9CiAjZW5k
aWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIGlmIChzb3VyY2UuaXNFbXB0
eSgpIHx8IGRlc3RpbmF0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAg
IGlmICghZnNTb3VyY2UuZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGZzRGVzdGluYXRpb24gPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOwot
ICAgIGlmICghZnNEZXN0aW5hdGlvbi5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiAhbGluayhmc1NvdXJjZS5kYXRhKCksIGZzRGVzdGluYXRpb24uZGF0YSgpKTsK
LX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGlu
YXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQu
IFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0gICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVz
dGluYXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZz
U291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0gICAgaWYgKCFmc1Nv
dXJjZS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZnNEZXN0aW5h
dGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgaWYgKCFm
c0Rlc3RpbmF0aW9uLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBo
YW5kbGUgPSBvcGVuKGZzRGVzdGluYXRpb24uZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBP
X0VYQ0wsIDA2NjYpOwotICAgIGlmIChoYW5kbGUgPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFu
ZGxlKHNvdXJjZSwgaGFuZGxlKTsKLSAgICBjbG9zZShoYW5kbGUpOwotCi0gICAgLy8gSWYgdGhl
IGNvcHkgZmFpbGVkLCBkZWxldGUgdGhlIHVudXNhYmxlIGZpbGUuCi0gICAgaWYgKCFhcHBlbmRS
ZXN1bHQpCi0gICAgICAgIHVubGluayhmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICByZXR1
cm4gYXBwZW5kUmVzdWx0OwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQo
Y29uc3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dU
Ri93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IGEwM2Y4YTQ2NDRlZGI5MDc4MWZlNDM5
YWY2YzAzNzllNWExMmE3YTAuLmZkNTlmMTkwM2U2ZTFmZTg0ZDE1OGQ1NzVhOTYyOWVhYjkwMGM5
ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTEwNSwxNSArMTA1LDYg
QEAgc3RhdGljIHZvaWQgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWVGcm9tRmluZERhdGEoY29uc3Qg
V0lOMzJfRklORF9EQVRBVyYgZmluZERhdGEKICAgICB0aW1lID0gZmlsZVRpbWUuUXVhZFBhcnQg
LyAxMDAwMDAwMCAtIGtTZWNvbmRzRnJvbUZpbGVUaW1lVG9UaW1ldDsKIH0KIAotYm9vbCBnZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgc2l6ZSkKLXsKLSAgICBXSU4z
Ml9GSU5EX0RBVEFXIGZpbmREYXRhOwotICAgIGlmICghZ2V0RmluZERhdGEocGF0aCwgZmluZERh
dGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZ2V0RmlsZVNpemVGcm9t
RmluZERhdGEoZmluZERhdGEsIHNpemUpOwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3Jt
RmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBsb25nIGxvbmcmIHNpemUpCiB7CiAgICAgQllfSEFORExF
X0ZJTEVfSU5GT1JNQVRJT04gZmlsZUluZm9ybWF0aW9uOwpAQCAtMjIwLDM2ICsyMTEsNiBAQCBP
cHRpb25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxpbmtzKGNvbnN0
IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gZmluZERhdGFUb0ZpbGVNZXRhZGF0YShmaW5kRGF0
YSk7CiB9CiAKLWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0
aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAgIHJldHVybiA6OkNyZWF0
ZVN5bWJvbGljTGlua1coc3ltYm9saWNMaW5rUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwg
dGFyZ2V0UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgMCk7Ci19Ci0KLWJvb2wgZmlsZUV4
aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0
YTsKLSAgICByZXR1cm4gZ2V0RmluZERhdGEocGF0aCwgZmluZERhdGEpOwotfQotCi1ib29sIGRl
bGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmaWxlbmFtZSA9IHBh
dGg7Ci0gICAgcmV0dXJuICEhRGVsZXRlRmlsZVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5k
YXRhKCkpOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIHJldHVybiAhIVJlbW92ZURp
cmVjdG9yeVcoZmlsZW5hbWUud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCkpOwotfQotCi1ib29sIG1v
dmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewot
ICAgIFN0cmluZyBvbGRGaWxlbmFtZSA9IG9sZFBhdGg7Ci0gICAgU3RyaW5nIG5ld0ZpbGVuYW1l
ID0gbmV3UGF0aDsKLSAgICByZXR1cm4gISE6Ok1vdmVGaWxlRXgob2xkRmlsZW5hbWUud2lkZUNo
YXJhY3RlcnMoKS5kYXRhKCksIG5ld0ZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBN
T1ZFRklMRV9DT1BZX0FMTE9XRUQgfCBNT1ZFRklMRV9SRVBMQUNFX0VYSVNUSU5HKTsKLX0KLQog
U3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKE1BWF9QQVRI
KTsKQEAgLTI5MSwxOSArMjUyLDYgQEAgQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
Y29uc3QgU3RyaW5nJiBwYXRoKQogCiAjZW5kaWYgLy8gIVVTRShDRikKIAotYm9vbCBtYWtlQWxs
RGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmdWxsUGF0aCA9
IHBhdGg7Ci0gICAgaWYgKFNIQ3JlYXRlRGlyZWN0b3J5RXgobnVsbHB0ciwgZnVsbFBhdGgud2lk
ZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpICE9IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAg
ICAgRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEVS
Uk9SX0ZJTEVfRVhJU1RTICYmIGVycm9yICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcGF0aCAlcyIsIHBhdGguYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQogewogICAg
IHJldHVybiAiIjsKQEAgLTUxNCwyMCArNDYyLDYgQEAgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CiB9CiAKLWJvb2wgaGFyZExpbmsoY29uc3QgU3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgcmV0dXJuIENy
ZWF0ZUhhcmRMaW5rKGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBzb3VyY2Uu
d2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpOwotfQotCi1ib29sIGhhcmRMaW5rT3JD
b3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikK
LXsKLSAgICBpZiAoaGFyZExpbmsoc291cmNlLCBkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVh
ZC4KLSAgICByZXR1cm4gISE6OkNvcHlGaWxlKHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEo
KSwgZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIFRSVUUpOwotfQotCiBTdHJp
bmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCkKIHsKICAgICByZXR1cm4gY2Fj
aGVkU3RvcmFnZURpcmVjdG9yeShDU0lETF9MT0NBTF9BUFBEQVRBKTsKQEAgLTU1NywxNiArNDkx
LDYgQEAgVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eSwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKLWJvb2wg
Z2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFj
ZSkKLXsKLSAgICBVTEFSR0VfSU5URUdFUiBmcmVlQnl0ZXNBdmFpbGFibGVUb0NhbGxlcjsKLSAg
ICBpZiAoIUdldERpc2tGcmVlU3BhY2VFeFcocGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwg
JmZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZnJlZVNwYWNlID0gZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxs
ZXIuUXVhZFBhcnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdl
dEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAgICAgYXV0byBoYW5kbGUg
PSBvcGVuRmlsZShmc0ZpbGUuZGF0YSgpLCBGaWxlT3Blbk1vZGU6OlJlYWQpOwpAQCAtNTk2LDIx
ICs1MjAsNiBAQCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCkKICAgICB9KTsKIH0K
IAotYm9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBh
dGgpCi17Ci0gICAgU0hGSUxFT1BTVFJVQ1QgZGVsZXRlT3BlcmF0aW9uID0gewotICAgICAgICBu
dWxscHRyLAotICAgICAgICBGT19ERUxFVEUsCi0gICAgICAgIGRpcmVjdG9yeVBhdGgud2lkZUNo
YXJhY3RlcnMoKS5kYXRhKCksCi0gICAgICAgIEwiIiwKLSAgICAgICAgRk9GX05PQ09ORklSTUFU
SU9OIHwgRk9GX05PRVJST1JVSSB8IEZPRl9TSUxFTlQsCi0gICAgICAgIGZhbHNlLAotICAgICAg
ICBudWxscHRyLAotICAgICAgICBMIiIKLSAgICB9OwotICAgIHJldHVybiAhU0hGaWxlT3BlcmF0
aW9uKCZkZWxldGVPcGVyYXRpb24pOwotfQotCiBib29sIHVubWFwVmlld09mRmlsZSh2b2lkKiBi
dWZmZXIsIHNpemVfdCkKIHsKICAgICByZXR1cm4gVW5tYXBWaWV3T2ZGaWxlKGJ1ZmZlcik7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDhhMzky
MjkzNTJhY2NlYjNlZDQxYzg4NDI1YjMwN2MzYjBhNmQyNC4uNGUxZWFmN2FjNmNmMGNjMGRlNWI5
MDk1ZmZkNzEwMDBjOWZjZjJhZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVz
eXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UgZm9yIHRoZSBGaWxlU3lzdGVt
IEFQSSB0aGF0IHdhcyBtb2RpZmllZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRl
c3Q6OnRlbXBGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lz
dGVtVGVzdDo6dGVtcEZpbGVTeW1saW5rUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyUGF0aCBjb25zdCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyU3ltbGlua1Bh
dGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBF
bXB0eUZpbGVQYXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1U
ZXN0OjpzcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpGaWxlU3lzdGVtVGVzdDo6YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6cXVvdGVDb250YWluaW5nRmlsZVBh
dGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAyMS0wNC0z
MCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtp
dHNjcHldIFN1cHBvcnQgYXJndW1lbnRzIHRvIFRhc2tQb29sIHNldHVwIGFuZCB0ZWFyZG93bgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCA4ZjY1
MWQzZWFlMzQzMjk3NTFhYzM2MWRkN2UwNjRjYjYzN2UzNzUyLi5jMjkzNWQyOTAyZTQ2ZmI4Y2Jj
YTIyNWQwNmU3ODYyNWM0ODFmNzJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9GaWxlU3lzdGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9GaWxlU3lzdGVtLmNwcApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLSAgICAgICAgLy8gY3JlYXRlIHRlbXAg
ZmlsZQorICAgICAgICAvLyBjcmVhdGUgdGVtcCBmaWxlLgogICAgICAgICBGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwogICAgICAgICBtX3RlbXBGaWxlUGF0aCA9IEZpbGVT
eXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wVGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAg
ICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3Ry
bGVuKEZpbGVTeXN0ZW1UZXN0RGF0YSkpOwpAQCAtNTIsNiArNTIsMTggQEAgcHVibGljOgogICAg
ICAgICBtX3RlbXBGaWxlU3ltbGlua1BhdGggPSAidGVtcFRlc3RGaWxlLXN5bWxpbmsiOwogICAg
ICAgICBGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsobV90ZW1wRmlsZVBhdGgsIG1fdGVt
cEZpbGVTeW1saW5rUGF0aCk7CiAKKyAgICAgICAgLy8gQ3JlYXRlIHRlbXAgZGlyZWN0b3J5Lgor
ICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgdGVtcG9yYXJ5RmlsZTsKKyAg
ICAgICAgbV90ZW1wRW1wdHlGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZp
bGUoInRlbXBFbXB0eUZvbGRlciIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUobV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERp
cmVjdG9yaWVzKG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisKKyAgICAgICAgbV90ZW1wRW1wdHlG
b2xkZXJTeW1saW5rUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1w
dHlGb2xkZXItc3ltbGluayIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpj
bG9zZUZpbGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
bV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0
ZVN5bWJvbGljTGluayhtX3RlbXBFbXB0eUZvbGRlclBhdGgsIG1fdGVtcEVtcHR5Rm9sZGVyU3lt
bGlua1BhdGgpOworCiAgICAgICAgIG1fdGVtcEVtcHR5RmlsZVBhdGggPSBGaWxlU3lzdGVtOjpv
cGVuVGVtcG9yYXJ5RmlsZSgidGVtcEVtcHR5VGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKIApAQCAtNjksMjIgKzgxLDI4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRmlsZVBhdGgp
OwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7
CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fdGVtcEVtcHR5Rm9s
ZGVyUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xk
ZXJTeW1saW5rUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1w
dHlGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zcGFjZUNvbnRh
aW5pbmdGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9iYW5nQ29u
dGFpbmluZ0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3F1b3Rl
Q29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRlbXBGaWxl
UGF0aCgpIHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1w
RmlsZVN5bWxpbmtQYXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVN5bWxpbmtQYXRoOyB9Ci0gICAg
Y29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEVtcHR5Rmls
ZVBhdGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyBy
ZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFu
Z0NvbnRhaW5pbmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsg
fQotICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBt
X3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYg
dGVtcEZpbGVTeW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEZpbGVTeW1saW5rUGF0
aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyUGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5
Rm9sZGVyU3ltbGlua1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBFbXB0eUZvbGRlclN5bWxp
bmtQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29u
dGFpbmluZ0ZpbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0
aDsgfQorICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgcXVv
dGVDb250YWluaW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3F1b3RlQ29udGFpbmluZ0Zp
bGVQYXRoOyB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVQYXRoOwogICAgIFN0
cmluZyBtX3RlbXBGaWxlU3ltbGlua1BhdGg7CisgICAgU3RyaW5nIG1fdGVtcEVtcHR5Rm9sZGVy
UGF0aDsKKyAgICBTdHJpbmcgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aDsKICAgICBTdHJp
bmcgbV90ZW1wRW1wdHlGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9zcGFjZUNvbnRhaW5pbmdGaWxl
UGF0aDsKICAgICBTdHJpbmcgbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOwpAQCAtMTc2LDQgKzE5
NCwyNDYgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVOb25FbXB0eURpcmVjdG9yeSkK
ICAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wb3JhcnlUZXN0Rm9s
ZGVyKSk7CiB9CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUV4aXN0cykKK3sKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0
eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRo
KCksICJkb2VzLW5vdC1leGlzdCJfcykpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBk
ZWxldGVTeW1saW5rKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
dGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZGVsZXRlRmlsZSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKworICAgIC8vIFNob3VsZCBoYXZl
IGRlbGV0ZWQgdGhlIHN5bWxpbmsgYnV0IG5vdCB0aGUgdGFyZ2V0IGZpbGUuCisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOwor
fQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0ZUZpbGUpCit7CisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgpKSk7Cit9CisKK1RF
U1RfRihGaWxlU3lzdGVtVGVzdCwgZGVsZXRlRW1wdHlEaXJlY3RvcnkpCit7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlG
b2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0
ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZGVs
ZXRlRW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cit9CisKK1RFU1RfRihG
aWxlU3lzdGVtVGVzdCwgbW92ZUZpbGUpCit7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IHRlbXBG
aWxlUGF0aCgpICsgIi1tb3ZlZCI7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6bW92ZUZp
bGUodGVtcEZpbGVQYXRoKCksIGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVT
eXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCBkZXN0aW5hdGlvbikpOworfQorCitURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIG1vdmVGaWxlT3ZlcndyaXRlc0Rlc3RpbmF0aW9uKQoreworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkp
KTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNU
X0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVT
aXplKHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX1RSVUUoIWZp
bGVTaXplKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxl
UGF0aCgpLCB0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGZpbGVTaXplID0g
MDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRW1wdHlGaWxl
UGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7Cit9CisKK1RF
U1RfRihGaWxlU3lzdGVtVGVzdCwgZ2V0RmlsZVNpemUpCit7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5RmlsZVBhdGgoKSkpOworCisgICAgbG9uZyBs
b25nIGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDAp
OworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5Rmls
ZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRSghZmlsZVNpemUpOworCisgICAg
ZmlsZVNpemUgPSAwOworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2Vz
LW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxl
U2l6ZSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUlzRGlyZWN0b3J5KQorewor
ICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xk
ZXJQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7Cisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRl
clBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisK
KyAgICBhdXRvIGZvbGRlclN5bWxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0
YSh0ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIWZvbGRl
clN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKGZvbGRlclN5bWxpbmtNZXRhZGF0YS0+
dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgo
KSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyU3ltbGlu
a1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisK
KyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlUGF0
aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVY
UEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEZpbGVQYXRoKCksIEZp
bGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgYXV0byBm
aWxlU3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHRlbXBGaWxlU3lt
bGlua1BhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoISFmaWxlU3ltbGlua01ldGFkYXRhKTsKKyAg
ICBFWFBFQ1RfRVEoZmlsZVN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBl
OjpTeW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJl
Y3RvcnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJl
Y3RvcnkodGVtcEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpZZXMpKTsKKworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCks
ICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJ
c0RpcmVjdG9yeShmaWxlVGhhdERvZXNOb3RFeGlzdCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93
U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlz
RGlyZWN0b3J5KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dT
eW1ib2xpY0xpbmtzOjpZZXMpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBtYWtlQWxs
RGlyZWN0b3JpZXMpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0
ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxl
SXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VB
bGxEaXJlY3Rvcmllcyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBTdHJpbmcgc3ViRm9s
ZGVyUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHModGVtcEVtcHR5
Rm9sZGVyUGF0aCgpLCB7ICJzdWJGb2xkZXIxIiwgInN1YkZvbGRlcjIiLCAic3ViRm9sZGVyMyIg
fSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0
aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhzdWJG
b2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdWJG
b2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5
KHN1YkZvbGRlclBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5v
KSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlTm9uRW1wdHlEaXJlY3Rvcnko
dGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGdl
dFZvbHVtZUZyZWVTcGFjZSkKK3sKKyAgICB1aW50NjRfdCBmcmVlU3BhY2UgPSAwOworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldFZvbHVtZUZyZWVTcGFjZSh0ZW1wRmlsZVBhdGgoKSwg
ZnJlZVNwYWNlKSk7CisgICAgRVhQRUNUX0dUKGZyZWVTcGFjZSwgMFUpOworCisgICAgU3RyaW5n
IGZpbGVUaGF0RG9lc05vdEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6Z2V0Vm9sdW1lRnJlZVNwYWNlKGZpbGVUaGF0RG9lc05vdEV4
aXN0LCBmcmVlU3BhY2UpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1i
b2xpY0xpbmspCit7CisgICAgYXV0byBzeW1saW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1z
eW1saW5rIjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5r
UGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayh0
ZW1wRmlsZVBhdGgoKSwgc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisKKyAgICBhdXRvIHN5bWxpbmtNZXRhZGF0YSA9
IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YShzeW1saW5rUGF0aCk7CisgICAgRVhQRUNUX1RSVUUo
ISFzeW1saW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShzeW1saW5rTWV0YWRhdGEtPnR5cGUs
IEZpbGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKworICAgIEVYUEVDVF9UUlVFKEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0
ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGb2xkZXIpCit7CisgICAgYXV0byBzeW1saW5rUGF0
aCA9IHRlbXBFbXB0eUZvbGRlclBhdGgoKSArICItc3ltbGluayI7CisgICAgRVhQRUNUX0ZBTFNF
KEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShG
aWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBzeW1s
aW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlu
a1BhdGgpKTsKKworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1l
dGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7
CisgICAgRVhQRUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBl
OjpTeW1ib2xpY0xpbmspOworCisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0Rp
cmVjdG9yeShzeW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
czo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnkoc3lt
bGlua1BhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOwor
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzeW1saW5rUGF0aCkpOwor
ICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRo
KCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGaWxl
RG9lc05vdEV4aXN0KQoreworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVT
eXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJk
b2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMoZmlsZVRoYXREb2VzTm90RXhpc3QpKTsKKworICAgIGF1dG8gc3ltbGlua1BhdGggPSBmaWxl
VGhhdERvZXNOb3RFeGlzdCArICItc3ltbGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpjcmVhdGVTeW1ib2xpY0xpbmsoZmlsZVRoYXREb2VzTm90RXhpc3QsIHN5bWxpbmtQYXRoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsK
K30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVIYXJkTGluaykKK3sKKyAgICBhdXRv
IGhhcmRsaW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1oYXJkbGluayI7CisgICAgRVhQRUNU
X0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25n
IGxvbmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVT
aXplKHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwg
MCk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpoYXJkTGluayh0ZW1wRmlsZVBhdGgo
KSwgaGFyZGxpbmtQYXRoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtGaWxlU2l6ZSA9IDA7Cisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5r
RmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CisKKyAg
ICBhdXRvIGhhcmRsaW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEoaGFyZGxp
bmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRhdGEpOworICAgIEVYUEVD
VF9FUShoYXJkbGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOwor
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkp
OworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgp
KSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgp
KTsKKworICAgIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEo
bGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgY3Jl
YXRlSGFyZExpbmtPckNvcHlGaWxlKQoreworICAgIGF1dG8gaGFyZGxpbmtQYXRoID0gdGVtcEZp
bGVQYXRoKCkgKyAiLWhhcmRsaW5rIjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7Cisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZp
bGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmhhcmRMaW5rT3JDb3B5RmlsZSh0ZW1wRmlsZVBhdGgoKSwgaGFyZGxpbmtQ
YXRoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5r
UGF0aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsK
KyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CisKKyAgICBhdXRvIGhhcmRs
aW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEoaGFyZGxpbmtQYXRoKTsKKyAg
ICBFWFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShoYXJkbGlu
a01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOworCisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxp
bmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUo
aGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXpl
LCBmaWxlU2l6ZSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427474</attachid>
            <date>2021-04-30 18:03:02 -0700</date>
            <delta_ts>2021-04-30 18:08:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210430180301.patch</filename>
            <type>text/plain</type>
            <size>46175</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li45
Y2YxNjJhNWFmYjI3MGVjMTc1NjdiZjFlOGY2N2M5MTQ1OGJkNGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCBsZXZl
cmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0gdG8gcmVkdWNlIHRoZSBh
bW91bnQgb2YKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVFeGlz
dHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlSXNE
aXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldFZvbHVtZUZyZWVTcGFjZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVTeW1ib2xpY0xpbmspOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6aGFyZExpbmspOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKiB3dGYvRmlsZVN5c3Rl
bS5oOgorICAgICAgICAqIHd0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW06CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAq
IHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorCiAy
MDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2luZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJh
eXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwppbmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcw
ZWUzNmQ5NGQxMDVmYTI1Li5jNGI0ZDY2Mzg1ZDUwYmYxNDFkYzJlNDJmNWUwYWQ3MWUyYzZjYzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNj
cmlwdENvcmUueGNjb25maWcKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9E
VUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUgPSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1v
ZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9M
REZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRf
YWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19a
VFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18x
OGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5j
dGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVT
M19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdi
YWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMx
MGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVfY2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFu
Z2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5
c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdp
bkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04
X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNf
Y3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3Ry
aW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0Ux
NV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFp
dHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJLVF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pO
U3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VF
TlNfOWVuYWJsZV9pZklYc3IyMV9faXNfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5
cGVFUk5TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJ
Y0VFRUVTOF9TOF87CiAKIE9USEVSX0xERkxBR1NfQkFTRSA9ICQoT1RIRVJfTERGTEFHU19ISURF
X1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEiOwogT1RIRVJfTERGTEFHU1tzZGs9ZW1iZWRkZWQq
XSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAyY2Q2M2RlNTcuLmIyODQ0MWMx
YWYxMDQ2MDI3MGIzMDJkYTcwMDNkNjA4ZTcwY2Q3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVNZXRhZGF0YS5oPgogI2luY2x1ZGUg
PHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkRmlsZXN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTQ4LDYgKzQ5LDggQEAgbmFtZXNwYWNl
IFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKK25hbWVzcGFjZSBmcyA9IHN0
ZDo6ZmlsZXN5c3RlbTsKKwogLy8gVGhlIGZvbGxvd2luZyBsb3dlci1BU0NJSSBjaGFyYWN0ZXJz
IG5lZWQgZXNjYXBpbmcgdG8gYmUgdXNlZCBpbiBhIGZpbGVuYW1lCiAvLyBhY3Jvc3MgYWxsIHN5
c3RlbXMsIGluY2x1ZGluZyBXaW5kb3dzOgogLy8gICAgIC0gVW5wcmludGFibGUgQVNDSUkgKDAw
LTFGKQpAQCAtMzgyLDE0ICszODUsNiBAQCB2b2lkIHVubG9ja0FuZENsb3NlRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZShoYW5kbGUpOwogfQogCi1ib29sIGZp
bGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAgICBhdXRvIG1ldGFkYXRhID0gc2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMg
PyBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRoKSA6IGZpbGVNZXRhZGF0YShwYXRo
KTsKLSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGU6OkRpcmVjdG9yeTsK
LX0KLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1h
cEZvclBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwyMCArNDAzLDYgQEAgU3RyaW5nIGNy
ZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5nJikKIH0KICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZW50cmllcyA9IGxpc3REaXJl
Y3RvcnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7Ci0g
ICAgICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3M6Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGVudHJ5KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7Ci0gICAgfQotICAgIHJl
dHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0KLSNlbmRpZgotCiBNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQogewogICAgIGNvbnN0
ZXhwciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpAQCAtNTA0LDUgKzQ4NSwxMDcgQEAg
T3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJl
dHVybiBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OmV4aXN0cyhmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHJldHVy
biBmczo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVjKTsK
KyAgICByZXR1cm4gIWVjOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykKK2Jvb2wgZGVsZXRlRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBl
YzsKKyAgICByZXR1cm4gZnM6OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKyNlbmRpZgorCitib29sIG1vdmVGaWxl
KGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIHN0
ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6cmVuYW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihvbGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKS5kYXRh
KCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGdldEZpbGVTaXplKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVj
OworICAgIGF1dG8gc2l6ZSA9IGZzOjpmaWxlX3NpemUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc3VsdCA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsZUlzRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBm
czo6ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpCisgICAgICAgIGZpbGVTdGF0
dXMgPSBmczo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVj
KTsKKyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3ltbGlua19zdGF0dXMoZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVybiBmaWxl
U3RhdHVzLnR5cGUoKSA9PSBmczo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2Jvb2wgbWFr
ZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2Nv
ZGUgZWM7CisgICAgZnM6OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRWb2x1
bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQorewor
ICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5mbyA9IGZzOjpzcGFjZShm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJlZVNwYWNlID0gc3BhY2VJbmZvLmF2YWlsYWJs
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3Qg
U3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCit7Cisg
ICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfc3ltbGluayhmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oc3ltYm9saWNMaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKwor
Ym9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgbGlu
a1BhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9s
aW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsK
K30KKworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBj
b25zdCBTdHJpbmcmIGxpbmtQYXRoKQoreworICAgIGZzOjpwYXRoIGZzVGFyZ2V0UGF0aCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCk7CisgICAgZnM6OnBhdGgg
ZnNMaW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpOwor
CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9saW5rKGZzVGFy
Z2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZnM6OmNvcHlfZmlsZShmc1RhcmdldFBhdGgsIGZzTGlua1BhdGgsIGVjKTsK
KyAgICByZXR1cm4gIWVjOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgZnM6OnJlbW92
ZV9hbGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJl
dHVybiAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJj
ZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUzY2JlZjQyZWRmNjVlZTAz
ZDhjNWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0Nzk4OWEyNzUxMjA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93
dGYvRmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgdW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CiAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90LgogV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3Rp
bmF0aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYg
dGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBIYXJkIGxpbmtzIGEgZmls
ZSBpZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBPUlRfUFJJVkFURSBib29s
IGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBk
ZXN0aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJkTGlua09yQ29weUZpbGUo
Y29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKTsKIAogI2lm
IFVTRShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBsb2NrRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
SlNDT25seS5jbWFrZQppbmRleCA2NWRlNjU5NGQyNWVlZDUwYzgzZGM4ZjVmODAwOTk1MTIyZmRm
N2I0Li5lNzdiNDhkNjY3ODJkOTdjNjZkZjQ5ZmY1N2JjNWNkMTFkMzMyNjhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKKysrIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlCkBAIC0xNTksMyArMTU5LDE1IEBAIGVuZGlmICgpCiBs
aXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCiAgICAgVGhyZWFkczo6VGhyZWFkcwogKQorCitpZiAo
Q09NUElMRVJfSVNfR0NDX09SX0NMQU5HKQorICAgIGlmIChDT01QSUxFUl9JU19DTEFORykKKyAg
ICAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAgICAgICAgICAgc3RkYysrZnMKKyAg
ICAgICAgKQorICAgIGVsc2UgKCkKKyAgICAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwor
ICAgICAgICAgICAgYysrZnMKKyAgICAgICAgKQorICAgIGVuZGlmICgpCitlbmRpZiAoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tIGIvU291cmNl
L1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCmluZGV4IDFjY2UxN2RjNTllMjMzYzZh
NTgwMDFlMWI2YzkwOGU4NDVhN2M5MDYuLmM4NTM3ZWExNzNlOTliYWJkZTdmNzhjOWQzY2RjODNj
MWUzYTM1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2Nv
YS5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0KQEAgLTEy
NiwyOSArMTI2LDYgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJl
Zml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIHBsYXRmb3JtRmlsZUgKICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCh0ZW1wb3JhcnlGaWxlUGF0aC5kYXRhKCkpOwogfQogCi1ib29sIG1vdmVGaWxl
KGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewotICAgIC8v
IE92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcy4KLSAgICBhdXRvIG1hbmFnZXIgPSBhZG9wdE5TKFtb
TlNGaWxlTWFuYWdlciBhbGxvY10gaW5pdF0pOwotICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtbV1RGV2ViRmlsZU1hbmFnZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIFttYW5hZ2Vy
IHNldERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OwotICAgIGJvb2wgc3VjY2VzcyA9IFttYW5hZ2VyIG1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpvbGRQYXRoXSB0b1VSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOm5ld1BhdGhd
IGVycm9yOiZlcnJvcl07Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBOU0xvZyhAIkVycm9y
IGluIG1vdmVGaWxlOiAlQCIsIGVycm9yKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9v
bCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNw
YWNlKQotewotICAgIE5TRGljdGlvbmFyeSAqZmlsZVN5c3RlbUF0dHJpYnV0ZXNEaWN0aW9uYXJ5
ID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZGaWxlU3lzdGVt
Rm9yUGF0aDooTlNTdHJpbmcgKilwYXRoIGVycm9yOk5VTExdOwotICAgIGlmICghZmlsZVN5c3Rl
bUF0dHJpYnV0ZXNEaWN0aW9uYXJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJlZVNw
YWNlID0gW1tmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TRmls
ZVN5c3RlbUZyZWVTaXplXSB1bnNpZ25lZExvbmdMb25nVmFsdWVdOwotICAgIHJldHVybiB0cnVl
OwotfQotCiBOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KE5TU3RyaW5nICpkaXJl
Y3RvcnlQcmVmaXgpCiB7CiAgICAgTlNTdHJpbmcgKnRlbXBEaXJlY3RvcnkgPSBOU1RlbXBvcmFy
eURpcmVjdG9yeSgpOwpAQCAtMTc4LDExICsxNTUsNiBAQCBOU1N0cmluZyAqY3JlYXRlVGVtcG9y
YXJ5RGlyZWN0b3J5KE5TU3RyaW5nICpkaXJlY3RvcnlQcmVmaXgpCiAgICAgcmV0dXJuIFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gc3RyaW5nV2l0aEZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbjpwYXRoLmRhdGEoKSBsZW5ndGg6bGVuZ3RoXTsKIH0KIAotYm9vbCBkZWxldGVOb25FbXB0
eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVycm9yOm5pbF07Ci19
Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZv
clBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1H
bGliLmNwcAppbmRleCA2ODdmYTEwYzI2NzUzNmMwNThlNzkyNGRiZWNiOTNhNzEyNDhmODkwLi42
M2Q1ZGFmMWE5OTRmZjcyMGNjOTQzMDNjMWYzYzUyYmE0NGU0MDgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMTE4LDI0ICsxMTgsNiBAQCBTdHJpbmcgZmlsZW5h
bWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogI2VuZGlmCiB9CiAKLWJvb2wgZmls
ZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlv
bihmaWxlbmFtZSkgPyBnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIEdfRklMRV9URVNUX0VY
SVNUUykgOiBmYWxzZTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwot
ICAgIHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfcmVtb3ZlKGZpbGVu
YW1lLmRhdGEoKSkgIT0gLTEgOiBmYWxzZTsKLX0KLQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9y
eShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxl
bmFtZSkgPyBnX3JtZGlyKGZpbGVuYW1lLmRhdGEoKSkgIT0gLTEgOiBmYWxzZTsKLX0KLQogc3Rh
dGljIGJvb2wgZ2V0RmlsZVN0YXQoY29uc3QgU3RyaW5nJiBwYXRoLCBHU3RhdEJ1Ziogc3RhdEJ1
ZmZlcikKIHsKICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOwpAQCAtMTU0LDE2ICsxMzYsNiBAQCBzdGF0aWMgYm9vbCBnZXRGaWxlTFN0YXQoY29uc3Qg
U3RyaW5nJiBwYXRoLCBHU3RhdEJ1Ziogc3RhdEJ1ZmZlcikKICAgICByZXR1cm4gZ19sc3RhdChm
aWxlbmFtZS5kYXRhKCksIHN0YXRCdWZmZXIpICE9IC0xOwogfQogCi1ib29sIGdldEZpbGVTaXpl
KGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQotewotICAgIEdTdGF0
QnVmIHN0YXRSZXN1bHQ7Ci0gICAgaWYgKCFnZXRGaWxlU3RhdChwYXRoLCAmc3RhdFJlc3VsdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3VsdFNpemUgPSBzdGF0UmVzdWx0LnN0
X3NpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgZ2V0RmlsZVNpemUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nJiByZXN1bHRTaXplKQogewogICAgIEdSZWZQdHI8
R0ZpbGVJbmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pb19zdHJlYW1fcXVlcnlfaW5mbyho
YW5kbGUsIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwgbnVsbHB0ciwgbnVsbHB0cikp
OwpAQCAtMjQzLDMwICsyMTUsMTEgQEAgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHMo
U3RyaW5nVmlldyBwYXRoLCBjb25zdCBWZWN0b3I8U3RyaW5nVmlldz4mIGNvbXAKICAgICByZXR1
cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1ib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkg
PyBnX21rZGlyX3dpdGhfcGFyZW50cyhmaWxlbmFtZS5kYXRhKCksIFNfSVJXWFUpICE9IC0xIDog
ZmFsc2U7Ci19Ci0KIFN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCiB7CiAgICAgcmV0dXJuIHN0
cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZ19nZXRfaG9tZV9kaXIoKSk7CiB9CiAK
LWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3Qg
U3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAgIENTdHJpbmcgdGFyZ2V0UGF0aEZTUmVw
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRhcmdldFBhdGgpOwotICAgIGlmICghdmFsaWRS
ZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoRlNSZXApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBDU3RyaW5nIHN5bWJvbGljTGlua1BhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihzeW1ib2xpY0xpbmtQYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oc3lt
Ym9saWNMaW5rUGF0aEZTUmVwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
ICFzeW1saW5rKHRhcmdldFBhdGhGU1JlcC5kYXRhKCksIHN5bWJvbGljTGlua1BhdGhGU1JlcC5k
YXRhKCkpOwotfQotCiBTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkK
IHsKICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpA
QCAtMjc3LDIxICsyMzAsNiBAQCBTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYg
cGF0aCkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChiYXNlTmFtZS5nZXQoKSk7CiB9CiAK
LWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZy
ZWVTcGFjZSkKLXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19m
aWxlX25ld19mb3JfcGF0aChmaWxlbmFtZS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5m
bz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5mbyhmaWxl
LmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgbnVsbHB0ciwgbnVsbHB0
cikpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZy
ZWVTcGFjZSA9IGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgp
LCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Ci0gICAgcmV0dXJuICEhZnJlZVNw
YWNlOwotfQotCiBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAg
ICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTQy
OCw2MiArMzY2LDYgQEAgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBtb3Zl
RmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAg
ICBhdXRvIG9sZEZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG9sZFBhdGgpOwot
ICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihvbGRGaWxlbmFtZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24obmV3UGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKG5ld0ZpbGVuYW1lKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHRmlsZT4gb2xkRmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG9sZEZpbGVuYW1lLmRhdGEoKSkpOwotICAgIEdS
ZWZQdHI8R0ZpbGU+IG5ld0ZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChuZXdG
aWxlbmFtZS5kYXRhKCkpKTsKLQotICAgIHJldHVybiBnX2ZpbGVfbW92ZShvbGRGaWxlLmdldCgp
LCBuZXdGaWxlLmdldCgpLCBHX0ZJTEVfQ09QWV9PVkVSV1JJVEUsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIpOwotfQotCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAg
cmV0dXJuIENyZWF0ZUhhcmRMaW5rKGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgp
LCBzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpOwotI2Vsc2UKLSAgICBh
dXRvIHNvdXJjZUZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0g
ICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHNvdXJjZUZpbGVuYW1lKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbkZpbGVuYW1lID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24o
ZGVzdGluYXRpb25GaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biAhbGluayhzb3VyY2VGaWxlbmFtZS5kYXRhKCksIGRlc3RpbmF0aW9uRmlsZW5hbWUuZGF0YSgp
KTsKLSNlbmRpZgotfQotCi1ib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoaGFyZExpbmsoc291
cmNlLCBkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSGFyZCBs
aW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4KLSNpZiBPUyhXSU5ET1dTKQotICAg
IHJldHVybiAhITo6Q29weUZpbGUoc291cmNlLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBkZXN0
aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgVFJVRSk7Ci0jZWxzZQotICAgIGF1dG8g
c291cmNlRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBp
ZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oc291cmNlRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oZGVzdGluYXRpb24pOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihkZXN0
aW5hdGlvbkZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxH
RmlsZT4gc291cmNlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZUZp
bGVuYW1lLmRhdGEoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGRlc3RpbmF0aW9uRmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGRlc3RpbmF0aW9uRmlsZW5hbWUuZGF0YSgpKSk7
Ci0gICAgcmV0dXJuIGdfZmlsZV9jb3B5KHNvdXJjZUZpbGUuZ2V0KCksIGRlc3RpbmF0aW9uRmls
ZS5nZXQoKSwgR19GSUxFX0NPUFlfTk9ORSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0cik7Ci0jZW5kaWYKLX0KLQogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNv
bnN0IENTdHJpbmcmIGZzRmlsZSkKIHsKICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNGaWxlLmRhdGEoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggOTlkY2JmMjNlOTBmMGFlMTM0MjFjYTBiYjNl
MjkwYzI5NWNmMTI5Ny4uYmZlOGZhYmI2YmZjNjcwZTRlZTRiMzBkOGIzYzQ4ZTQ3OWRjNWQyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC00OSwzNiArNDks
NiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsIHsKIAotYm9v
bCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVw
LmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
YWNjZXNzKGZzUmVwLmRhdGEoKSwgRl9PSykgIT0gLTE7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEo
KVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmlsZSBmYWlsZWQgdG8gZGVsZXRl
LiBGYWlsZWQgdG8gZ2V0IGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gdG8gY3JlYXRlIENTdHJp
bmcgZnJvbSBjZlN0cmluZyBvciBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIGlzIGEgbnVsbCB2
YWx1ZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gdW5saW5rKC4u
LikgcmV0dXJucyAwIG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24gb2YgdGhlIHBhdGggYW5kIG5vbi16
ZXJvIGluIGFueSBvdGhlciBjYXNlIChpbmNsdWRpbmcgaW52YWxpZCBwZXJtaXNzaW9ucyBvciBu
b24tZXhpc3RlbnQgZmlsZSkKLSAgICBib29sIHVubGlua2VkID0gIXVubGluayhmc1JlcC5kYXRh
KCkpOwotICAgIGlmICghdW5saW5rZWQgJiYgZXJybm8gIT0gRU5PRU5UKQotICAgICAgICBMT0df
RVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0ZS4gRXJyb3IgbWVzc2FnZTogJXMiLCBzdHJlcnJv
cihlcnJubykpOwotCi0gICAgcmV0dXJuIHVubGlua2VkOwotfQotCiBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFj
Y2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbiwgYm9vbCBmYWlsSWZGaWxlRXhpc3RzKQogewogICAg
IENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0xODYs
MzUgKzE1Niw2IEBAIGJvb2wgdW5sb2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQog
fQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9y
eShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRh
dGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBybWRpcigu
Li4pIHJldHVybnMgMCBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uIG9mIHRoZSBwYXRoIGFuZCBub24t
emVybyBpbiBhbnkgb3RoZXIgY2FzZSAoaW5jbHVkaW5nIGludmFsaWQgcGVybWlzc2lvbnMgb3Ig
bm9uLWV4aXN0ZW50IGZpbGUpCi0gICAgcmV0dXJuICFybWRpcihmc1JlcC5kYXRhKCkpOwotfQot
I2VuZGlmCi0KLWJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcm
IHJlc3VsdCkKLXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotCi0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdc
MCcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwot
Ci0gICAgaWYgKHN0YXQoZnNSZXAuZGF0YSgpLCAmZmlsZUluZm8pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBmaWxlSW5mby5zdF9zaXplOwotICAgIHJldHVybiB0cnVl
OwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcg
bG9uZyYgcmVzdWx0KQogewogICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwpAQCAtMzAwLDE5ICsy
NDEsNiBAQCBPcHRpb25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxp
bmtzKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gZmlsZU1ldGFkYXRhVXNpbmdGdW5j
dGlvbihwYXRoLCAmc3RhdCk7CiB9CiAKLWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0
cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAg
IENTdHJpbmcgdGFyZ2V0UGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRhcmdl
dFBhdGgpOwotICAgIGlmICghdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSB8fCB0YXJnZXRQYXRoRlNS
ZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJp
bmcgc3ltYm9saWNMaW5rUGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN5bWJv
bGljTGlua1BhdGgpOwotICAgIGlmICghc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSB8fCBz
eW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiAhc3ltbGluayh0YXJnZXRQYXRoRlNSZXAuZGF0YSgpLCBzeW1i
b2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpKTsKLX0KLQogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewog
ICAgIGlmIChwYXRoLmVuZHNXaXRoKCcvJykpCkBAIC0zMjksMzUgKzI1Nyw2IEBAIFN0cmluZyBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKFN0cmluZ1ZpZXcgcGF0aCwgY29uc3QgVmVjdG9yPFN0
cmluZ1ZpZXc+JiBjb21wCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotYm9v
bCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIENTdHJpbmcg
ZnVsbFBhdGggPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKCFhY2Nl
c3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBj
aGFyKiBwID0gZnVsbFBhdGgubXV0YWJsZURhdGEoKSArIDE7Ci0gICAgaW50IGxlbmd0aCA9IGZ1
bGxQYXRoLmxlbmd0aCgpOwotCi0gICAgaWYgKHBbbGVuZ3RoIC0gMV0gPT0gJy8nKQotICAgICAg
ICBwW2xlbmd0aCAtIDFdID0gJ1wwJzsKLSAgICBmb3IgKDsgKnA7ICsrcCkgewotICAgICAgICBp
ZiAoKnAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgICAgICBpZiAo
YWNjZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpIHsKLSAgICAgICAgICAgICAgICBpZiAobWtk
aXIoZnVsbFBhdGguZGF0YSgpLCBTX0lSV1hVKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnAgPSAnLyc7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKGFjY2VzcyhmdWxsUGF0aC5kYXRhKCksIEZfT0spKSB7Ci0gICAgICAg
IGlmIChta2RpcihmdWxsUGF0aC5kYXRhKCksIFNfSVJXWFUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiBTdHJpbmcgcGF0aEdldEZp
bGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmco
cGF0aC5yZXZlcnNlRmluZCgnLycpICsgMSk7CkBAIC00MTksMjkgKzMxOCw2IEBAIENTdHJpbmcg
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKICNlbmRpZgogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQotYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgs
IGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICBhdXRvIG9sZEZpbGVuYW1lID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKG9sZFBhdGgpOwotICAgIGlmIChvbGRGaWxlbmFtZS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBuZXdGaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKLSAgICBpZiAobmV3RmlsZW5hbWUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZW5hbWUob2xkRmlsZW5h
bWUuZGF0YSgpLCBuZXdGaWxlbmFtZS5kYXRhKCkpICE9IC0xOwotfQotCi1ib29sIGdldFZvbHVt
ZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0g
ICAgc3RydWN0IHN0YXR2ZnMgZmlsZVN5c3RlbVN0YXQ7Ci0gICAgaWYgKCFzdGF0dmZzKGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksICZmaWxlU3lzdGVtU3RhdCkpIHsKLSAg
ICAgICAgZnJlZVNwYWNlID0gZmlsZVN5c3RlbVN0YXQuZl9iYXZhaWwgKiBmaWxlU3lzdGVtU3Rh
dC5mX2Zyc2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSwgY29uc3QgU3RyaW5nJiBzdWZmaXgpCiB7CiAgICAg
Ly8gRklYTUU6IFN1ZmZpeCBpcyBub3Qgc3VwcG9ydGVkLCBidXQgT0sgZm9yIG5vdyBzaW5jZSB0
aGUgY29kZSB1c2luZyBpdCBpcyBtYWNPUy1wb3J0LW9ubHkuCkBAIC00NjgsNTMgKzM0NCw2IEBA
IGVuZDoKIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKLWJvb2wgaGFyZExpbmsoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYg
KHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVzdGluYXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHNvdXJjZSk7Ci0gICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gZnNEZXN0aW5hdGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihk
ZXN0aW5hdGlvbik7Ci0gICAgaWYgKCFmc0Rlc3RpbmF0aW9uLmRhdGEoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFsaW5rKGZzU291cmNlLmRhdGEoKSwgZnNEZXN0aW5h
dGlvbi5kYXRhKCkpOwotfQotCi1ib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoaGFyZExpbmso
c291cmNlLCBkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSGFy
ZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4KLSAgICBpZiAoc291cmNlLmlz
RW1wdHkoKSB8fCBkZXN0aW5hdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gZnNTb3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsK
LSAgICBpZiAoIWZzU291cmNlLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBmc0Rlc3RpbmF0aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9u
KTsKLSAgICBpZiAoIWZzRGVzdGluYXRpb24uZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIGhhbmRsZSA9IG9wZW4oZnNEZXN0aW5hdGlvbi5kYXRhKCksIE9fV1JPTkxZ
IHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7Ci0gICAgaWYgKGhhbmRsZSA9PSAtMSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBhcHBlbmRSZXN1bHQgPSBhcHBlbmRGaWxlQ29u
dGVudHNUb0ZpbGVIYW5kbGUoc291cmNlLCBoYW5kbGUpOwotICAgIGNsb3NlKGhhbmRsZSk7Ci0K
LSAgICAvLyBJZiB0aGUgY29weSBmYWlsZWQsIGRlbGV0ZSB0aGUgdW51c2FibGUgZmlsZS4KLSAg
ICBpZiAoIWFwcGVuZFJlc3VsdCkKLSAgICAgICAgdW5saW5rKGZzRGVzdGluYXRpb24uZGF0YSgp
KTsKLQotICAgIHJldHVybiBhcHBlbmRSZXN1bHQ7Ci19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdl
dEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAgICAgc3RydWN0IHN0YXQg
ZmlsZVN0YXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggYTAzZjhhNDY0
NGVkYjkwNzgxZmU0MzlhZjZjMDM3OWU1YTEyYTdhMC4uZmQ1OWYxOTAzZTZlMWZlODRkMTU4ZDU3
NWE5NjI5ZWFiOTAwYzlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAt
MTA1LDE1ICsxMDUsNiBAQCBzdGF0aWMgdm9pZCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZUZyb21G
aW5kRGF0YShjb25zdCBXSU4zMl9GSU5EX0RBVEFXJiBmaW5kRGF0YQogICAgIHRpbWUgPSBmaWxl
VGltZS5RdWFkUGFydCAvIDEwMDAwMDAwIC0ga1NlY29uZHNGcm9tRmlsZVRpbWVUb1RpbWV0Owog
fQogCi1ib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiBzaXpl
KQotewotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZERhdGE7Ci0gICAgaWYgKCFnZXRGaW5kRGF0
YShwYXRoLCBmaW5kRGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBn
ZXRGaWxlU2l6ZUZyb21GaW5kRGF0YShmaW5kRGF0YSwgc2l6ZSk7Ci19Ci0KIGJvb2wgZ2V0Rmls
ZVNpemUoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVIYW5kbGUsIGxvbmcgbG9uZyYgc2l6ZSkKIHsK
ICAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBmaWxlSW5mb3JtYXRpb247CkBAIC0yMjAs
MzYgKzIxMSw2IEBAIE9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZmlsZU1ldGFkYXRhRm9sbG93aW5n
U3ltbGlua3MoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBmaW5kRGF0YVRvRmlsZU1l
dGFkYXRhKGZpbmREYXRhKTsKIH0KIAotYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3Ry
aW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCi17Ci0gICAg
cmV0dXJuIDo6Q3JlYXRlU3ltYm9saWNMaW5rVyhzeW1ib2xpY0xpbmtQYXRoLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCB0YXJnZXRQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAwKTsKLX0K
LQotYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBXSU4zMl9GSU5E
X0RBVEFXIGZpbmREYXRhOwotICAgIHJldHVybiBnZXRGaW5kRGF0YShwYXRoLCBmaW5kRGF0YSk7
Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgU3RyaW5n
IGZpbGVuYW1lID0gcGF0aDsKLSAgICByZXR1cm4gISFEZWxldGVGaWxlVyhmaWxlbmFtZS53aWRl
Q2hhcmFjdGVycygpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmaWxlbmFtZSA9IHBhdGg7Ci0gICAgcmV0
dXJuICEhUmVtb3ZlRGlyZWN0b3J5VyhmaWxlbmFtZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSk7
Ci19Ci0KLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcm
IG5ld1BhdGgpCi17Ci0gICAgU3RyaW5nIG9sZEZpbGVuYW1lID0gb2xkUGF0aDsKLSAgICBTdHJp
bmcgbmV3RmlsZW5hbWUgPSBuZXdQYXRoOwotICAgIHJldHVybiAhITo6TW92ZUZpbGVFeChvbGRG
aWxlbmFtZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgbmV3RmlsZW5hbWUud2lkZUNoYXJhY3Rl
cnMoKS5kYXRhKCksIE1PVkVGSUxFX0NPUFlfQUxMT1dFRCB8IE1PVkVGSUxFX1JFUExBQ0VfRVhJ
U1RJTkcpOwotfQotCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7CiAgICAgVmVjdG9yPFVDaGFyPiBi
dWZmZXIoTUFYX1BBVEgpOwpAQCAtMjkxLDE5ICsyNTIsNiBAQCBDU3RyaW5nIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiAKICNlbmRpZiAvLyAhVVNFKENGKQog
Ci1ib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgU3Ry
aW5nIGZ1bGxQYXRoID0gcGF0aDsKLSAgICBpZiAoU0hDcmVhdGVEaXJlY3RvcnlFeChudWxscHRy
LCBmdWxsUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgbnVsbHB0cikgIT0gRVJST1JfU1VD
Q0VTUykgewotICAgICAgICBEV09SRCBlcnJvciA9IEdldExhc3RFcnJvcigpOwotICAgICAgICBp
ZiAoZXJyb3IgIT0gRVJST1JfRklMRV9FWElTVFMgJiYgZXJyb3IgIT0gRVJST1JfQUxSRUFEWV9F
WElTVFMpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwYXRoICVz
IiwgcGF0aC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIFN0cmluZyBob21lRGlyZWN0b3J5
UGF0aCgpCiB7CiAgICAgcmV0dXJuICIiOwpAQCAtNTE0LDIwICs0NjIsNiBAQCBpbnQgcmVhZEZy
b21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKTsKIH0KIAotYm9vbCBoYXJk
TGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsK
LSAgICByZXR1cm4gQ3JlYXRlSGFyZExpbmsoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5k
YXRhKCksIHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgbnVsbHB0cik7Ci19Ci0KLWJv
b2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3Jt
IGEgY29weSBpbnN0ZWFkLgotICAgIHJldHVybiAhITo6Q29weUZpbGUoc291cmNlLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgVFJV
RSk7Ci19Ci0KIFN0cmluZyBsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKQogewog
ICAgIHJldHVybiBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KENTSURMX0xPQ0FMX0FQUERBVEEpOwpA
QCAtNTU3LDE2ICs0OTEsNiBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICByZXR1cm4gZW50cmll
czsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50
NjRfdCYgZnJlZVNwYWNlKQotewotICAgIFVMQVJHRV9JTlRFR0VSIGZyZWVCeXRlc0F2YWlsYWJs
ZVRvQ2FsbGVyOwotICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRoLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsIG51bGxwdHIsIG51bGxw
dHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmcmVlU3BhY2UgPSBmcmVlQnl0ZXNB
dmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogT3B0aW9u
YWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKIHsKICAg
ICBhdXRvIGhhbmRsZSA9IG9wZW5GaWxlKGZzRmlsZS5kYXRhKCksIEZpbGVPcGVuTW9kZTo6UmVh
ZCk7CkBAIC01OTYsMjEgKzUyMCw2IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3Rvcnko
KQogICAgIH0pOwogfQogCi1ib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5UGF0aCkKLXsKLSAgICBTSEZJTEVPUFNUUlVDVCBkZWxldGVPcGVyYXRpb24g
PSB7Ci0gICAgICAgIG51bGxwdHIsCi0gICAgICAgIEZPX0RFTEVURSwKLSAgICAgICAgZGlyZWN0
b3J5UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwKLSAgICAgICAgTCIiLAotICAgICAgICBG
T0ZfTk9DT05GSVJNQVRJT04gfCBGT0ZfTk9FUlJPUlVJIHwgRk9GX1NJTEVOVCwKLSAgICAgICAg
ZmFsc2UsCi0gICAgICAgIG51bGxwdHIsCi0gICAgICAgIEwiIgotICAgIH07Ci0gICAgcmV0dXJu
ICFTSEZpbGVPcGVyYXRpb24oJmRlbGV0ZU9wZXJhdGlvbik7Ci19Ci0KIGJvb2wgdW5tYXBWaWV3
T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQogewogICAgIHJldHVybiBVbm1hcFZpZXdPZkZp
bGUoYnVmZmVyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBkOGEzOTIyOTM1MmFjY2ViM2VkNDFjODg0MjViMzA3YzNiMGE2ZDI0Li40ZTFlYWY3
YWM2Y2YwY2MwZGU1YjkwOTVmZmQ3MTAwMGM5ZmNmMmFkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDQtMzAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBTdGFydCBsZXZlcmFn
aW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTI1NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBBUEkgdGVzdCBjb3ZlcmFnZSBmb3Ig
dGhlIEZpbGVTeXN0ZW0gQVBJIHRoYXQgd2FzIG1vZGlmaWVkLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpGaWxlU3lzdGVtVGVzdDo6dGVtcEZpbGVQYXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRmlsZVN5bWxpbmtQYXRoIGNvbnN0KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRW1wdHlGb2xkZXJQYXRoIGNv
bnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRW1wdHlG
b2xkZXJTeW1saW5rUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lz
dGVtVGVzdDo6dGVtcEVtcHR5RmlsZVBhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6RmlsZVN5c3RlbVRlc3Q6OnNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoIGNvbnN0KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpiYW5nQ29udGFpbmluZ0ZpbGVQYXRo
IGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpxdW90ZUNv
bnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0Yp
OgorCiAyMDIxLTA0LTMwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbd2Via2l0c2NweV0gU3VwcG9ydCBhcmd1bWVudHMgdG8gVGFza1Bvb2wgc2V0dXAg
YW5kIHRlYXJkb3duCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0u
Y3BwCmluZGV4IDhmNjUxZDNlYWUzNDMyOTc1MWFjMzYxZGQ3ZTA2NGNiNjM3ZTM3NTIuLmMyOTM1
ZDI5MDJlNDZmYjhjYmNhMjI1ZDA2ZTc4NjI1YzQ4MWY3MmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIAotICAgICAgICAv
LyBjcmVhdGUgdGVtcCBmaWxlCisgICAgICAgIC8vIGNyZWF0ZSB0ZW1wIGZpbGUuCiAgICAgICAg
IEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7CiAgICAgICAgIG1fdGVtcEZp
bGVQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBUZXN0RmlsZSIsIGhh
bmRsZSk7CiAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgRmlsZVN5c3Rl
bVRlc3REYXRhLCBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CkBAIC01Miw2ICs1MiwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fdGVtcEZpbGVTeW1saW5rUGF0aCA9ICJ0ZW1wVGVzdEZpbGUt
c3ltbGluayI7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhtX3RlbXBG
aWxlUGF0aCwgbV90ZW1wRmlsZVN5bWxpbmtQYXRoKTsKIAorICAgICAgICAvLyBDcmVhdGUgdGVt
cCBkaXJlY3RvcnkuCisgICAgICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSB0ZW1w
b3JhcnlGaWxlOworICAgICAgICBtX3RlbXBFbXB0eUZvbGRlclBhdGggPSBGaWxlU3lzdGVtOjpv
cGVuVGVtcG9yYXJ5RmlsZSgidGVtcEVtcHR5Rm9sZGVyIiwgdGVtcG9yYXJ5RmlsZSk7CisgICAg
ICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlKTsKKyAgICAgICAgRmlsZVN5
c3RlbTo6ZGVsZXRlRmlsZShtX3RlbXBFbXB0eUZvbGRlclBhdGgpOworICAgICAgICBGaWxlU3lz
dGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKworICAgICAg
ICBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFy
eUZpbGUoInRlbXBFbXB0eUZvbGRlci1zeW1saW5rIiwgdGVtcG9yYXJ5RmlsZSk7CisgICAgICAg
IEZpbGVTeXN0ZW06OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlKTsKKyAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKTsKKyAgICAgICAgRmls
ZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCwgbV90ZW1w
RW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7CisKICAgICAgICAgbV90ZW1wRW1wdHlGaWxlUGF0aCA9
IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlUZXN0RmlsZSIsIGhhbmRs
ZSk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogCkBAIC02OSwyMiAr
ODEsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSht
X3RlbXBGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRmls
ZVN5bWxpbmtQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnko
bV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSht
X3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShtX3RlbXBFbXB0eUZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmls
ZShtX3NwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShtX2JhbmdDb250YWluaW5nRmlsZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKG1fcXVvdGVDb250YWluaW5nRmlsZVBhdGgpOwogICAgIH0KIAotICAgIGNvbnN0IFN0
cmluZyYgdGVtcEZpbGVQYXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVBhdGg7IH0KLSAgICBjb25z
dCBTdHJpbmcmIHRlbXBGaWxlU3ltbGlua1BhdGgoKSB7IHJldHVybiBtX3RlbXBGaWxlU3ltbGlu
a1BhdGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIHRlbXBFbXB0eUZpbGVQYXRoKCkgeyByZXR1cm4g
bV90ZW1wRW1wdHlGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgc3BhY2VDb250YWluaW5n
RmlsZVBhdGgoKSB7IHJldHVybiBtX3NwYWNlQ29udGFpbmluZ0ZpbGVQYXRoOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiBiYW5nQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9iYW5nQ29udGFp
bmluZ0ZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBxdW90ZUNvbnRhaW5pbmdGaWxlUGF0
aCgpIHsgcmV0dXJuIG1fcXVvdGVDb250YWluaW5nRmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJp
bmcmIHRlbXBGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9CisgICAg
Y29uc3QgU3RyaW5nJiB0ZW1wRmlsZVN5bWxpbmtQYXRoKCkgY29uc3QgeyByZXR1cm4gbV90ZW1w
RmlsZVN5bWxpbmtQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGb2xkZXJQYXRo
KCkgY29uc3QgeyByZXR1cm4gbV90ZW1wRW1wdHlGb2xkZXJQYXRoOyB9CisgICAgY29uc3QgU3Ry
aW5nJiB0ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVt
cHR5Rm9sZGVyU3ltbGlua1BhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRlbXBFbXB0eUZpbGVQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV90ZW1wRW1wdHlGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0
cmluZyYgc3BhY2VDb250YWluaW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlQ29u
dGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiBiYW5nQ29udGFpbmluZ0ZpbGVQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29u
c3QgU3RyaW5nJiBxdW90ZUNvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVv
dGVDb250YWluaW5nRmlsZVBhdGg7IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV90ZW1wRmls
ZVBhdGg7CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVTeW1saW5rUGF0aDsKKyAgICBTdHJpbmcgbV90
ZW1wRW1wdHlGb2xkZXJQYXRoOworICAgIFN0cmluZyBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQ
YXRoOwogICAgIFN0cmluZyBtX3RlbXBFbXB0eUZpbGVQYXRoOwogICAgIFN0cmluZyBtX3NwYWNl
Q29udGFpbmluZ0ZpbGVQYXRoOwogICAgIFN0cmluZyBtX2JhbmdDb250YWluaW5nRmlsZVBhdGg7
CkBAIC0xNzYsNCArMTk0LDI0NiBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0ZU5vbkVt
cHR5RGlyZWN0b3J5KQogICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRl
bXBvcmFyeVRlc3RGb2xkZXIpKTsKIH0KIAorVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBmaWxlRXhp
c3RzKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxl
U3ltbGlua1BhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
dGVtcEVtcHR5RmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBF
bXB0eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKSkpOworfQorCitURVNUX0YoRmls
ZVN5c3RlbVRlc3QsIGRlbGV0ZVN5bWxpbmspCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHModGVtcEZpbGVTeW1saW5rUGF0aCgpKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworCisgICAg
Ly8gU2hvdWxkIGhhdmUgZGVsZXRlZCB0aGUgc3ltbGluayBidXQgbm90IHRoZSB0YXJnZXQgZmls
ZS4KKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVTeW1s
aW5rUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZGVsZXRlRmlsZSkKK3sK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkp
OworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRo
KCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVFbXB0eURpcmVjdG9yeSkK
K3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRl
clBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0
b3J5KHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsK
K30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBtb3ZlRmlsZSkKK3sKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gdGVtcEZpbGVQYXRoKCkgKyAiLW1vdmVkIjsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoZGVzdGluYXRpb24pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjptb3ZlRmlsZSh0ZW1wRmlsZVBhdGgoKSwgZGVzdGluYXRpb24pKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZGVzdGluYXRpb24pKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6bW92ZUZpbGUodGVtcEZpbGVQYXRoKCksIGRlc3RpbmF0aW9u
KSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbW92ZUZpbGVPdmVyd3JpdGVzRGVzdGlu
YXRpb24pCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmls
ZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVt
cHR5RmlsZVBhdGgoKSkpOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUp
KTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBF
WFBFQ1RfVFJVRSghZmlsZVNpemUpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6bW92
ZUZpbGUodGVtcEZpbGVQYXRoKCksIHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5RmlsZVBhdGgoKSkpOworCisg
ICAgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXpl
LCAwKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBnZXRGaWxlU2l6ZSkKK3sKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7
CisKKyAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmdldEZpbGVTaXplKHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9H
VChmaWxlU2l6ZSwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSh0ZW1wRW1wdHlGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxl
U2l6ZSk7CisKKyAgICBmaWxlU2l6ZSA9IDA7CisgICAgU3RyaW5nIGZpbGVUaGF0RG9lc05vdEV4
aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0eUZvbGRl
clBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3Rl
bTo6Z2V0RmlsZVNpemUoZmlsZVRoYXREb2VzTm90RXhpc3QsIGZpbGVTaXplKSk7CisgICAgRVhQ
RUNUX1RSVUUoIWZpbGVTaXplKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBmaWxlSXNE
aXJlY3RvcnkpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5
KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnko
dGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzOjpZZXMpKTsKKworICAgIGF1dG8gZm9sZGVyU3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3Rl
bTo6ZmlsZU1ldGFkYXRhKHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCkpOworICAgIEVYUEVD
VF9UUlVFKCEhZm9sZGVyU3ltbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoZm9sZGVyU3lt
bGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluayk7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xk
ZXJTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpO
bykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1w
dHlGb2xkZXJTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzOjpZZXMpKTsKKworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rv
cnkodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6
Ok5vKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1w
RmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7
CisKKyAgICBhdXRvIGZpbGVTeW1saW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRh
dGEodGVtcEZpbGVTeW1saW5rUGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIWZpbGVTeW1saW5r
TWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShmaWxlU3ltbGlua01ldGFkYXRhLT50eXBlLCBGaWxl
TWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluayk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06OlNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06OlNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgU3RyaW5nIGZpbGVUaGF0RG9l
c05vdEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0
eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmls
ZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBGaWxlU3lzdGVt
OjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxl
U3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZmlsZVRoYXREb2VzTm90RXhpc3QsIEZpbGVTeXN0ZW06
OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworfQorCitURVNUX0YoRmlsZVN5c3Rl
bVRlc3QsIG1ha2VBbGxEaXJlY3RvcmllcykKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZp
bGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIEZpbGVTeXN0
ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAg
IFN0cmluZyBzdWJGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIHsgInN1YkZvbGRlcjEiLCAic3ViRm9sZGVyMiIs
ICJzdWJGb2xkZXIzIiB9KTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhzdWJGb2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6bWFrZUFsbERp
cmVjdG9yaWVzKHN1YkZvbGRlclBhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHN1YkZvbGRlclBhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlSXNEaXJlY3Rvcnkoc3ViRm9sZGVyUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVOb25F
bXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdWJGb2xkZXJQYXRoKSk7Cit9CisKK1RFU1RfRihGaWxl
U3lzdGVtVGVzdCwgZ2V0Vm9sdW1lRnJlZVNwYWNlKQoreworICAgIHVpbnQ2NF90IGZyZWVTcGFj
ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0Vm9sdW1lRnJlZVNwYWNlKHRl
bXBGaWxlUGF0aCgpLCBmcmVlU3BhY2UpKTsKKyAgICBFWFBFQ1RfR1QoZnJlZVNwYWNlLCAwVSk7
CisKKyAgICBTdHJpbmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3Qi
X3MpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpnZXRWb2x1bWVGcmVlU3BhY2UoZmls
ZVRoYXREb2VzTm90RXhpc3QsIGZyZWVTcGFjZSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRl
c3QsIGNyZWF0ZVN5bWJvbGljTGluaykKK3sKKyAgICBhdXRvIHN5bWxpbmtQYXRoID0gdGVtcEZp
bGVQYXRoKCkgKyAiLXN5bWxpbmsiOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Y3JlYXRl
U3ltYm9saWNMaW5rKHRlbXBGaWxlUGF0aCgpLCBzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKworICAgIGF1dG8gc3lt
bGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAg
ICBFWFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKHN5bWxpbmtN
ZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworCisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzeW1saW5rUGF0aCkpOworICAgIEVY
UEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworfQorCitU
RVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZVN5bWJvbGljTGlua0ZvbGRlcikKK3sKKyAgICBh
dXRvIHN5bWxpbmtQYXRoID0gdGVtcEVtcHR5Rm9sZGVyUGF0aCgpICsgIi1zeW1saW5rIjsKKyAg
ICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayh0ZW1wRW1wdHlGb2xk
ZXJQYXRoKCksIHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhzeW1saW5rUGF0aCkpOworCisgICAgYXV0byBzeW1saW5rTWV0YWRhdGEgPSBGaWxl
U3lzdGVtOjpmaWxlTWV0YWRhdGEoc3ltbGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhc3lt
bGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoc3ltbGlua01ldGFkYXRhLT50eXBlLCBGaWxl
TWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluayk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5
c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHN5bWxpbmtQYXRoLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJ
c0RpcmVjdG9yeShzeW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6WWVzKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN5
bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3lt
bGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBF
bXB0eUZvbGRlclBhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZVN5
bWJvbGljTGlua0ZpbGVEb2VzTm90RXhpc3QpCit7CisgICAgU3RyaW5nIGZpbGVUaGF0RG9lc05v
dEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0eUZv
bGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhmaWxlVGhhdERvZXNOb3RFeGlzdCkpOworCisgICAgYXV0byBzeW1s
aW5rUGF0aCA9IGZpbGVUaGF0RG9lc05vdEV4aXN0ICsgIi1zeW1saW5rIjsKKyAgICBFWFBFQ1Rf
RkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhmaWxlVGhhdERvZXNOb3RFeGlzdCwg
c3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhz
eW1saW5rUGF0aCkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZUhhcmRMaW5r
KQoreworICAgIGF1dG8gaGFyZGxpbmtQYXRoID0gdGVtcEZpbGVQYXRoKCkgKyAiLWhhcmRsaW5r
IjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgp
KTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNU
X0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmhhcmRMaW5r
KHRlbXBGaWxlUGF0aCgpLCBoYXJkbGlua1BhdGgpKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgbGlua0Zp
bGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJk
bGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZp
bGVTaXplKTsKKworICAgIGF1dG8gaGFyZGxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVN
ZXRhZGF0YShoYXJkbGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhaGFyZGxpbmtNZXRhZGF0
YSk7CisgICAgRVhQRUNUX0VRKGhhcmRsaW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6
VHlwZTo6RmlsZSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRl
bXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
dGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KGhhcmRsaW5rUGF0aCkpOworCisgICAgbGlua0ZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOwor
ICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKK30KKworVEVTVF9GKEZpbGVT
eXN0ZW1UZXN0LCBjcmVhdGVIYXJkTGlua09yQ29weUZpbGUpCit7CisgICAgYXV0byBoYXJkbGlu
a1BhdGggPSB0ZW1wRmlsZVBhdGgoKSArICItaGFyZGxpbmsiOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGZp
bGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1w
RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6aGFyZExpbmtPckNvcHlGaWxlKHRlbXBGaWxlUGF0
aCgpLCBoYXJkbGlua1BhdGgpKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgbGlua0ZpbGVTaXplID0gMDsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxp
bmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKKwor
ICAgIGF1dG8gaGFyZGxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YShoYXJk
bGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhaGFyZGxpbmtNZXRhZGF0YSk7CisgICAgRVhQ
RUNUX0VRKGhhcmRsaW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6RmlsZSk7
CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRo
KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0
aCkpOworCisgICAgbGlua0ZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9F
UShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQo=
</data>
<flag name="commit-queue"
          id="448085"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427476</attachid>
            <date>2021-04-30 18:07:10 -0700</date>
            <delta_ts>2021-05-01 10:30:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210430180709.patch</filename>
            <type>text/plain</type>
            <size>46175</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li45
Y2YxNjJhNWFmYjI3MGVjMTc1NjdiZjFlOGY2N2M5MTQ1OGJkNGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCBsZXZl
cmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0gdG8gcmVkdWNlIHRoZSBh
bW91bnQgb2YKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKworICAgICAgICAqIHd0
Zi9GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVFeGlz
dHMpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptb3ZlRmlsZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpmaWxlSXNE
aXJlY3RvcnkpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6bWFrZUFsbERpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldFZvbHVtZUZyZWVTcGFjZSk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVTeW1ib2xpY0xpbmspOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6aGFyZExpbmspOgorICAgICAgICAoV1RGOjpGaWxl
U3lzdGVtSW1wbDo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3Rl
bUltcGw6OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKiB3dGYvRmlsZVN5c3Rl
bS5oOgorICAgICAgICAqIHd0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW06CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAq
IHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorCiAy
MDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2luZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJh
eXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwppbmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcw
ZWUzNmQ5NGQxMDVmYTI1Li5jNGI0ZDY2Mzg1ZDUwYmYxNDFkYzJlNDJmNWUwYWQ3MWUyYzZjYzdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNj
cmlwdENvcmUueGNjb25maWcKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9E
VUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUgPSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1v
ZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcs
IGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBv
cnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9M
REZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRf
YWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19a
VFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18x
OGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5j
dGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVT
M19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlND
MTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdi
YWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMx
MGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVfY2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFu
Z2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5
c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdp
bkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04
X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNf
Y3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3Ry
aW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0Ux
NV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFp
dHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJLVF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pO
U3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VF
TlNfOWVuYWJsZV9pZklYc3IyMV9faXNfZm9yd2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5
cGVFUk5TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJ
Y0VFRUVTOF9TOF87CiAKIE9USEVSX0xERkxBR1NfQkFTRSA9ICQoT1RIRVJfTERGTEFHU19ISURF
X1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEiOwogT1RIRVJfTERGTEFHU1tzZGs9ZW1iZWRkZWQq
XSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xERkxBR1NfQkFTRSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3Bw
CmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAyY2Q2M2RlNTcuLmIyODQ0MWMx
YWYxMDQ2MDI3MGIzMDJkYTcwMDNkNjA4ZTcwY2Q3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVNZXRhZGF0YS5oPgogI2luY2x1ZGUg
PHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkRmlsZXN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTQ4LDYgKzQ5LDggQEAgbmFtZXNwYWNl
IFdURiB7CiAKIG5hbWVzcGFjZSBGaWxlU3lzdGVtSW1wbCB7CiAKK25hbWVzcGFjZSBmcyA9IHN0
ZDo6ZmlsZXN5c3RlbTsKKwogLy8gVGhlIGZvbGxvd2luZyBsb3dlci1BU0NJSSBjaGFyYWN0ZXJz
IG5lZWQgZXNjYXBpbmcgdG8gYmUgdXNlZCBpbiBhIGZpbGVuYW1lCiAvLyBhY3Jvc3MgYWxsIHN5
c3RlbXMsIGluY2x1ZGluZyBXaW5kb3dzOgogLy8gICAgIC0gVW5wcmludGFibGUgQVNDSUkgKDAw
LTFGKQpAQCAtMzgyLDE0ICszODUsNiBAQCB2b2lkIHVubG9ja0FuZENsb3NlRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZShoYW5kbGUpOwogfQogCi1ib29sIGZp
bGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAgICBhdXRvIG1ldGFkYXRhID0gc2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMg
PyBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRoKSA6IGZpbGVNZXRhZGF0YShwYXRo
KTsKLSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGU6OkRpcmVjdG9yeTsK
LX0KLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1h
cEZvclBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwyMCArNDAzLDYgQEAgU3RyaW5nIGNy
ZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5nJikKIH0KICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJvb2wgZGVsZXRlTm9uRW1wdHlEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZW50cmllcyA9IGxpc3REaXJl
Y3RvcnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7Ci0g
ICAgICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3M6Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGVudHJ5KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShlbnRyeSk7Ci0gICAgfQotICAgIHJl
dHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0KLSNlbmRpZgotCiBNYXBwZWRGaWxl
RGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBzaXplX3QgYnl0ZXNTaXplLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgdWludDhfdCosIHNpemVfdCk+Jik+
JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0SGFuZGxlKQogewogICAgIGNvbnN0
ZXhwciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpAQCAtNTA0LDUgKzQ4NSwxMDcgQEAg
T3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJl
dHVybiBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICByZXR1cm4gZnM6OmV4aXN0cyhmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHJldHVy
biBmczo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVjKTsK
KyAgICByZXR1cm4gIWVjOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykKK2Jvb2wgZGVsZXRlRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBl
YzsKKyAgICByZXR1cm4gZnM6OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKyNlbmRpZgorCitib29sIG1vdmVGaWxl
KGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIHN0
ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBmczo6cmVuYW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihvbGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKS5kYXRh
KCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIGdldEZpbGVTaXplKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVj
OworICAgIGF1dG8gc2l6ZSA9IGZzOjpmaWxlX3NpemUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc3VsdCA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsZUlzRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBm
czo6ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpCisgICAgICAgIGZpbGVTdGF0
dXMgPSBmczo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVj
KTsKKyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBmczo6c3ltbGlua19zdGF0dXMoZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVybiBmaWxl
U3RhdHVzLnR5cGUoKSA9PSBmczo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2Jvb2wgbWFr
ZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2Nv
ZGUgZWM7CisgICAgZnM6OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRWb2x1
bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQorewor
ICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5mbyA9IGZzOjpzcGFjZShm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJlZVNwYWNlID0gc3BhY2VJbmZvLmF2YWlsYWJs
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3Qg
U3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCit7Cisg
ICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfc3ltbGluayhmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oc3ltYm9saWNMaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKwor
Ym9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgbGlu
a1BhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9s
aW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsK
K30KKworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBj
b25zdCBTdHJpbmcmIGxpbmtQYXRoKQoreworICAgIGZzOjpwYXRoIGZzVGFyZ2V0UGF0aCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCk7CisgICAgZnM6OnBhdGgg
ZnNMaW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCkuZGF0YSgpOwor
CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGZzOjpjcmVhdGVfaGFyZF9saW5rKGZzVGFy
Z2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZnM6OmNvcHlfZmlsZShmc1RhcmdldFBhdGgsIGZzTGlua1BhdGgsIGVjKTsK
KyAgICByZXR1cm4gIWVjOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgZnM6OnJlbW92
ZV9hbGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJl
dHVybiAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1NvdXJj
ZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUzY2JlZjQyZWRmNjVlZTAz
ZDhjNWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0Nzk4OWEyNzUxMjA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93
dGYvRmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgdW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CiAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90LgogV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3Rp
bmF0aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYg
dGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBIYXJkIGxpbmtzIGEgZmls
ZSBpZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBPUlRfUFJJVkFURSBib29s
IGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBk
ZXN0aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJkTGlua09yQ29weUZpbGUo
Y29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKTsKIAogI2lm
IFVTRShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBsb2NrRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
SlNDT25seS5jbWFrZQppbmRleCA2NWRlNjU5NGQyNWVlZDUwYzgzZGM4ZjVmODAwOTk1MTIyZmRm
N2I0Li41ZGNlYmRmMzA2NTMwN2RmYTk1OTA1NmVhZDkxZmU4NGQzNjA1NzY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKKysrIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlCkBAIC0xNTksMyArMTU5LDE1IEBAIGVuZGlmICgpCiBs
aXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCiAgICAgVGhyZWFkczo6VGhyZWFkcwogKQorCitpZiAo
Q09NUElMRVJfSVNfR0NDX09SX0NMQU5HKQorICAgIGlmIChDT01QSUxFUl9JU19DTEFORykKKyAg
ICAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAgICAgICAgICAgYysrZnMKKyAgICAg
ICAgKQorICAgIGVsc2UgKCkKKyAgICAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAg
ICAgICAgICAgc3RkYysrZnMKKyAgICAgICAgKQorICAgIGVuZGlmICgpCitlbmRpZiAoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tIGIvU291cmNl
L1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCmluZGV4IDFjY2UxN2RjNTllMjMzYzZh
NTgwMDFlMWI2YzkwOGU4NDVhN2M5MDYuLmM4NTM3ZWExNzNlOTliYWJkZTdmNzhjOWQzY2RjODNj
MWUzYTM1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2Nv
YS5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0KQEAgLTEy
NiwyOSArMTI2LDYgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJl
Zml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIHBsYXRmb3JtRmlsZUgKICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCh0ZW1wb3JhcnlGaWxlUGF0aC5kYXRhKCkpOwogfQogCi1ib29sIG1vdmVGaWxl
KGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewotICAgIC8v
IE92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcy4KLSAgICBhdXRvIG1hbmFnZXIgPSBhZG9wdE5TKFtb
TlNGaWxlTWFuYWdlciBhbGxvY10gaW5pdF0pOwotICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtbV1RGV2ViRmlsZU1hbmFnZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIFttYW5hZ2Vy
IHNldERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OwotICAgIGJvb2wgc3VjY2VzcyA9IFttYW5hZ2VyIG1vdmVJdGVtQXRVUkw6W05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpvbGRQYXRoXSB0b1VSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOm5ld1BhdGhd
IGVycm9yOiZlcnJvcl07Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBOU0xvZyhAIkVycm9y
IGluIG1vdmVGaWxlOiAlQCIsIGVycm9yKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9v
bCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNw
YWNlKQotewotICAgIE5TRGljdGlvbmFyeSAqZmlsZVN5c3RlbUF0dHJpYnV0ZXNEaWN0aW9uYXJ5
ID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBhdHRyaWJ1dGVzT2ZGaWxlU3lzdGVt
Rm9yUGF0aDooTlNTdHJpbmcgKilwYXRoIGVycm9yOk5VTExdOwotICAgIGlmICghZmlsZVN5c3Rl
bUF0dHJpYnV0ZXNEaWN0aW9uYXJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJlZVNw
YWNlID0gW1tmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TRmls
ZVN5c3RlbUZyZWVTaXplXSB1bnNpZ25lZExvbmdMb25nVmFsdWVdOwotICAgIHJldHVybiB0cnVl
OwotfQotCiBOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KE5TU3RyaW5nICpkaXJl
Y3RvcnlQcmVmaXgpCiB7CiAgICAgTlNTdHJpbmcgKnRlbXBEaXJlY3RvcnkgPSBOU1RlbXBvcmFy
eURpcmVjdG9yeSgpOwpAQCAtMTc4LDExICsxNTUsNiBAQCBOU1N0cmluZyAqY3JlYXRlVGVtcG9y
YXJ5RGlyZWN0b3J5KE5TU3RyaW5nICpkaXJlY3RvcnlQcmVmaXgpCiAgICAgcmV0dXJuIFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gc3RyaW5nV2l0aEZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbjpwYXRoLmRhdGEoKSBsZW5ndGg6bGVuZ3RoXTsKIH0KIAotYm9vbCBkZWxldGVOb25FbXB0
eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0UGF0aDpwYXRoIGVycm9yOm5pbF07Ci19
Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZv
clBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1H
bGliLmNwcAppbmRleCA2ODdmYTEwYzI2NzUzNmMwNThlNzkyNGRiZWNiOTNhNzEyNDhmODkwLi42
M2Q1ZGFmMWE5OTRmZjcyMGNjOTQzMDNjMWYzYzUyYmE0NGU0MDgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMTE4LDI0ICsxMTgsNiBAQCBTdHJpbmcgZmlsZW5h
bWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogI2VuZGlmCiB9CiAKLWJvb2wgZmls
ZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlv
bihmaWxlbmFtZSkgPyBnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIEdfRklMRV9URVNUX0VY
SVNUUykgOiBmYWxzZTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwot
ICAgIHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfcmVtb3ZlKGZpbGVu
YW1lLmRhdGEoKSkgIT0gLTEgOiBmYWxzZTsKLX0KLQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9y
eShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxl
bmFtZSkgPyBnX3JtZGlyKGZpbGVuYW1lLmRhdGEoKSkgIT0gLTEgOiBmYWxzZTsKLX0KLQogc3Rh
dGljIGJvb2wgZ2V0RmlsZVN0YXQoY29uc3QgU3RyaW5nJiBwYXRoLCBHU3RhdEJ1Ziogc3RhdEJ1
ZmZlcikKIHsKICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOwpAQCAtMTU0LDE2ICsxMzYsNiBAQCBzdGF0aWMgYm9vbCBnZXRGaWxlTFN0YXQoY29uc3Qg
U3RyaW5nJiBwYXRoLCBHU3RhdEJ1Ziogc3RhdEJ1ZmZlcikKICAgICByZXR1cm4gZ19sc3RhdChm
aWxlbmFtZS5kYXRhKCksIHN0YXRCdWZmZXIpICE9IC0xOwogfQogCi1ib29sIGdldEZpbGVTaXpl
KGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQotewotICAgIEdTdGF0
QnVmIHN0YXRSZXN1bHQ7Ci0gICAgaWYgKCFnZXRGaWxlU3RhdChwYXRoLCAmc3RhdFJlc3VsdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3VsdFNpemUgPSBzdGF0UmVzdWx0LnN0
X3NpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgZ2V0RmlsZVNpemUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nJiByZXN1bHRTaXplKQogewogICAgIEdSZWZQdHI8
R0ZpbGVJbmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pb19zdHJlYW1fcXVlcnlfaW5mbyho
YW5kbGUsIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwgbnVsbHB0ciwgbnVsbHB0cikp
OwpAQCAtMjQzLDMwICsyMTUsMTEgQEAgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHMo
U3RyaW5nVmlldyBwYXRoLCBjb25zdCBWZWN0b3I8U3RyaW5nVmlldz4mIGNvbXAKICAgICByZXR1
cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1ib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoKTsKLSAgICByZXR1cm4gdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkg
PyBnX21rZGlyX3dpdGhfcGFyZW50cyhmaWxlbmFtZS5kYXRhKCksIFNfSVJXWFUpICE9IC0xIDog
ZmFsc2U7Ci19Ci0KIFN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCiB7CiAgICAgcmV0dXJuIHN0
cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZ19nZXRfaG9tZV9kaXIoKSk7CiB9CiAK
LWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3Qg
U3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAgIENTdHJpbmcgdGFyZ2V0UGF0aEZTUmVw
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRhcmdldFBhdGgpOwotICAgIGlmICghdmFsaWRS
ZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoRlNSZXApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBDU3RyaW5nIHN5bWJvbGljTGlua1BhdGhGU1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihzeW1ib2xpY0xpbmtQYXRoKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oc3lt
Ym9saWNMaW5rUGF0aEZTUmVwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
ICFzeW1saW5rKHRhcmdldFBhdGhGU1JlcC5kYXRhKCksIHN5bWJvbGljTGlua1BhdGhGU1JlcC5k
YXRhKCkpOwotfQotCiBTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkK
IHsKICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpA
QCAtMjc3LDIxICsyMzAsNiBAQCBTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYg
cGF0aCkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChiYXNlTmFtZS5nZXQoKSk7CiB9CiAK
LWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZy
ZWVTcGFjZSkKLXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihmaWxlbmFtZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19m
aWxlX25ld19mb3JfcGF0aChmaWxlbmFtZS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5m
bz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5mbyhmaWxl
LmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgbnVsbHB0ciwgbnVsbHB0
cikpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZy
ZWVTcGFjZSA9IGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgp
LCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Ci0gICAgcmV0dXJuICEhZnJlZVNw
YWNlOwotfQotCiBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAg
ICAgYXV0byBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTQy
OCw2MiArMzY2LDYgQEAgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBtb3Zl
RmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAg
ICBhdXRvIG9sZEZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG9sZFBhdGgpOwot
ICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihvbGRGaWxlbmFtZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gbmV3RmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24obmV3UGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKG5ld0ZpbGVuYW1lKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHRmlsZT4gb2xkRmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG9sZEZpbGVuYW1lLmRhdGEoKSkpOwotICAgIEdS
ZWZQdHI8R0ZpbGU+IG5ld0ZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChuZXdG
aWxlbmFtZS5kYXRhKCkpKTsKLQotICAgIHJldHVybiBnX2ZpbGVfbW92ZShvbGRGaWxlLmdldCgp
LCBuZXdGaWxlLmdldCgpLCBHX0ZJTEVfQ09QWV9PVkVSV1JJVEUsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIpOwotfQotCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAg
cmV0dXJuIENyZWF0ZUhhcmRMaW5rKGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgp
LCBzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIG51bGxwdHIpOwotI2Vsc2UKLSAgICBh
dXRvIHNvdXJjZUZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNvdXJjZSk7Ci0g
ICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHNvdXJjZUZpbGVuYW1lKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbkZpbGVuYW1lID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRpb24o
ZGVzdGluYXRpb25GaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biAhbGluayhzb3VyY2VGaWxlbmFtZS5kYXRhKCksIGRlc3RpbmF0aW9uRmlsZW5hbWUuZGF0YSgp
KTsKLSNlbmRpZgotfQotCi1ib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoaGFyZExpbmsoc291
cmNlLCBkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSGFyZCBs
aW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4KLSNpZiBPUyhXSU5ET1dTKQotICAg
IHJldHVybiAhITo6Q29weUZpbGUoc291cmNlLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBkZXN0
aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgVFJVRSk7Ci0jZWxzZQotICAgIGF1dG8g
c291cmNlRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBp
ZiAoIXZhbGlkUmVwcmVzZW50YXRpb24oc291cmNlRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oZGVzdGluYXRpb24pOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihkZXN0
aW5hdGlvbkZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxH
RmlsZT4gc291cmNlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZUZp
bGVuYW1lLmRhdGEoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGRlc3RpbmF0aW9uRmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGRlc3RpbmF0aW9uRmlsZW5hbWUuZGF0YSgpKSk7
Ci0gICAgcmV0dXJuIGdfZmlsZV9jb3B5KHNvdXJjZUZpbGUuZ2V0KCksIGRlc3RpbmF0aW9uRmls
ZS5nZXQoKSwgR19GSUxFX0NPUFlfTk9ORSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0cik7Ci0jZW5kaWYKLX0KLQogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNv
bnN0IENTdHJpbmcmIGZzRmlsZSkKIHsKICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNGaWxlLmRhdGEoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggOTlkY2JmMjNlOTBmMGFlMTM0MjFjYTBiYjNl
MjkwYzI5NWNmMTI5Ny4uYmZlOGZhYmI2YmZjNjcwZTRlZTRiMzBkOGIzYzQ4ZTQ3OWRjNWQyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC00OSwzNiArNDks
NiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsIHsKIAotYm9v
bCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVw
LmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
YWNjZXNzKGZzUmVwLmRhdGEoKSwgRl9PSykgIT0gLTE7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEo
KVswXSA9PSAnXDAnKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmlsZSBmYWlsZWQgdG8gZGVsZXRl
LiBGYWlsZWQgdG8gZ2V0IGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gdG8gY3JlYXRlIENTdHJp
bmcgZnJvbSBjZlN0cmluZyBvciBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIGlzIGEgbnVsbCB2
YWx1ZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gdW5saW5rKC4u
LikgcmV0dXJucyAwIG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24gb2YgdGhlIHBhdGggYW5kIG5vbi16
ZXJvIGluIGFueSBvdGhlciBjYXNlIChpbmNsdWRpbmcgaW52YWxpZCBwZXJtaXNzaW9ucyBvciBu
b24tZXhpc3RlbnQgZmlsZSkKLSAgICBib29sIHVubGlua2VkID0gIXVubGluayhmc1JlcC5kYXRh
KCkpOwotICAgIGlmICghdW5saW5rZWQgJiYgZXJybm8gIT0gRU5PRU5UKQotICAgICAgICBMT0df
RVJST1IoIkZpbGUgZmFpbGVkIHRvIGRlbGV0ZS4gRXJyb3IgbWVzc2FnZTogJXMiLCBzdHJlcnJv
cihlcnJubykpOwotCi0gICAgcmV0dXJuIHVubGlua2VkOwotfQotCiBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSwgRmlsZUFj
Y2Vzc1Blcm1pc3Npb24gcGVybWlzc2lvbiwgYm9vbCBmYWlsSWZGaWxlRXhpc3RzKQogewogICAg
IENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0xODYs
MzUgKzE1Niw2IEBAIGJvb2wgdW5sb2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQog
fQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9y
eShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRh
dGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBybWRpcigu
Li4pIHJldHVybnMgMCBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uIG9mIHRoZSBwYXRoIGFuZCBub24t
emVybyBpbiBhbnkgb3RoZXIgY2FzZSAoaW5jbHVkaW5nIGludmFsaWQgcGVybWlzc2lvbnMgb3Ig
bm9uLWV4aXN0ZW50IGZpbGUpCi0gICAgcmV0dXJuICFybWRpcihmc1JlcC5kYXRhKCkpOwotfQot
I2VuZGlmCi0KLWJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcm
IHJlc3VsdCkKLXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotCi0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdc
MCcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwot
Ci0gICAgaWYgKHN0YXQoZnNSZXAuZGF0YSgpLCAmZmlsZUluZm8pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBmaWxlSW5mby5zdF9zaXplOwotICAgIHJldHVybiB0cnVl
OwotfQotCiBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcg
bG9uZyYgcmVzdWx0KQogewogICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwpAQCAtMzAwLDE5ICsy
NDEsNiBAQCBPcHRpb25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxp
bmtzKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gZmlsZU1ldGFkYXRhVXNpbmdGdW5j
dGlvbihwYXRoLCAmc3RhdCk7CiB9CiAKLWJvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0
cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQotewotICAg
IENTdHJpbmcgdGFyZ2V0UGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRhcmdl
dFBhdGgpOwotICAgIGlmICghdGFyZ2V0UGF0aEZTUmVwLmRhdGEoKSB8fCB0YXJnZXRQYXRoRlNS
ZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJp
bmcgc3ltYm9saWNMaW5rUGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN5bWJv
bGljTGlua1BhdGgpOwotICAgIGlmICghc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSB8fCBz
eW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiAhc3ltbGluayh0YXJnZXRQYXRoRlNSZXAuZGF0YSgpLCBzeW1i
b2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpKTsKLX0KLQogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewog
ICAgIGlmIChwYXRoLmVuZHNXaXRoKCcvJykpCkBAIC0zMjksMzUgKzI1Nyw2IEBAIFN0cmluZyBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKFN0cmluZ1ZpZXcgcGF0aCwgY29uc3QgVmVjdG9yPFN0
cmluZ1ZpZXc+JiBjb21wCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotYm9v
bCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIENTdHJpbmcg
ZnVsbFBhdGggPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKCFhY2Nl
c3MoZnVsbFBhdGguZGF0YSgpLCBGX09LKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBj
aGFyKiBwID0gZnVsbFBhdGgubXV0YWJsZURhdGEoKSArIDE7Ci0gICAgaW50IGxlbmd0aCA9IGZ1
bGxQYXRoLmxlbmd0aCgpOwotCi0gICAgaWYgKHBbbGVuZ3RoIC0gMV0gPT0gJy8nKQotICAgICAg
ICBwW2xlbmd0aCAtIDFdID0gJ1wwJzsKLSAgICBmb3IgKDsgKnA7ICsrcCkgewotICAgICAgICBp
ZiAoKnAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgICAgICBpZiAo
YWNjZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpIHsKLSAgICAgICAgICAgICAgICBpZiAobWtk
aXIoZnVsbFBhdGguZGF0YSgpLCBTX0lSV1hVKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnAgPSAnLyc7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKGFjY2VzcyhmdWxsUGF0aC5kYXRhKCksIEZfT0spKSB7Ci0gICAgICAg
IGlmIChta2RpcihmdWxsUGF0aC5kYXRhKCksIFNfSVJXWFUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiBTdHJpbmcgcGF0aEdldEZp
bGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmco
cGF0aC5yZXZlcnNlRmluZCgnLycpICsgMSk7CkBAIC00MTksMjkgKzMxOCw2IEBAIENTdHJpbmcg
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKICNlbmRpZgogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQotYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgs
IGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICBhdXRvIG9sZEZpbGVuYW1lID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKG9sZFBhdGgpOwotICAgIGlmIChvbGRGaWxlbmFtZS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBuZXdGaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKLSAgICBpZiAobmV3RmlsZW5hbWUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZW5hbWUob2xkRmlsZW5h
bWUuZGF0YSgpLCBuZXdGaWxlbmFtZS5kYXRhKCkpICE9IC0xOwotfQotCi1ib29sIGdldFZvbHVt
ZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0g
ICAgc3RydWN0IHN0YXR2ZnMgZmlsZVN5c3RlbVN0YXQ7Ci0gICAgaWYgKCFzdGF0dmZzKGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksICZmaWxlU3lzdGVtU3RhdCkpIHsKLSAg
ICAgICAgZnJlZVNwYWNlID0gZmlsZVN5c3RlbVN0YXQuZl9iYXZhaWwgKiBmaWxlU3lzdGVtU3Rh
dC5mX2Zyc2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSwgY29uc3QgU3RyaW5nJiBzdWZmaXgpCiB7CiAgICAg
Ly8gRklYTUU6IFN1ZmZpeCBpcyBub3Qgc3VwcG9ydGVkLCBidXQgT0sgZm9yIG5vdyBzaW5jZSB0
aGUgY29kZSB1c2luZyBpdCBpcyBtYWNPUy1wb3J0LW9ubHkuCkBAIC00NjgsNTMgKzM0NCw2IEBA
IGVuZDoKIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKLWJvb2wgaGFyZExpbmsoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYg
KHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVzdGluYXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHNvdXJjZSk7Ci0gICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gZnNEZXN0aW5hdGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihk
ZXN0aW5hdGlvbik7Ci0gICAgaWYgKCFmc0Rlc3RpbmF0aW9uLmRhdGEoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFsaW5rKGZzU291cmNlLmRhdGEoKSwgZnNEZXN0aW5h
dGlvbi5kYXRhKCkpOwotfQotCi1ib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoaGFyZExpbmso
c291cmNlLCBkZXN0aW5hdGlvbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSGFy
ZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4KLSAgICBpZiAoc291cmNlLmlz
RW1wdHkoKSB8fCBkZXN0aW5hdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gZnNTb3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsK
LSAgICBpZiAoIWZzU291cmNlLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBmc0Rlc3RpbmF0aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9u
KTsKLSAgICBpZiAoIWZzRGVzdGluYXRpb24uZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIGhhbmRsZSA9IG9wZW4oZnNEZXN0aW5hdGlvbi5kYXRhKCksIE9fV1JPTkxZ
IHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7Ci0gICAgaWYgKGhhbmRsZSA9PSAtMSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBhcHBlbmRSZXN1bHQgPSBhcHBlbmRGaWxlQ29u
dGVudHNUb0ZpbGVIYW5kbGUoc291cmNlLCBoYW5kbGUpOwotICAgIGNsb3NlKGhhbmRsZSk7Ci0K
LSAgICAvLyBJZiB0aGUgY29weSBmYWlsZWQsIGRlbGV0ZSB0aGUgdW51c2FibGUgZmlsZS4KLSAg
ICBpZiAoIWFwcGVuZFJlc3VsdCkKLSAgICAgICAgdW5saW5rKGZzRGVzdGluYXRpb24uZGF0YSgp
KTsKLQotICAgIHJldHVybiBhcHBlbmRSZXN1bHQ7Ci19Ci0KIE9wdGlvbmFsPGludDMyX3Q+IGdl
dEZpbGVEZXZpY2VJZChjb25zdCBDU3RyaW5nJiBmc0ZpbGUpCiB7CiAgICAgc3RydWN0IHN0YXQg
ZmlsZVN0YXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggYTAzZjhhNDY0
NGVkYjkwNzgxZmU0MzlhZjZjMDM3OWU1YTEyYTdhMC4uZmQ1OWYxOTAzZTZlMWZlODRkMTU4ZDU3
NWE5NjI5ZWFiOTAwYzlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAt
MTA1LDE1ICsxMDUsNiBAQCBzdGF0aWMgdm9pZCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZUZyb21G
aW5kRGF0YShjb25zdCBXSU4zMl9GSU5EX0RBVEFXJiBmaW5kRGF0YQogICAgIHRpbWUgPSBmaWxl
VGltZS5RdWFkUGFydCAvIDEwMDAwMDAwIC0ga1NlY29uZHNGcm9tRmlsZVRpbWVUb1RpbWV0Owog
fQogCi1ib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiBzaXpl
KQotewotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZERhdGE7Ci0gICAgaWYgKCFnZXRGaW5kRGF0
YShwYXRoLCBmaW5kRGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBn
ZXRGaWxlU2l6ZUZyb21GaW5kRGF0YShmaW5kRGF0YSwgc2l6ZSk7Ci19Ci0KIGJvb2wgZ2V0Rmls
ZVNpemUoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVIYW5kbGUsIGxvbmcgbG9uZyYgc2l6ZSkKIHsK
ICAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBmaWxlSW5mb3JtYXRpb247CkBAIC0yMjAs
MzYgKzIxMSw2IEBAIE9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZmlsZU1ldGFkYXRhRm9sbG93aW5n
U3ltbGlua3MoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBmaW5kRGF0YVRvRmlsZU1l
dGFkYXRhKGZpbmREYXRhKTsKIH0KIAotYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3Ry
aW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCi17Ci0gICAg
cmV0dXJuIDo6Q3JlYXRlU3ltYm9saWNMaW5rVyhzeW1ib2xpY0xpbmtQYXRoLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCB0YXJnZXRQYXRoLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAwKTsKLX0K
LQotYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBXSU4zMl9GSU5E
X0RBVEFXIGZpbmREYXRhOwotICAgIHJldHVybiBnZXRGaW5kRGF0YShwYXRoLCBmaW5kRGF0YSk7
Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgU3RyaW5n
IGZpbGVuYW1lID0gcGF0aDsKLSAgICByZXR1cm4gISFEZWxldGVGaWxlVyhmaWxlbmFtZS53aWRl
Q2hhcmFjdGVycygpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBmaWxlbmFtZSA9IHBhdGg7Ci0gICAgcmV0
dXJuICEhUmVtb3ZlRGlyZWN0b3J5VyhmaWxlbmFtZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSk7
Ci19Ci0KLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcm
IG5ld1BhdGgpCi17Ci0gICAgU3RyaW5nIG9sZEZpbGVuYW1lID0gb2xkUGF0aDsKLSAgICBTdHJp
bmcgbmV3RmlsZW5hbWUgPSBuZXdQYXRoOwotICAgIHJldHVybiAhITo6TW92ZUZpbGVFeChvbGRG
aWxlbmFtZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgbmV3RmlsZW5hbWUud2lkZUNoYXJhY3Rl
cnMoKS5kYXRhKCksIE1PVkVGSUxFX0NPUFlfQUxMT1dFRCB8IE1PVkVGSUxFX1JFUExBQ0VfRVhJ
U1RJTkcpOwotfQotCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7CiAgICAgVmVjdG9yPFVDaGFyPiBi
dWZmZXIoTUFYX1BBVEgpOwpAQCAtMjkxLDE5ICsyNTIsNiBAQCBDU3RyaW5nIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiAKICNlbmRpZiAvLyAhVVNFKENGKQog
Ci1ib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgU3Ry
aW5nIGZ1bGxQYXRoID0gcGF0aDsKLSAgICBpZiAoU0hDcmVhdGVEaXJlY3RvcnlFeChudWxscHRy
LCBmdWxsUGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgbnVsbHB0cikgIT0gRVJST1JfU1VD
Q0VTUykgewotICAgICAgICBEV09SRCBlcnJvciA9IEdldExhc3RFcnJvcigpOwotICAgICAgICBp
ZiAoZXJyb3IgIT0gRVJST1JfRklMRV9FWElTVFMgJiYgZXJyb3IgIT0gRVJST1JfQUxSRUFEWV9F
WElTVFMpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwYXRoICVz
IiwgcGF0aC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIFN0cmluZyBob21lRGlyZWN0b3J5
UGF0aCgpCiB7CiAgICAgcmV0dXJuICIiOwpAQCAtNTE0LDIwICs0NjIsNiBAQCBpbnQgcmVhZEZy
b21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKTsKIH0KIAotYm9vbCBoYXJk
TGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsK
LSAgICByZXR1cm4gQ3JlYXRlSGFyZExpbmsoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5k
YXRhKCksIHNvdXJjZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgbnVsbHB0cik7Ci19Ci0KLWJv
b2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3Jt
IGEgY29weSBpbnN0ZWFkLgotICAgIHJldHVybiAhITo6Q29weUZpbGUoc291cmNlLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgVFJV
RSk7Ci19Ci0KIFN0cmluZyBsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKQogewog
ICAgIHJldHVybiBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KENTSURMX0xPQ0FMX0FQUERBVEEpOwpA
QCAtNTU3LDE2ICs0OTEsNiBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKICAgICByZXR1cm4gZW50cmll
czsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50
NjRfdCYgZnJlZVNwYWNlKQotewotICAgIFVMQVJHRV9JTlRFR0VSIGZyZWVCeXRlc0F2YWlsYWJs
ZVRvQ2FsbGVyOwotICAgIGlmICghR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRoLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCAmZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXIsIG51bGxwdHIsIG51bGxw
dHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmcmVlU3BhY2UgPSBmcmVlQnl0ZXNB
dmFpbGFibGVUb0NhbGxlci5RdWFkUGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogT3B0aW9u
YWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJpbmcmIGZzRmlsZSkKIHsKICAg
ICBhdXRvIGhhbmRsZSA9IG9wZW5GaWxlKGZzRmlsZS5kYXRhKCksIEZpbGVPcGVuTW9kZTo6UmVh
ZCk7CkBAIC01OTYsMjEgKzUyMCw2IEBAIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3Rvcnko
KQogICAgIH0pOwogfQogCi1ib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5UGF0aCkKLXsKLSAgICBTSEZJTEVPUFNUUlVDVCBkZWxldGVPcGVyYXRpb24g
PSB7Ci0gICAgICAgIG51bGxwdHIsCi0gICAgICAgIEZPX0RFTEVURSwKLSAgICAgICAgZGlyZWN0
b3J5UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwKLSAgICAgICAgTCIiLAotICAgICAgICBG
T0ZfTk9DT05GSVJNQVRJT04gfCBGT0ZfTk9FUlJPUlVJIHwgRk9GX1NJTEVOVCwKLSAgICAgICAg
ZmFsc2UsCi0gICAgICAgIG51bGxwdHIsCi0gICAgICAgIEwiIgotICAgIH07Ci0gICAgcmV0dXJu
ICFTSEZpbGVPcGVyYXRpb24oJmRlbGV0ZU9wZXJhdGlvbik7Ci19Ci0KIGJvb2wgdW5tYXBWaWV3
T2ZGaWxlKHZvaWQqIGJ1ZmZlciwgc2l6ZV90KQogewogICAgIHJldHVybiBVbm1hcFZpZXdPZkZp
bGUoYnVmZmVyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBkOGEzOTIyOTM1MmFjY2ViM2VkNDFjODg0MjViMzA3YzNiMGE2ZDI0Li40ZTFlYWY3
YWM2Y2YwY2MwZGU1YjkwOTVmZmQ3MTAwMGM5ZmNmMmFkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDQtMzAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBTdGFydCBsZXZlcmFn
aW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTI1NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBBUEkgdGVzdCBjb3ZlcmFnZSBmb3Ig
dGhlIEZpbGVTeXN0ZW0gQVBJIHRoYXQgd2FzIG1vZGlmaWVkLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpGaWxlU3lzdGVtVGVzdDo6dGVtcEZpbGVQYXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRmlsZVN5bWxpbmtQYXRoIGNvbnN0KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRW1wdHlGb2xkZXJQYXRoIGNv
bnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0Ojp0ZW1wRW1wdHlG
b2xkZXJTeW1saW5rUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lz
dGVtVGVzdDo6dGVtcEVtcHR5RmlsZVBhdGggY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6RmlsZVN5c3RlbVRlc3Q6OnNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoIGNvbnN0KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpiYW5nQ29udGFpbmluZ0ZpbGVQYXRo
IGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpxdW90ZUNv
bnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0Yp
OgorCiAyMDIxLTA0LTMwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbd2Via2l0c2NweV0gU3VwcG9ydCBhcmd1bWVudHMgdG8gVGFza1Bvb2wgc2V0dXAg
YW5kIHRlYXJkb3duCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0u
Y3BwCmluZGV4IDhmNjUxZDNlYWUzNDMyOTc1MWFjMzYxZGQ3ZTA2NGNiNjM3ZTM3NTIuLmMyOTM1
ZDI5MDJlNDZmYjhjYmNhMjI1ZDA2ZTc4NjI1YzQ4MWY3MmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0uY3BwCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIAotICAgICAgICAv
LyBjcmVhdGUgdGVtcCBmaWxlCisgICAgICAgIC8vIGNyZWF0ZSB0ZW1wIGZpbGUuCiAgICAgICAg
IEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7CiAgICAgICAgIG1fdGVtcEZp
bGVQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBUZXN0RmlsZSIsIGhh
bmRsZSk7CiAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgRmlsZVN5c3Rl
bVRlc3REYXRhLCBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CkBAIC01Miw2ICs1MiwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fdGVtcEZpbGVTeW1saW5rUGF0aCA9ICJ0ZW1wVGVzdEZpbGUt
c3ltbGluayI7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhtX3RlbXBG
aWxlUGF0aCwgbV90ZW1wRmlsZVN5bWxpbmtQYXRoKTsKIAorICAgICAgICAvLyBDcmVhdGUgdGVt
cCBkaXJlY3RvcnkuCisgICAgICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSB0ZW1w
b3JhcnlGaWxlOworICAgICAgICBtX3RlbXBFbXB0eUZvbGRlclBhdGggPSBGaWxlU3lzdGVtOjpv
cGVuVGVtcG9yYXJ5RmlsZSgidGVtcEVtcHR5Rm9sZGVyIiwgdGVtcG9yYXJ5RmlsZSk7CisgICAg
ICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlKTsKKyAgICAgICAgRmlsZVN5
c3RlbTo6ZGVsZXRlRmlsZShtX3RlbXBFbXB0eUZvbGRlclBhdGgpOworICAgICAgICBGaWxlU3lz
dGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKworICAgICAg
ICBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFy
eUZpbGUoInRlbXBFbXB0eUZvbGRlci1zeW1saW5rIiwgdGVtcG9yYXJ5RmlsZSk7CisgICAgICAg
IEZpbGVTeXN0ZW06OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlKTsKKyAgICAgICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKTsKKyAgICAgICAgRmls
ZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCwgbV90ZW1w
RW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7CisKICAgICAgICAgbV90ZW1wRW1wdHlGaWxlUGF0aCA9
IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlUZXN0RmlsZSIsIGhhbmRs
ZSk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOwogCkBAIC02OSwyMiAr
ODEsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSht
X3RlbXBGaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRmls
ZVN5bWxpbmtQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnko
bV90ZW1wRW1wdHlGb2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSht
X3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShtX3RlbXBFbXB0eUZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmls
ZShtX3NwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZShtX2JhbmdDb250YWluaW5nRmlsZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKG1fcXVvdGVDb250YWluaW5nRmlsZVBhdGgpOwogICAgIH0KIAotICAgIGNvbnN0IFN0
cmluZyYgdGVtcEZpbGVQYXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVBhdGg7IH0KLSAgICBjb25z
dCBTdHJpbmcmIHRlbXBGaWxlU3ltbGlua1BhdGgoKSB7IHJldHVybiBtX3RlbXBGaWxlU3ltbGlu
a1BhdGg7IH0KLSAgICBjb25zdCBTdHJpbmcmIHRlbXBFbXB0eUZpbGVQYXRoKCkgeyByZXR1cm4g
bV90ZW1wRW1wdHlGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgc3BhY2VDb250YWluaW5n
RmlsZVBhdGgoKSB7IHJldHVybiBtX3NwYWNlQ29udGFpbmluZ0ZpbGVQYXRoOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiBiYW5nQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9iYW5nQ29udGFp
bmluZ0ZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBxdW90ZUNvbnRhaW5pbmdGaWxlUGF0
aCgpIHsgcmV0dXJuIG1fcXVvdGVDb250YWluaW5nRmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJp
bmcmIHRlbXBGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9CisgICAg
Y29uc3QgU3RyaW5nJiB0ZW1wRmlsZVN5bWxpbmtQYXRoKCkgY29uc3QgeyByZXR1cm4gbV90ZW1w
RmlsZVN5bWxpbmtQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGb2xkZXJQYXRo
KCkgY29uc3QgeyByZXR1cm4gbV90ZW1wRW1wdHlGb2xkZXJQYXRoOyB9CisgICAgY29uc3QgU3Ry
aW5nJiB0ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVt
cHR5Rm9sZGVyU3ltbGlua1BhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRlbXBFbXB0eUZpbGVQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV90ZW1wRW1wdHlGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0
cmluZyYgc3BhY2VDb250YWluaW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlQ29u
dGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiBiYW5nQ29udGFpbmluZ0ZpbGVQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29u
c3QgU3RyaW5nJiBxdW90ZUNvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVv
dGVDb250YWluaW5nRmlsZVBhdGg7IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV90ZW1wRmls
ZVBhdGg7CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVTeW1saW5rUGF0aDsKKyAgICBTdHJpbmcgbV90
ZW1wRW1wdHlGb2xkZXJQYXRoOworICAgIFN0cmluZyBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQ
YXRoOwogICAgIFN0cmluZyBtX3RlbXBFbXB0eUZpbGVQYXRoOwogICAgIFN0cmluZyBtX3NwYWNl
Q29udGFpbmluZ0ZpbGVQYXRoOwogICAgIFN0cmluZyBtX2JhbmdDb250YWluaW5nRmlsZVBhdGg7
CkBAIC0xNzYsNCArMTk0LDI0NiBAQCBURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0ZU5vbkVt
cHR5RGlyZWN0b3J5KQogICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRl
bXBvcmFyeVRlc3RGb2xkZXIpKTsKIH0KIAorVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBmaWxlRXhp
c3RzKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxl
U3ltbGlua1BhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
dGVtcEVtcHR5RmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHModGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBF
bXB0eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKSkpOworfQorCitURVNUX0YoRmls
ZVN5c3RlbVRlc3QsIGRlbGV0ZVN5bWxpbmspCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHModGVtcEZpbGVTeW1saW5rUGF0aCgpKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworCisgICAg
Ly8gU2hvdWxkIGhhdmUgZGVsZXRlZCB0aGUgc3ltbGluayBidXQgbm90IHRoZSB0YXJnZXQgZmls
ZS4KKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVTeW1s
aW5rUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZGVsZXRlRmlsZSkKK3sK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkp
OworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRo
KCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVFbXB0eURpcmVjdG9yeSkK
K3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRl
clBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0
b3J5KHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsK
K30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBtb3ZlRmlsZSkKK3sKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gdGVtcEZpbGVQYXRoKCkgKyAiLW1vdmVkIjsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoZGVzdGluYXRpb24pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjptb3ZlRmlsZSh0ZW1wRmlsZVBhdGgoKSwgZGVzdGluYXRpb24pKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZGVzdGluYXRpb24pKTsKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6bW92ZUZpbGUodGVtcEZpbGVQYXRoKCksIGRlc3RpbmF0aW9u
KSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbW92ZUZpbGVPdmVyd3JpdGVzRGVzdGlu
YXRpb24pCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmls
ZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVt
cHR5RmlsZVBhdGgoKSkpOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUp
KTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBF
WFBFQ1RfVFJVRSghZmlsZVNpemUpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6bW92
ZUZpbGUodGVtcEZpbGVQYXRoKCksIHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5RmlsZVBhdGgoKSkpOworCisg
ICAgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXpl
LCAwKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBnZXRGaWxlU2l6ZSkKK3sKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7
CisKKyAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmdldEZpbGVTaXplKHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9H
VChmaWxlU2l6ZSwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZSh0ZW1wRW1wdHlGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxl
U2l6ZSk7CisKKyAgICBmaWxlU2l6ZSA9IDA7CisgICAgU3RyaW5nIGZpbGVUaGF0RG9lc05vdEV4
aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0eUZvbGRl
clBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3Rl
bTo6Z2V0RmlsZVNpemUoZmlsZVRoYXREb2VzTm90RXhpc3QsIGZpbGVTaXplKSk7CisgICAgRVhQ
RUNUX1RSVUUoIWZpbGVTaXplKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBmaWxlSXNE
aXJlY3RvcnkpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5
KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnko
dGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzOjpZZXMpKTsKKworICAgIGF1dG8gZm9sZGVyU3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3Rl
bTo6ZmlsZU1ldGFkYXRhKHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCkpOworICAgIEVYUEVD
VF9UUlVFKCEhZm9sZGVyU3ltbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoZm9sZGVyU3lt
bGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluayk7Cisg
ICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xk
ZXJTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpO
bykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1w
dHlGb2xkZXJTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzOjpZZXMpKTsKKworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rv
cnkodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6
Ok5vKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1w
RmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7
CisKKyAgICBhdXRvIGZpbGVTeW1saW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRh
dGEodGVtcEZpbGVTeW1saW5rUGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIWZpbGVTeW1saW5r
TWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShmaWxlU3ltbGlua01ldGFkYXRhLT50eXBlLCBGaWxl
TWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluayk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06OlNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06OlNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgU3RyaW5nIGZpbGVUaGF0RG9l
c05vdEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0
eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmls
ZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBGaWxlU3lzdGVt
OjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxl
U3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZmlsZVRoYXREb2VzTm90RXhpc3QsIEZpbGVTeXN0ZW06
OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworfQorCitURVNUX0YoRmlsZVN5c3Rl
bVRlc3QsIG1ha2VBbGxEaXJlY3RvcmllcykKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZp
bGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIEZpbGVTeXN0
ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkpOworICAg
IFN0cmluZyBzdWJGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIHsgInN1YkZvbGRlcjEiLCAic3ViRm9sZGVyMiIs
ICJzdWJGb2xkZXIzIiB9KTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhzdWJGb2xkZXJQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6bWFrZUFsbERp
cmVjdG9yaWVzKHN1YkZvbGRlclBhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHN1YkZvbGRlclBhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlSXNEaXJlY3Rvcnkoc3ViRm9sZGVyUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVOb25F
bXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdWJGb2xkZXJQYXRoKSk7Cit9CisKK1RFU1RfRihGaWxl
U3lzdGVtVGVzdCwgZ2V0Vm9sdW1lRnJlZVNwYWNlKQoreworICAgIHVpbnQ2NF90IGZyZWVTcGFj
ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0Vm9sdW1lRnJlZVNwYWNlKHRl
bXBGaWxlUGF0aCgpLCBmcmVlU3BhY2UpKTsKKyAgICBFWFBFQ1RfR1QoZnJlZVNwYWNlLCAwVSk7
CisKKyAgICBTdHJpbmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3Qi
X3MpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpnZXRWb2x1bWVGcmVlU3BhY2UoZmls
ZVRoYXREb2VzTm90RXhpc3QsIGZyZWVTcGFjZSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRl
c3QsIGNyZWF0ZVN5bWJvbGljTGluaykKK3sKKyAgICBhdXRvIHN5bWxpbmtQYXRoID0gdGVtcEZp
bGVQYXRoKCkgKyAiLXN5bWxpbmsiOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Y3JlYXRl
U3ltYm9saWNMaW5rKHRlbXBGaWxlUGF0aCgpLCBzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKworICAgIGF1dG8gc3lt
bGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAg
ICBFWFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKHN5bWxpbmtN
ZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworCisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzeW1saW5rUGF0aCkpOworICAgIEVY
UEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworfQorCitU
RVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZVN5bWJvbGljTGlua0ZvbGRlcikKK3sKKyAgICBh
dXRvIHN5bWxpbmtQYXRoID0gdGVtcEVtcHR5Rm9sZGVyUGF0aCgpICsgIi1zeW1saW5rIjsKKyAg
ICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayh0ZW1wRW1wdHlGb2xk
ZXJQYXRoKCksIHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhzeW1saW5rUGF0aCkpOworCisgICAgYXV0byBzeW1saW5rTWV0YWRhdGEgPSBGaWxl
U3lzdGVtOjpmaWxlTWV0YWRhdGEoc3ltbGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhc3lt
bGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoc3ltbGlua01ldGFkYXRhLT50eXBlLCBGaWxl
TWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluayk7CisKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5
c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHN5bWxpbmtQYXRoLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJ
c0RpcmVjdG9yeShzeW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6WWVzKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN5
bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3lt
bGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBF
bXB0eUZvbGRlclBhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZVN5
bWJvbGljTGlua0ZpbGVEb2VzTm90RXhpc3QpCit7CisgICAgU3RyaW5nIGZpbGVUaGF0RG9lc05v
dEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBFbXB0eUZv
bGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhmaWxlVGhhdERvZXNOb3RFeGlzdCkpOworCisgICAgYXV0byBzeW1s
aW5rUGF0aCA9IGZpbGVUaGF0RG9lc05vdEV4aXN0ICsgIi1zeW1saW5rIjsKKyAgICBFWFBFQ1Rf
RkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhmaWxlVGhhdERvZXNOb3RFeGlzdCwg
c3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhz
eW1saW5rUGF0aCkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZUhhcmRMaW5r
KQoreworICAgIGF1dG8gaGFyZGxpbmtQYXRoID0gdGVtcEZpbGVQYXRoKCkgKyAiLWhhcmRsaW5r
IjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgp
KTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNU
X0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmhhcmRMaW5r
KHRlbXBGaWxlUGF0aCgpLCBoYXJkbGlua1BhdGgpKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgbGlua0Zp
bGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJk
bGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZp
bGVTaXplKTsKKworICAgIGF1dG8gaGFyZGxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVN
ZXRhZGF0YShoYXJkbGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhaGFyZGxpbmtNZXRhZGF0
YSk7CisgICAgRVhQRUNUX0VRKGhhcmRsaW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6
VHlwZTo6RmlsZSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRl
bXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
dGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KGhhcmRsaW5rUGF0aCkpOworCisgICAgbGlua0ZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOwor
ICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKK30KKworVEVTVF9GKEZpbGVT
eXN0ZW1UZXN0LCBjcmVhdGVIYXJkTGlua09yQ29weUZpbGUpCit7CisgICAgYXV0byBoYXJkbGlu
a1BhdGggPSB0ZW1wRmlsZVBhdGgoKSArICItaGFyZGxpbmsiOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGZp
bGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1w
RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6aGFyZExpbmtPckNvcHlGaWxlKHRlbXBGaWxlUGF0
aCgpLCBoYXJkbGlua1BhdGgpKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgbGlua0ZpbGVTaXplID0gMDsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxp
bmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKKwor
ICAgIGF1dG8gaGFyZGxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YShoYXJk
bGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhaGFyZGxpbmtNZXRhZGF0YSk7CisgICAgRVhQ
RUNUX0VRKGhhcmRsaW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6RmlsZSk7
CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRo
KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0
aCkpOworCisgICAgbGlua0ZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9F
UShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427506</attachid>
            <date>2021-05-01 10:30:14 -0700</date>
            <delta_ts>2021-05-01 13:47:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210501103014.patch</filename>
            <type>text/plain</type>
            <size>46437</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li4x
M2YwOTRmNTZlMWQ1YTEyOTQxZjY0M2ZkMjAzYTNlYTUwM2JkYzNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIFN0YXJ0IGxldmVyYWdp
bmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5c3RlbSB0byByZWR1Y2UgdGhlIGFtb3Vu
dCBvZgorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZmlsZUV4aXN0cyk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVGaWxlKToKKyAgICAgICAgKFdU
Rjo6RmlsZVN5c3RlbUltcGw6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Om1vdmVGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
OmdldEZpbGVTaXplKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVJc0RpcmVj
dG9yeSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjptYWtlQWxsRGlyZWN0b3JpZXMp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Z2V0Vm9sdW1lRnJlZVNwYWNlKToKKyAg
ICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmNyZWF0ZVN5bWJvbGljTGluayk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpoYXJkTGluayk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0
ZW1JbXBsOjpoYXJkTGlua09yQ29weUZpbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1w
bDo6ZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkpOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6
CisgICAgICAgICogd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6OmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSk6CisgICAgICAgICogd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVt
UE9TSVguY3BwOgorICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisKIDIwMjEt
MDQtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE9wdGltaXpl
IFNvcnRlZEFycmF5TWFwIGJ5IHVzaW5nIGxpbmVhciBzZWFyY2ggZm9yIHNtYWxsIGFycmF5cwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0phdmFTY3Jp
cHRDb3JlLnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ph
dmFTY3JpcHRDb3JlLnhjY29uZmlnCmluZGV4IDk2ZDExYzZlYzMzZmZjZTNhNzM2MTk1NzBlZTM2
ZDk0ZDEwNWZhMjUuLmM0YjRkNjYzODVkNTBiZjE0MWRjMmU0MmY1ZTBhZDcxZTJjNmNjN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZhU2NyaXB0
Q29yZS54Y2NvbmZpZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMv
SmF2YVNjcmlwdENvcmUueGNjb25maWcKQEAgLTI3LDcgKzI3LDcgQEAgREVGSU5FU19NT0RVTEUg
PSBZRVM7CiBNT0RVTEVNQVBfRklMRSA9ICQoU1JDUk9PVCkvSmF2YVNjcmlwdENvcmUubW9kdWxl
bWFwOwogCiAvLyBQcmV2ZW50IEMrKyBzdGFuZGFyZCBsaWJyYXJ5IG9wZXJhdG9yIG5ldywgZGVs
ZXRlIGFuZCB0aGVpciByZWxhdGVkIGV4Y2VwdGlvbiB0eXBlcyBmcm9tIGJlaW5nIGV4cG9ydGVk
IGFzIHdlYWsgc3ltYm9scy4KLU9USEVSX0xERkxBR1NfSElERV9TWU1CT0xTID0gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWJhZF9hbGxvYyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9f
WlRJU3Q5ZXhjZXB0aW9uIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDliYWRfYWxsb2Mg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUU1N0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sLF9fWmRsUHZTXyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWm53bVB2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTktTdDNfXzE4ZnVuY3Rpb25JRnZ2RUVjbEV2IC1XbCwtdW5leHBv
cnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMxRU9TMl8gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFQzJFT1MyXyAtV2wsLXVuZXhwb3J0
ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRWNsRVMzX1M1XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9f
Wk5TdDNfXzE4ZnVuY3Rpb25JRnZSTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yRVBOUzFfMTBSZWdp
c3RlcklERUVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25J
RnZSTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yRVBOUzFfMTBSZWdpc3RlcklERUVFRDJFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMUV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUQyRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pUVk5TdDNfXzExN2JhZF9mdW5jdGlvbl9jYWxsRTsKK09USEVSX0xERkxB
R1NfSElERV9TWU1CT0xTID0gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWJhZF9hbGxv
YyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRJU3Q5ZXhjZXB0aW9uIC1XbCwtdW5leHBvcnRl
ZF9zeW1ib2wsX19aVFNTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUU1N0
OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWmRsUHZTXyAtV2wsLXVuZXhwb3J0
ZWRfc3ltYm9sLF9fWm53bVB2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTktTdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVjbEV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlv
bklGdnZFRUMxRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9u
SUZ2dkVFQzJFT1MyXyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9u
SUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRWNsRVMzX1M1
XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZSTjNKU0MxN0J5
dGVjb2RlR2VuZXJhdG9yRVBOUzFfMTBSZWdpc3RlcklERUVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZSTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yRVBO
UzFfMTBSZWdpc3RlcklERUVFRDJFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMUV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUVk5TdDNfXzExN2JhZF9m
dW5jdGlvbl9jYWxsRSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmls
ZXN5c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTExX19yYW5nZV9l
bmRFUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMTRfX2ZzMTBmaWxlc3lzdGVt
MjRfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXlJUEtjUzRfY0xiMUVFMTNfX3JhbmdlX2JlZ2luRVM0
XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5c3RlbThfUGF0
aENWVEljRTE0X19hcHBlbmRfcmFuZ2VJUEtjRUVOU185ZW5hYmxlX2lmSVhzcjI3X19pc19jcHAx
N19mb3J3YXJkX2l0ZXJhdG9ySVRfRUU1dmFsdWVFdkU0dHlwZUVSTlNfMTJiYXNpY19zdHJpbmdJ
Y05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVM4X1M4XyAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5c3RlbThfUGF0aENWVEljRTE1X19h
cHBlbmRfc291cmNlSVBLY0VFdlJOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0lj
RUVOU185YWxsb2NhdG9ySWNFRUVFUktUXyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNf
XzE0X19mczEwZmlsZXN5c3RlbThfUGF0aENWVEljRTE0X19hcHBlbmRfcmFuZ2VJUEtjRUVOU185
ZW5hYmxlX2lmSVhzcjIxX19pc19mb3J3YXJkX2l0ZXJhdG9ySVRfRUU1dmFsdWVFdkU0dHlwZUVS
TlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVF
RVM4X1M4XzsKIAogT1RIRVJfTERGTEFHU19CQVNFID0gJChPVEhFUl9MREZMQUdTX0hJREVfU1lN
Qk9MUykgLWZvcmNlX2xvYWQgIiQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9K
YXZhU2NyaXB0Q29yZS9saWJXVEYuYSI7CiBPVEhFUl9MREZMQUdTW3Nkaz1lbWJlZGRlZCpdID0g
JChpbmhlcml0ZWQpICQoT1RIRVJfTERGTEFHU19CQVNFKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKaW5k
ZXggYmRmOTAyYTZiZDBhY2QwZTFiZTc1ZTlmNzY4OWNjMDJjZDYzZGU1Ny4uNDY0MTFhMWNmNjBk
ZTk5NThjYTM2MzY4ZWYxNzc0N2EwODVlNzNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
RmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvRmlsZU1ldGFkYXRhLmg+CiAjaW5jbHVkZSA8d3Rm
L0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRG
aWxlc3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtMzgyLDE0ICszODMsNiBAQCB2b2lkIHVubG9j
a0FuZENsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZSho
YW5kbGUpOwogfQogCi1ib29sIGZpbGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAg
ICBhdXRvIG1ldGFkYXRhID0gc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzOjpZZXMgPyBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRo
KSA6IGZpbGVNZXRhZGF0YShwYXRoKTsKLSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRh
dGE6OlR5cGU6OkRpcmVjdG9yeTsKLX0KLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9v
bCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwy
MCArNDAxLDYgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5n
JikKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJv
b2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1
dG8gZW50cmllcyA9IGxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYg
ZW50cnkgOiBlbnRyaWVzKSB7Ci0gICAgICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5
RGlyZWN0b3J5KGVudHJ5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShl
bnRyeSk7Ci0gICAgfQotICAgIHJldHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0K
LSNlbmRpZgotCiBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBz
aXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
dWludDhfdCosIHNpemVfdCk+Jik+JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0
SGFuZGxlKQogewogICAgIGNvbnN0ZXhwciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpA
QCAtNTA0LDUgKzQ4MywxMDkgQEAgT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3Qg
U3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICAvLyBleGlz
dHMoKSByZXR1cm5zIGZhbHNlIG9uIGVycm9yIHNvIG5vIG5lZWQgdG8gY2hlY2sgZWMuCisgICAg
cmV0dXJuIHN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3RzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKS5kYXRhKCksIGVjKTsKK30KKworYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgLy8gcmVtb3ZlKCkgcmV0dXJucyBm
YWxzZSBvbiBlcnJvciBzbyBubyBuZWVkIHRvIGNoZWNrIGVjLgorICAgIHJldHVybiBzdGQ6OmZp
bGVzeXN0ZW06OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBl
Yyk7Cit9CisKKy8vIFdlIGN1cnJlbnRseSB1c2UgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24g
b24gbWFjT1MgdG8gZGVhbCB3aXRoIC5EU19TdG9yZSBmaWxlcyB0aGF0IG1heSBiZSBwcmVzZW50
IGluIG90aGVyd2lzZSBlbXB0eSBkaXJlY3Rvcmllcy4KKyNpZiAhUExBVEZPUk0oTUFDKQorYm9v
bCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjpl
cnJvcl9jb2RlIGVjOworICAgIC8vIHJlbW92ZSgpIHJldHVybnMgZmFsc2Ugb24gZXJyb3Igc28g
bm8gbmVlZCB0byBjaGVjayBlYy4KKyAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjpyZW1vdmUo
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworfQorI2VuZGlmCisK
K2Jvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1Bh
dGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cmVu
YW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihuZXdQYXRoKS5kYXRhKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQor
Citib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQp
Cit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGF1dG8gc2l6ZSA9IHN0ZDo6ZmlsZXN5
c3RlbTo6ZmlsZV9zaXplKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzaXpl
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIGZpbGVJc0RpcmVjdG9yeShjb25zdCBTdHJp
bmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rcykKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgc3RkOjpmaWxlc3lzdGVtOjpm
aWxlX3N0YXR1cyBmaWxlU3RhdHVzOworICAgIGlmIChzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
ID09IFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykKKyAgICAgICAgZmlsZVN0YXR1cyA9
IHN0ZDo6ZmlsZXN5c3RlbTo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBzdGQ6OmZpbGVzeXN0
ZW06OnN5bWxpbmtfc3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCks
IGVjKTsKKyAgICByZXR1cm4gZmlsZVN0YXR1cy50eXBlKCkgPT0gc3RkOjpmaWxlc3lzdGVtOjpm
aWxlX3R5cGU6OmRpcmVjdG9yeTsKK30KKworYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBzdGQ6OmZpbGVz
eXN0ZW06OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRWb2x1bWVGcmVlU3Bh
Y2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQoreworICAgIHN0ZDo6
ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5mbyA9IHN0ZDo6ZmlsZXN5c3RlbTo6c3Bh
Y2UoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChl
YykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZyZWVTcGFjZSA9IHNwYWNlSW5mby5hdmFp
bGFibGU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNv
bnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQor
eworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OmNyZWF0ZV9z
eW1saW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoKS5kYXRhKCksIGVjKTsKKyAgICBy
ZXR1cm4gIWVjOworfQorCitib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwg
Y29uc3QgU3RyaW5nJiBsaW5rUGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAg
c3RkOjpmaWxlc3lzdGVtOjpjcmVhdGVfaGFyZF9saW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCku
ZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBoYXJkTGlua09yQ29weUZp
bGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKQorewor
ICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBmc1RhcmdldFBhdGggPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBm
c0xpbmtQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGxpbmtQYXRoKS5kYXRhKCk7CisK
KyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgc3RkOjpmaWxlc3lzdGVtOjpjcmVhdGVfaGFy
ZF9saW5rKGZzVGFyZ2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgc3RkOjpmaWxlc3lzdGVtOjpjb3B5X2ZpbGUoZnNUYXJn
ZXRQYXRoLCBmc0xpbmtQYXRoLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBkZWxl
dGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJv
cl9jb2RlIGVjOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cmVtb3ZlX2FsbChmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKwogfSAv
LyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3Rl
bS5oCmluZGV4IDlhOWQ5Y2EwNmUyZTNjYmVmNDJlZGY2NWVlMDNkOGM1ZTg4YWNiYzkuLmY2YzQz
YTU4M2EwN2Y4YTg5YzIwMzEwZDk4YzQ3OTg5YTI3NTEyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKQEAg
LTE2Niw5ICsxNjYsOSBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tBbmRDbG9zZUZp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlKTsKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd3JpdGUgd2Fz
IHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGl0IHdhcyBub3QuCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBhcHBlbmRGaWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBQbGF0
Zm9ybUZpbGVIYW5kbGUmKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFyZExpbmsoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pOworV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBT
dHJpbmcmIGxpbmtQYXRoKTsKIC8vIEhhcmQgbGlua3MgYSBmaWxlIGlmIHBvc3NpYmxlLCBjb3Bp
ZXMgaXQgaWYgbm90LgotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFyZExpbmtPckNvcHlGaWxl
KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHRhcmdl
dFBhdGgsIGNvbnN0IFN0cmluZyYgbGlua1BhdGgpOwogCiAjaWYgVVNFKEZJTEVfTE9DSykKIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgT3B0aW9u
U2V0PEZpbGVMb2NrTW9kZT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1K
U0NPbmx5LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlCmluZGV4
IDY1ZGU2NTk0ZDI1ZWVkNTBjODNkYzhmNWY4MDA5OTUxMjJmZGY3YjQuLjVkY2ViZGYzMDY1MzA3
ZGZhOTU5MDU2ZWFkOTFmZTg0ZDM2MDU3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtSlNDT25seS5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHku
Y21ha2UKQEAgLTE1OSwzICsxNTksMTUgQEAgZW5kaWYgKCkKIGxpc3QoQVBQRU5EIFdURl9MSUJS
QVJJRVMKICAgICBUaHJlYWRzOjpUaHJlYWRzCiApCisKK2lmIChDT01QSUxFUl9JU19HQ0NfT1Jf
Q0xBTkcpCisgICAgaWYgKENPTVBJTEVSX0lTX0NMQU5HKQorICAgICAgICBsaXN0KEFQUEVORCBX
VEZfTElCUkFSSUVTCisgICAgICAgICAgICBjKytmcworICAgICAgICApCisgICAgZWxzZSAoKQor
ICAgICAgICBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCisgICAgICAgICAgICBzdGRjKytmcwor
ICAgICAgICApCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxl
U3lzdGVtQ29jb2EubW0KaW5kZXggMWNjZTE3ZGM1OWUyMzNjNmE1ODAwMWUxYjZjOTA4ZTg0NWE3
YzkwNi4uYzg1MzdlYTE3M2U5OWJhYmRlN2Y3OGM5ZDNjZGM4M2MxZTNhMzVjZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbQpAQCAtMTI2LDI5ICsxMjYsNiBAQCBTdHJp
bmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhh
bmRsZSYgcGxhdGZvcm1GaWxlSAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBvcmFy
eUZpbGVQYXRoLmRhdGEoKSk7CiB9CiAKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQ
YXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgLy8gT3ZlcndyaXRlIGV4aXN0aW5n
IGZpbGVzLgotICAgIGF1dG8gbWFuYWdlciA9IGFkb3B0TlMoW1tOU0ZpbGVNYW5hZ2VyIGFsbG9j
XSBpbml0XSk7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXVEZXZWJGaWxlTWFuYWdl
ckRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgW21hbmFnZXIgc2V0RGVsZWdhdGU6ZGVsZWdh
dGUuZ2V0KCldOwotCi0gICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gW21hbmFnZXIgbW92ZUl0ZW1BdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOm9sZFBhdGhd
IHRvVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6bmV3UGF0aF0gZXJyb3I6JmVycm9yXTsKLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIE5TTG9nKEAiRXJyb3IgaW4gbW92ZUZpbGU6ICVAIiwg
ZXJyb3IpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIGdldFZvbHVtZUZyZWVTcGFj
ZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0gICAgTlNEaWN0
aW9uYXJ5ICpmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25hcnkgPSBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkZpbGVTeXN0ZW1Gb3JQYXRoOihOU1N0cmluZyAq
KXBhdGggZXJyb3I6TlVMTF07Ci0gICAgaWYgKCFmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25h
cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmVlU3BhY2UgPSBbW2ZpbGVTeXN0ZW1B
dHRyaWJ1dGVzRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNGaWxlU3lzdGVtRnJlZVNpemVdIHVu
c2lnbmVkTG9uZ0xvbmdWYWx1ZV07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE5TU3RyaW5nICpj
cmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoTlNTdHJpbmcgKmRpcmVjdG9yeVByZWZpeCkKIHsKICAg
ICBOU1N0cmluZyAqdGVtcERpcmVjdG9yeSA9IE5TVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CkBAIC0x
NzgsMTEgKzE1NSw2IEBAIE5TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoTlNTdHJp
bmcgKmRpcmVjdG9yeVByZWZpeCkKICAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGguZGF0YSgpIGxl
bmd0aDpsZW5ndGhdOwogfQogCi1ib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSByZW1vdmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6bmlsXTsKLX0KLQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiBib29sIGlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmluZGV4IDY4N2Zh
MTBjMjY3NTM2YzA1OGU3OTI0ZGJlY2I5M2E3MTI0OGY4OTAuLjYzZDVkYWYxYTk5NGZmNzIwY2M5
NDMwM2MxZjNjNTJiYTQ0ZTQwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmls
ZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIu
Y3BwCkBAIC0xMTgsMjQgKzExOCw2IEBAIFN0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiAjZW5kaWYKIH0KIAotYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotICAgIHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfZmls
ZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgR19GSUxFX1RFU1RfRVhJU1RTKSA6IGZhbHNlOwotfQot
Ci1ib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVw
cmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgpKSAhPSAtMSA6
IGZhbHNlOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OwotICAgIHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfcm1kaXIoZmls
ZW5hbWUuZGF0YSgpKSAhPSAtMSA6IGZhbHNlOwotfQotCiBzdGF0aWMgYm9vbCBnZXRGaWxlU3Rh
dChjb25zdCBTdHJpbmcmIHBhdGgsIEdTdGF0QnVmKiBzdGF0QnVmZmVyKQogewogICAgIGF1dG8g
ZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0xNTQsMTYgKzEz
Niw2IEBAIHN0YXRpYyBib29sIGdldEZpbGVMU3RhdChjb25zdCBTdHJpbmcmIHBhdGgsIEdTdGF0
QnVmKiBzdGF0QnVmZmVyKQogICAgIHJldHVybiBnX2xzdGF0KGZpbGVuYW1lLmRhdGEoKSwgc3Rh
dEJ1ZmZlcikgIT0gLTE7CiB9CiAKLWJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCi17Ci0gICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKLSAg
ICBpZiAoIWdldEZpbGVTdGF0KHBhdGgsICZzdGF0UmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBs
b25nIGxvbmcmIHJlc3VsdFNpemUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZUluZm8+IGluZm8gPSBh
ZG9wdEdSZWYoZ19maWxlX2lvX3N0cmVhbV9xdWVyeV9pbmZvKGhhbmRsZSwgR19GSUxFX0FUVFJJ
QlVURV9TVEFOREFSRF9TSVpFLCBudWxscHRyLCBudWxscHRyKSk7CkBAIC0yNDMsMzAgKzIxNSwx
MSBAQCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNv
bnN0IFZlY3RvcjxTdHJpbmdWaWV3PiYgY29tcAogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7CiB9CiAKLWJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsK
LSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAg
IHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfbWtkaXJfd2l0aF9wYXJl
bnRzKGZpbGVuYW1lLmRhdGEoKSwgU19JUldYVSkgIT0gLTEgOiBmYWxzZTsKLX0KLQogU3RyaW5n
IGhvbWVEaXJlY3RvcnlQYXRoKCkKIHsKICAgICByZXR1cm4gc3RyaW5nRnJvbUZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihnX2dldF9ob21lX2RpcigpKTsKIH0KIAotYm9vbCBjcmVhdGVTeW1ib2xp
Y0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlu
a1BhdGgpCi17Ci0gICAgQ1N0cmluZyB0YXJnZXRQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24odGFyZ2V0UGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHRhcmdl
dFBhdGhGU1JlcCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgc3ltYm9s
aWNMaW5rUGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1Bh
dGgpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoRlNSZXAp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN5bWxpbmsodGFyZ2V0UGF0
aEZTUmVwLmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSk7Ci19Ci0KIFN0cmlu
ZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8gZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0yNzcsMjEgKzIzMCw2IEBA
IFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KGJhc2VOYW1lLmdldCgpKTsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVl
U3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewotICAgIGF1
dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKCF2
YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZp
bGVuYW1lLmRhdGEoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0
R1JlZihnX2ZpbGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRS
SUJVVEVfRklMRVNZU1RFTV9GUkVFLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgaWYgKCFmaWxl
SW5mbykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZnJlZVNwYWNlID0gZ19maWxlX2lu
Zm9fZ2V0X2F0dHJpYnV0ZV91aW50NjQoZmlsZUluZm8uZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVf
RklMRVNZU1RFTV9GUkVFKTsKLSAgICByZXR1cm4gISFmcmVlU3BhY2U7Ci19Ci0KIFN0cmluZyBk
aXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvIGZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtNDI4LDYyICszNjYsNiBAQCBpbnQg
cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCiAgICAgcmV0dXJuIC0xOwogfQogCi1ib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYg
b2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewotICAgIGF1dG8gb2xkRmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ob2xkUGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJl
c2VudGF0aW9uKG9sZEZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBuZXdGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKLSAgICBp
ZiAoIXZhbGlkUmVwcmVzZW50YXRpb24obmV3RmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBvbGRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgob2xkRmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gbmV3Rmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG5ld0ZpbGVuYW1lLmRhdGEoKSkpOwot
Ci0gICAgcmV0dXJuIGdfZmlsZV9tb3ZlKG9sZEZpbGUuZ2V0KCksIG5ld0ZpbGUuZ2V0KCksIEdf
RklMRV9DT1BZX09WRVJXUklURSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7
Ci19Ci0KLWJvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYg
ZGVzdGluYXRpb24pCi17Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gQ3JlYXRlSGFyZExp
bmsoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIHNvdXJjZS53aWRlQ2hhcmFj
dGVycygpLmRhdGEoKSwgbnVsbHB0cik7Ci0jZWxzZQotICAgIGF1dG8gc291cmNlRmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVz
ZW50YXRpb24oc291cmNlRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGRlc3RpbmF0aW9uRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGlu
YXRpb24pOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbkZpbGVuYW1l
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFsaW5rKHNvdXJjZUZpbGVu
YW1lLmRhdGEoKSwgZGVzdGluYXRpb25GaWxlbmFtZS5kYXRhKCkpOwotI2VuZGlmCi19Ci0KLWJv
b2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3Jt
IGEgY29weSBpbnN0ZWFkLgotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuICEhOjpDb3B5Rmls
ZShzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBUUlVFKTsKLSNlbHNlCi0gICAgYXV0byBzb3VyY2VGaWxlbmFtZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRh
dGlvbihzb3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8g
ZGVzdGluYXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlv
bik7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uRmlsZW5hbWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBzb3VyY2VGaWxlID0g
YWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlRmlsZW5hbWUuZGF0YSgpKSk7Ci0g
ICAgR1JlZlB0cjxHRmlsZT4gZGVzdGluYXRpb25GaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgoZGVzdGluYXRpb25GaWxlbmFtZS5kYXRhKCkpKTsKLSAgICByZXR1cm4gZ19maWxl
X2NvcHkoc291cmNlRmlsZS5nZXQoKSwgZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ09Q
WV9OT05FLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKLSNlbmRpZgotfQot
CiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxl
KQogewogICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3Jf
cGF0aChmc0ZpbGUuZGF0YSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcAppbmRleCA5OWRjYmYyM2U5MGYwYWUxMzQyMWNhMGJiM2UyOTBjMjk1Y2YxMjk3Li5iZmU4
ZmFiYjZiZmM2NzBlNGVlNGIzMGQ4YjNjNDhlNDc5ZGM1ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTQ5LDM2ICs0OSw2IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwgewogCi1ib29sIGZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOwotCi0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBhY2Nlc3MoZnNSZXAuZGF0YSgp
LCBGX09LKSAhPSAtMTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwot
Ci0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJGaWxlIGZhaWxlZCB0byBkZWxldGUuIEZhaWxlZCB0byBnZXQgZmls
ZXN5c3RlbSByZXByZXNlbnRhdGlvbiB0byBjcmVhdGUgQ1N0cmluZyBmcm9tIGNmU3RyaW5nIG9y
IGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gaXMgYSBudWxsIHZhbHVlIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyB1bmxpbmsoLi4uKSByZXR1cm5zIDAgb24gc3Vj
Y2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9uLXplcm8gaW4gYW55IG90aGVyIGNh
c2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9yIG5vbi1leGlzdGVudCBmaWxlKQot
ICAgIGJvb2wgdW5saW5rZWQgPSAhdW5saW5rKGZzUmVwLmRhdGEoKSk7Ci0gICAgaWYgKCF1bmxp
bmtlZCAmJiBlcnJubyAhPSBFTk9FTlQpCi0gICAgICAgIExPR19FUlJPUigiRmlsZSBmYWlsZWQg
dG8gZGVsZXRlLiBFcnJvciBtZXNzYWdlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0KLSAgICBy
ZXR1cm4gdW5saW5rZWQ7Ci19Ci0KIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiBwZXJt
aXNzaW9uLCBib29sIGZhaWxJZkZpbGVFeGlzdHMpCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE4NiwzNSArMTU2LDYgQEAgYm9vbCB1
bmxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUpCiB9CiAjZW5kaWYKIAotI2lmICFQ
TEFURk9STShNQUMpCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OwotCi0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIHJtZGlyKC4uLikgcmV0dXJucyAwIG9uIHN1
Y2Nlc3NmdWwgZGVsZXRpb24gb2YgdGhlIHBhdGggYW5kIG5vbi16ZXJvIGluIGFueSBvdGhlciBj
YXNlIChpbmNsdWRpbmcgaW52YWxpZCBwZXJtaXNzaW9ucyBvciBub24tZXhpc3RlbnQgZmlsZSkK
LSAgICByZXR1cm4gIXJtZGlyKGZzUmVwLmRhdGEoKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBnZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0KQotewotICAgIENT
dHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAo
IWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc3RydWN0IHN0YXQgZmlsZUluZm87Ci0KLSAgICBpZiAoc3RhdChmc1Jl
cC5kYXRhKCksICZmaWxlSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3Vs
dCA9IGZpbGVJbmZvLnN0X3NpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgZ2V0Rmls
ZVNpemUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nJiByZXN1bHQpCiB7CiAg
ICAgc3RydWN0IHN0YXQgZmlsZUluZm87CkBAIC0zMDAsMTkgKzI0MSw2IEBAIE9wdGlvbmFsPEZp
bGVNZXRhZGF0YT4gZmlsZU1ldGFkYXRhRm9sbG93aW5nU3ltbGlua3MoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIHJldHVybiBmaWxlTWV0YWRhdGFVc2luZ0Z1bmN0aW9uKHBhdGgsICZzdGF0KTsK
IH0KIAotYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBj
b25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCi17Ci0gICAgQ1N0cmluZyB0YXJnZXRQYXRo
RlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCk7Ci0gICAgaWYgKCF0
YXJnZXRQYXRoRlNSZXAuZGF0YSgpIHx8IHRhcmdldFBhdGhGU1JlcC5kYXRhKClbMF0gPT0gJ1ww
JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBzeW1ib2xpY0xpbmtQYXRo
RlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5rUGF0aCk7Ci0gICAg
aWYgKCFzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpIHx8IHN5bWJvbGljTGlua1BhdGhGU1Jl
cC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
ICFzeW1saW5rKHRhcmdldFBhdGhGU1JlcC5kYXRhKCksIHN5bWJvbGljTGlua1BhdGhGU1JlcC5k
YXRhKCkpOwotfQotCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7CiAgICAgaWYgKHBhdGguZW5kc1dp
dGgoJy8nKSkKQEAgLTMyOSwzNSArMjU3LDYgQEAgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudHMoU3RyaW5nVmlldyBwYXRoLCBjb25zdCBWZWN0b3I8U3RyaW5nVmlldz4mIGNvbXAKICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1ib29sIG1ha2VBbGxEaXJlY3Rvcmll
cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmdWxsUGF0aCA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoIWFjY2VzcyhmdWxsUGF0aC5kYXRhKCks
IEZfT0spKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNoYXIqIHAgPSBmdWxsUGF0aC5t
dXRhYmxlRGF0YSgpICsgMTsKLSAgICBpbnQgbGVuZ3RoID0gZnVsbFBhdGgubGVuZ3RoKCk7Ci0K
LSAgICBpZiAocFtsZW5ndGggLSAxXSA9PSAnLycpCi0gICAgICAgIHBbbGVuZ3RoIC0gMV0gPSAn
XDAnOwotICAgIGZvciAoOyAqcDsgKytwKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnLycpIHsKLSAg
ICAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0
YSgpLCBGX09LKSkgewotICAgICAgICAgICAgICAgIGlmIChta2RpcihmdWxsUGF0aC5kYXRhKCks
IFNfSVJXWFUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqcCA9ICcvJzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYWNj
ZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpIHsKLSAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRo
LmRhdGEoKSwgU19JUldYVSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5n
JiBwYXRoKQogewogICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcv
JykgKyAxKTsKQEAgLTQxOSwyOSArMzE4LDYgQEAgQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci1ib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQ
YXRoKQotewotICAgIGF1dG8gb2xkRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
b2xkUGF0aCk7Ci0gICAgaWYgKG9sZEZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KG5ld1BhdGgpOwotICAgIGlmIChuZXdGaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlbmFtZShvbGRGaWxlbmFtZS5kYXRhKCksIG5ld0ZpbGVu
YW1lLmRhdGEoKSkgIT0gLTE7Ci19Ci0KLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0
cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdHZmcyBm
aWxlU3lzdGVtU3RhdDsKLSAgICBpZiAoIXN0YXR2ZnMoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSwgJmZpbGVTeXN0ZW1TdGF0KSkgewotICAgICAgICBmcmVlU3BhY2UgPSBm
aWxlU3lzdGVtU3RhdC5mX2JhdmFpbCAqIGZpbGVTeXN0ZW1TdGF0LmZfZnJzaXplOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBTdHJpbmcgb3Bl
blRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYg
aGFuZGxlLCBjb25zdCBTdHJpbmcmIHN1ZmZpeCkKIHsKICAgICAvLyBGSVhNRTogU3VmZml4IGlz
IG5vdCBzdXBwb3J0ZWQsIGJ1dCBPSyBmb3Igbm93IHNpbmNlIHRoZSBjb2RlIHVzaW5nIGl0IGlz
IG1hY09TLXBvcnQtb25seS4KQEAgLTQ2OCw1MyArMzQ0LDYgQEAgZW5kOgogfQogI2VuZGlmIC8v
ICFQTEFURk9STShDT0NPQSkKIAotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8
fCBkZXN0aW5hdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1
dG8gZnNTb3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBpZiAo
IWZzU291cmNlLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc0Rl
c3RpbmF0aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKLSAgICBp
ZiAoIWZzRGVzdGluYXRpb24uZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gIWxpbmsoZnNTb3VyY2UuZGF0YSgpLCBmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7Ci19Ci0K
LWJvb2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJp
bmcmIGRlc3RpbmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9u
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJm
b3JtIGEgY29weSBpbnN0ZWFkLgotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8IGRlc3RpbmF0
aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc1NvdXJj
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghZnNTb3VyY2Uu
ZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZzRGVzdGluYXRpb24g
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOwotICAgIGlmICghZnNEZXN0
aW5hdGlvbi5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gaGFuZGxl
ID0gb3Blbihmc0Rlc3RpbmF0aW9uLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENM
LCAwNjY2KTsKLSAgICBpZiAoaGFuZGxlID09IC0xKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBib29sIGFwcGVuZFJlc3VsdCA9IGFwcGVuZEZpbGVDb250ZW50c1RvRmlsZUhhbmRsZShz
b3VyY2UsIGhhbmRsZSk7Ci0gICAgY2xvc2UoaGFuZGxlKTsKLQotICAgIC8vIElmIHRoZSBjb3B5
IGZhaWxlZCwgZGVsZXRlIHRoZSB1bnVzYWJsZSBmaWxlLgotICAgIGlmICghYXBwZW5kUmVzdWx0
KQotICAgICAgICB1bmxpbmsoZnNEZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGFw
cGVuZFJlc3VsdDsKLX0KLQogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0
IENTdHJpbmcmIGZzRmlsZSkKIHsKICAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBhMDNmOGE0NjQ0ZWRiOTA3ODFmZTQzOWFmNmMw
Mzc5ZTVhMTJhN2EwLi5mZDU5ZjE5MDNlNmUxZmU4NGQxNThkNTc1YTk2MjllYWI5MDBjOWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0xMDUsMTUgKzEwNSw2IEBAIHN0
YXRpYyB2b2lkIGdldEZpbGVNb2RpZmljYXRpb25UaW1lRnJvbUZpbmREYXRhKGNvbnN0IFdJTjMy
X0ZJTkRfREFUQVcmIGZpbmREYXRhCiAgICAgdGltZSA9IGZpbGVUaW1lLlF1YWRQYXJ0IC8gMTAw
MDAwMDAgLSBrU2Vjb25kc0Zyb21GaWxlVGltZVRvVGltZXQ7CiB9CiAKLWJvb2wgZ2V0RmlsZVNp
emUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHNpemUpCi17Ci0gICAgV0lOMzJfRklO
RF9EQVRBVyBmaW5kRGF0YTsKLSAgICBpZiAoIWdldEZpbmREYXRhKHBhdGgsIGZpbmREYXRhKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGdldEZpbGVTaXplRnJvbUZpbmRE
YXRhKGZpbmREYXRhLCBzaXplKTsKLX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVI
YW5kbGUgZmlsZUhhbmRsZSwgbG9uZyBsb25nJiBzaXplKQogewogICAgIEJZX0hBTkRMRV9GSUxF
X0lORk9STUFUSU9OIGZpbGVJbmZvcm1hdGlvbjsKQEAgLTIyMCwzNiArMjExLDYgQEAgT3B0aW9u
YWw8RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhjb25zdCBTdHJp
bmcmIHBhdGgpCiAgICAgcmV0dXJuIGZpbmREYXRhVG9GaWxlTWV0YWRhdGEoZmluZERhdGEpOwog
fQogCi1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNv
bnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICByZXR1cm4gOjpDcmVhdGVTeW1i
b2xpY0xpbmtXKHN5bWJvbGljTGlua1BhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIHRhcmdl
dFBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIDApOwotfQotCi1ib29sIGZpbGVFeGlzdHMo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZERhdGE7Ci0g
ICAgcmV0dXJuIGdldEZpbmREYXRhKHBhdGgsIGZpbmREYXRhKTsKLX0KLQotYm9vbCBkZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwot
ICAgIHJldHVybiAhIURlbGV0ZUZpbGVXKGZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgp
KTsKLX0KLQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17
Ci0gICAgU3RyaW5nIGZpbGVuYW1lID0gcGF0aDsKLSAgICByZXR1cm4gISFSZW1vdmVEaXJlY3Rv
cnlXKGZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpKTsKLX0KLQotYm9vbCBtb3ZlRmls
ZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICBT
dHJpbmcgb2xkRmlsZW5hbWUgPSBvbGRQYXRoOwotICAgIFN0cmluZyBuZXdGaWxlbmFtZSA9IG5l
d1BhdGg7Ci0gICAgcmV0dXJuICEhOjpNb3ZlRmlsZUV4KG9sZEZpbGVuYW1lLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBuZXdGaWxlbmFtZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgTU9WRUZJ
TEVfQ09QWV9BTExPV0VEIHwgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORyk7Ci19Ci0KIFN0cmlu
ZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGNvbXBvbmVudCkKIHsKICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CkBA
IC0yOTEsMTkgKzI1Miw2IEBAIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0
IFN0cmluZyYgcGF0aCkKIAogI2VuZGlmIC8vICFVU0UoQ0YpCiAKLWJvb2wgbWFrZUFsbERpcmVj
dG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRo
OwotICAgIGlmIChTSENyZWF0ZURpcmVjdG9yeUV4KG51bGxwdHIsIGZ1bGxQYXRoLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKSAhPSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIERX
T1JEIGVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBFUlJPUl9G
SUxFX0VYSVNUUyAmJiBlcnJvciAhPSBFUlJPUl9BTFJFQURZX0VYSVNUUykgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHBhdGggJXMiLCBwYXRoLmFzY2lpKCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKIHsKICAgICByZXR1
cm4gIiI7CkBAIC01MTQsMjAgKzQ2Miw2IEBAIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihieXRlc1JlYWQpOwogfQogCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYg
c291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBDcmVhdGVI
YXJkTGluayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgc291cmNlLndpZGVD
aGFyYWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZp
bGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0g
ICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0g
ICAgcmV0dXJuICEhOjpDb3B5RmlsZShzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRl
c3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBUUlVFKTsKLX0KLQogU3RyaW5nIGxv
Y2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZFN0
b3JhZ2VEaXJlY3RvcnkoQ1NJRExfTE9DQUxfQVBQREFUQSk7CkBAIC01NTcsMTYgKzQ5MSw2IEBA
IFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNv
bnN0IFN0cmluZyYgZmlsdGVyKQogICAgIHJldHVybiBlbnRyaWVzOwogfQogCi1ib29sIGdldFZv
bHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17
Ci0gICAgVUxBUkdFX0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7Ci0gICAgaWYg
KCFHZXREaXNrRnJlZVNwYWNlRXhXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmcmVl
Qnl0ZXNBdmFpbGFibGVUb0NhbGxlciwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGZyZWVTcGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1
YWRQYXJ0OwotICAgIHJldHVybiB0cnVlOwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxl
RGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIGF1dG8gaGFuZGxlID0gb3Bl
bkZpbGUoZnNGaWxlLmRhdGEoKSwgRmlsZU9wZW5Nb2RlOjpSZWFkKTsKQEAgLTU5NiwyMSArNTIw
LDYgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJv
b2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQot
ewotICAgIFNIRklMRU9QU1RSVUNUIGRlbGV0ZU9wZXJhdGlvbiA9IHsKLSAgICAgICAgbnVsbHB0
ciwKLSAgICAgICAgRk9fREVMRVRFLAotICAgICAgICBkaXJlY3RvcnlQYXRoLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLAotICAgICAgICBMIiIsCi0gICAgICAgIEZPRl9OT0NPTkZJUk1BVElPTiB8
IEZPRl9OT0VSUk9SVUkgfCBGT0ZfU0lMRU5ULAotICAgICAgICBmYWxzZSwKLSAgICAgICAgbnVs
bHB0ciwKLSAgICAgICAgTCIiCi0gICAgfTsKLSAgICByZXR1cm4gIVNIRmlsZU9wZXJhdGlvbigm
ZGVsZXRlT3BlcmF0aW9uKTsKLX0KLQogYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVy
LCBzaXplX3QpCiB7CiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ4YTM5MjI5MzUy
YWNjZWIzZWQ0MWM4ODQyNWIzMDdjM2IwYTZkMjQuLmRjNjQ5OGVjYzRkMzA0NDMwN2Q1Y2YxMmUx
MjU4Yjk0YzAyZjAyM2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVt
IGluIFdURjo6RmlsZVN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKwor
ICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UgZm9yIHRoZSBGaWxlU3lzdGVtIEFQSSB0aGF0
IHdhcyBtb2RpZmllZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVT
eXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBG
aWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6
dGVtcEZpbGVTeW1saW5rUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxl
U3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGggY29uc3Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBFbXB0eUZpbGVQ
YXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpzcGFj
ZUNvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxl
U3lzdGVtVGVzdDo6YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6cXVvdGVDb250YWluaW5nRmlsZVBhdGggY29uc3Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAyMS0wNC0zMCAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjcHldIFN1
cHBvcnQgYXJndW1lbnRzIHRvIFRhc2tQb29sIHNldHVwIGFuZCB0ZWFyZG93bgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCA4ZjY1MWQzZWFlMzQz
Mjk3NTFhYzM2MWRkN2UwNjRjYjYzN2UzNzUyLi5jMjkzNWQyOTAyZTQ2ZmI4Y2JjYTIyNWQwNmU3
ODYyNWM0ODFmNzJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lz
dGVtLmNwcApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBXVEY6Omlu
aXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLSAgICAgICAgLy8gY3JlYXRlIHRlbXAgZmlsZQorICAg
ICAgICAvLyBjcmVhdGUgdGVtcCBmaWxlLgogICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlOwogICAgICAgICBtX3RlbXBGaWxlUGF0aCA9IEZpbGVTeXN0ZW06Om9w
ZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wVGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lz
dGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3RybGVuKEZpbGVT
eXN0ZW1UZXN0RGF0YSkpOwpAQCAtNTIsNiArNTIsMTggQEAgcHVibGljOgogICAgICAgICBtX3Rl
bXBGaWxlU3ltbGlua1BhdGggPSAidGVtcFRlc3RGaWxlLXN5bWxpbmsiOwogICAgICAgICBGaWxl
U3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsobV90ZW1wRmlsZVBhdGgsIG1fdGVtcEZpbGVTeW1s
aW5rUGF0aCk7CiAKKyAgICAgICAgLy8gQ3JlYXRlIHRlbXAgZGlyZWN0b3J5LgorICAgICAgICBG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgdGVtcG9yYXJ5RmlsZTsKKyAgICAgICAgbV90
ZW1wRW1wdHlGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBF
bXB0eUZvbGRlciIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1w
RW1wdHlGb2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVz
KG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisKKyAgICAgICAgbV90ZW1wRW1wdHlGb2xkZXJTeW1s
aW5rUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlGb2xkZXIt
c3ltbGluayIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUo
dGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1w
dHlGb2xkZXJTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGlj
TGluayhtX3RlbXBFbXB0eUZvbGRlclBhdGgsIG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgp
OworCiAgICAgICAgIG1fdGVtcEVtcHR5RmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9y
YXJ5RmlsZSgidGVtcEVtcHR5VGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoaGFuZGxlKTsKIApAQCAtNjksMjIgKzgxLDI4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRmlsZVBhdGgpOwogICAgICAg
ICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7CisgICAgICAg
IEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7
CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJTeW1saW5r
UGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGaWxlUGF0
aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zcGFjZUNvbnRhaW5pbmdGaWxl
UGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9iYW5nQ29udGFpbmluZ0Zp
bGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3F1b3RlQ29udGFpbmlu
Z0ZpbGVQYXRoKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRlbXBGaWxlUGF0aCgpIHsg
cmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVN5bWxp
bmtQYXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVN5bWxpbmtQYXRoOyB9Ci0gICAgY29uc3QgU3Ry
aW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0K
LSAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9z
cGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5p
bmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNv
bnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX3F1b3RlQ29u
dGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3RlbXBGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEZpbGVT
eW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEZpbGVTeW1saW5rUGF0aDsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVt
cEVtcHR5Rm9sZGVyUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyU3lt
bGlua1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoOyB9
CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGVtcEVtcHR5RmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0Zp
bGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAg
IGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWlu
aW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9
CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVQYXRoOwogICAgIFN0cmluZyBtX3Rl
bXBGaWxlU3ltbGlua1BhdGg7CisgICAgU3RyaW5nIG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsKKyAg
ICBTdHJpbmcgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aDsKICAgICBTdHJpbmcgbV90ZW1w
RW1wdHlGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsKICAg
ICBTdHJpbmcgbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOwpAQCAtMTc2LDQgKzE5NCwyNDYgQEAg
VEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVOb25FbXB0eURpcmVjdG9yeSkKICAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wb3JhcnlUZXN0Rm9sZGVyKSk7CiB9
CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUV4aXN0cykKK3sKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBh
dGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2Vz
LW5vdC1leGlzdCJfcykpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVTeW1s
aW5rKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxl
U3ltbGlua1BhdGgoKSkpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmls
ZSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKworICAgIC8vIFNob3VsZCBoYXZlIGRlbGV0ZWQg
dGhlIHN5bWxpbmsgYnV0IG5vdCB0aGUgdGFyZ2V0IGZpbGUuCisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworfQorCitURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0ZUZpbGUpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxl
U3lzdGVtVGVzdCwgZGVsZXRlRW1wdHlEaXJlY3RvcnkpCit7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRo
KCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlG
b2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlE
aXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVt
VGVzdCwgbW92ZUZpbGUpCit7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IHRlbXBGaWxlUGF0aCgp
ICsgIi1tb3ZlZCI7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGRl
c3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6bW92ZUZpbGUodGVtcEZp
bGVQYXRoKCksIGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKGRlc3RpbmF0aW9uKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06Om1v
dmVGaWxlKHRlbXBGaWxlUGF0aCgpLCBkZXN0aW5hdGlvbikpOworfQorCitURVNUX0YoRmlsZVN5
c3RlbVRlc3QsIG1vdmVGaWxlT3ZlcndyaXRlc0Rlc3RpbmF0aW9uKQoreworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKworICAg
IGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0
RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVT
aXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRlbXBF
bXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX1RSVUUoIWZpbGVTaXplKTsK
KworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCB0
ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGZpbGVTaXplID0gMDsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRW1wdHlGaWxlUGF0aCgpLCBm
aWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7Cit9CisKK1RFU1RfRihGaWxl
U3lzdGVtVGVzdCwgZ2V0RmlsZVNpemUpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
OmZpbGVFeGlzdHModGVtcEVtcHR5RmlsZVBhdGgoKSkpOworCisgICAgbG9uZyBsb25nIGZpbGVT
aXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmls
ZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBhdGgoKSwg
ZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRSghZmlsZVNpemUpOworCisgICAgZmlsZVNpemUg
PSAwOworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlz
dCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGZpbGVUaGF0
RG9lc05vdEV4aXN0LCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxlU2l6ZSk7Cit9
CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUlzRGlyZWN0b3J5KQoreworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCks
IEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclBhdGgoKSwg
RmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisKKyAgICBhdXRv
IGZvbGRlclN5bWxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YSh0ZW1wRW1w
dHlGb2xkZXJTeW1saW5rUGF0aCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIWZvbGRlclN5bWxpbmtN
ZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKGZvbGRlclN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmls
ZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgoKSwgRmlsZVN5
c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShG
aWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgoKSwg
RmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisKKyAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlUGF0aCgpLCBGaWxl
U3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEZpbGVQYXRoKCksIEZpbGVTeXN0ZW06
OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgYXV0byBmaWxlU3ltbGlu
a01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgo
KSk7CisgICAgRVhQRUNUX1RSVUUoISFmaWxlU3ltbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1Rf
RVEoZmlsZVN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xp
Y0xpbmspOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVt
cEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
OjpObykpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVt
cEZpbGVTeW1saW5rUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
OjpZZXMpKTsKKworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5v
dC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9y
eShmaWxlVGhhdERvZXNOb3RFeGlzdCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5
KGZpbGVUaGF0RG9lc05vdEV4aXN0LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzOjpZZXMpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBtYWtlQWxsRGlyZWN0b3Jp
ZXMpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlG
b2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rv
cnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xp
Y0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3Rv
cmllcyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBTdHJpbmcgc3ViRm9sZGVyUGF0aCA9
IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHModGVtcEVtcHR5Rm9sZGVyUGF0
aCgpLCB7ICJzdWJGb2xkZXIxIiwgInN1YkZvbGRlcjIiLCAic3ViRm9sZGVyMyIgfSk7CisgICAg
RVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhzdWJGb2xkZXJQYXRo
KSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdWJGb2xkZXJQYXRo
KSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHN1YkZvbGRl
clBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkodGVtcEVtcHR5
Rm9sZGVyUGF0aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
c3ViRm9sZGVyUGF0aCkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGdldFZvbHVtZUZy
ZWVTcGFjZSkKK3sKKyAgICB1aW50NjRfdCBmcmVlU3BhY2UgPSAwOworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmdldFZvbHVtZUZyZWVTcGFjZSh0ZW1wRmlsZVBhdGgoKSwgZnJlZVNwYWNl
KSk7CisgICAgRVhQRUNUX0dUKGZyZWVTcGFjZSwgMFUpOworCisgICAgU3RyaW5nIGZpbGVUaGF0
RG9lc05vdEV4aXN0ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRlbXBF
bXB0eUZvbGRlclBhdGgoKSwgImRvZXMtbm90LWV4aXN0Il9zKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
RmlsZVN5c3RlbTo6Z2V0Vm9sdW1lRnJlZVNwYWNlKGZpbGVUaGF0RG9lc05vdEV4aXN0LCBmcmVl
U3BhY2UpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmsp
Cit7CisgICAgYXV0byBzeW1saW5rUGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1zeW1saW5rIjsK
KyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOwor
ICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayh0ZW1wRmlsZVBh
dGgoKSwgc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKHN5bWxpbmtQYXRoKSk7CisKKyAgICBhdXRvIHN5bWxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0
ZW06OmZpbGVNZXRhZGF0YShzeW1saW5rUGF0aCk7CisgICAgRVhQRUNUX1RSVUUoISFzeW1saW5r
TWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShzeW1saW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRh
ZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHModGVtcEZpbGVQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBj
cmVhdGVTeW1ib2xpY0xpbmtGb2xkZXIpCit7CisgICAgYXV0byBzeW1saW5rUGF0aCA9IHRlbXBF
bXB0eUZvbGRlclBhdGgoKSArICItc3ltbGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpjcmVhdGVTeW1ib2xpY0xpbmsodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBzeW1saW5rUGF0aCkp
OworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsK
KworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHN5
bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQ
RUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xp
Y0xpbmspOworCisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShz
eW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnkoc3ltbGlua1BhdGgs
IEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzeW1saW5rUGF0aCkpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKK30K
KworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGaWxlRG9lc05vdEV4
aXN0KQoreworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1l
eGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVRo
YXREb2VzTm90RXhpc3QpKTsKKworICAgIGF1dG8gc3ltbGlua1BhdGggPSBmaWxlVGhhdERvZXNO
b3RFeGlzdCArICItc3ltbGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVT
eW1ib2xpY0xpbmsoZmlsZVRoYXREb2VzTm90RXhpc3QsIHN5bWxpbmtQYXRoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKK30KKworVEVT
VF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVIYXJkTGluaykKK3sKKyAgICBhdXRvIGhhcmRsaW5r
UGF0aCA9IHRlbXBGaWxlUGF0aCgpICsgIi1oYXJkbGluayI7CisgICAgRVhQRUNUX0ZBTFNFKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgZmls
ZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRlbXBG
aWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7CisKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpoYXJkTGluayh0ZW1wRmlsZVBhdGgoKSwgaGFyZGxp
bmtQYXRoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRs
aW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUp
KTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CisKKyAgICBhdXRvIGhh
cmRsaW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEoaGFyZGxpbmtQYXRoKTsK
KyAgICBFWFBFQ1RfVFJVRSghIWhhcmRsaW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShoYXJk
bGlua01ldGFkYXRhLT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOworCisgICAgRVhQ
RUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVY
UEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAg
IGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNp
emUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVT
aXplLCBmaWxlU2l6ZSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgY3JlYXRlSGFyZExp
bmtPckNvcHlGaWxlKQoreworICAgIGF1dG8gaGFyZGxpbmtQYXRoID0gdGVtcEZpbGVQYXRoKCkg
KyAiLWhhcmRsaW5rIjsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyho
YXJkbGlua1BhdGgpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZpbGVTaXplKSk7
CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0
ZW06OmhhcmRMaW5rT3JDb3B5RmlsZSh0ZW1wRmlsZVBhdGgoKSwgaGFyZGxpbmtQYXRoKSk7CisK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOwor
CisgICAgbG9uZyBsb25nIGxpbmtGaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQYXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBF
Q1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6ZSk7CisKKyAgICBhdXRvIGhhcmRsaW5rTWV0YWRh
dGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEoaGFyZGxpbmtQYXRoKTsKKyAgICBFWFBFQ1Rf
VFJVRSghIWhhcmRsaW5rTWV0YWRhdGEpOworICAgIEVYUEVDVF9FUShoYXJkbGlua01ldGFkYXRh
LT50eXBlLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOworCisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxpbmtGaWxlU2l6
ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUoaGFyZGxpbmtQ
YXRoLCBsaW5rRmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfRVEobGlua0ZpbGVTaXplLCBmaWxlU2l6
ZSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427511</attachid>
            <date>2021-05-01 13:47:37 -0700</date>
            <delta_ts>2021-05-01 14:00:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210501134737.patch</filename>
            <type>text/plain</type>
            <size>46748</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li40ZjZjOGIzMjc5Y2QwOGFl
N2EyNDA4ZTZhNDc0OGEzZDVjM2M0NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5l
eHBvcnQgc29tZSBzeW1ib2xzIHRvIGZpeCBidWlsZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOgorCiAyMDIxLTA0LTI5ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIElubGluaW5nIHByb3BlcnR5IGFjY2Vzc2Vz
IGluc2lkZSBjb25zdGFudCBmb2xkaW5nIHNob3VsZCBjaGVjayBPcHRpb25zOjp1c2VBY2Nlc3NJ
bmxpbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA5ZjQ1MTZmMjM0NzlhNDczYmU0MTBiYTk5N2Y2MWFiMzJkMDBhNTY3Li4x
M2YwOTRmNTZlMWQ1YTEyOTQxZjY0M2ZkMjAzYTNlYTUwM2JkYzNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDIxLTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RhcnQgbGV2ZXJhZ2luZyBzdGQ6OmZpbGVzeXN0ZW0gaW4gV1RGOjpGaWxlU3lzdGVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUyNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIFN0YXJ0IGxldmVyYWdp
bmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5c3RlbSB0byByZWR1Y2UgdGhlIGFtb3Vu
dCBvZgorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLgorCisgICAgICAgICogd3RmL0Zp
bGVTeXN0ZW0uY3BwOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZmlsZUV4aXN0cyk6
CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpkZWxldGVGaWxlKToKKyAgICAgICAgKFdU
Rjo6RmlsZVN5c3RlbUltcGw6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6Om1vdmVGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
OmdldEZpbGVTaXplKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVJc0RpcmVj
dG9yeSk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjptYWtlQWxsRGlyZWN0b3JpZXMp
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6Z2V0Vm9sdW1lRnJlZVNwYWNlKToKKyAg
ICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmNyZWF0ZVN5bWJvbGljTGluayk6CisgICAgICAg
IChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpoYXJkTGluayk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0
ZW1JbXBsOjpoYXJkTGlua09yQ29weUZpbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1w
bDo6ZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkpOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6
CisgICAgICAgICogd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbToKKyAgICAgICAgKFdURjo6
RmlsZVN5c3RlbUltcGw6OmNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSk6CisgICAgICAgICogd3Rm
L2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVt
UE9TSVguY3BwOgorICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisKIDIwMjEt
MDQtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE9wdGltaXpl
IFNvcnRlZEFycmF5TWFwIGJ5IHVzaW5nIGxpbmVhciBzZWFyY2ggZm9yIHNtYWxsIGFycmF5cwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0phdmFTY3Jp
cHRDb3JlLnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ph
dmFTY3JpcHRDb3JlLnhjY29uZmlnCmluZGV4IDk2ZDExYzZlYzMzZmZjZTNhNzM2MTk1NzBlZTM2
ZDk0ZDEwNWZhMjUuLmM0YjRkNjYzODVkNTBiZjE0MWRjMmU0MmY1ZTBhZDcxZTJjNmNjN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZhU2NyaXB0
Q29yZS54Y2NvbmZpZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMv
SmF2YVNjcmlwdENvcmUueGNjb25maWcKQEAgLTI3LDcgKzI3LDcgQEAgREVGSU5FU19NT0RVTEUg
PSBZRVM7CiBNT0RVTEVNQVBfRklMRSA9ICQoU1JDUk9PVCkvSmF2YVNjcmlwdENvcmUubW9kdWxl
bWFwOwogCiAvLyBQcmV2ZW50IEMrKyBzdGFuZGFyZCBsaWJyYXJ5IG9wZXJhdG9yIG5ldywgZGVs
ZXRlIGFuZCB0aGVpciByZWxhdGVkIGV4Y2VwdGlvbiB0eXBlcyBmcm9tIGJlaW5nIGV4cG9ydGVk
IGFzIHdlYWsgc3ltYm9scy4KLU9USEVSX0xERkxBR1NfSElERV9TWU1CT0xTID0gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWJhZF9hbGxvYyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9f
WlRJU3Q5ZXhjZXB0aW9uIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDliYWRfYWxsb2Mg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUU1N0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sLF9fWmRsUHZTXyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWm53bVB2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTktTdDNfXzE4ZnVuY3Rpb25JRnZ2RUVjbEV2IC1XbCwtdW5leHBv
cnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMxRU9TMl8gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFQzJFT1MyXyAtV2wsLXVuZXhwb3J0
ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRv
ckVQTlMxXzEwUmVnaXN0ZXJJREVFRWNsRVMzX1M1XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9f
Wk5TdDNfXzE4ZnVuY3Rpb25JRnZSTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yRVBOUzFfMTBSZWdp
c3RlcklERUVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25J
RnZSTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yRVBOUzFfMTBSZWdpc3RlcklERUVFRDJFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMUV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUQyRXYgLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pUVk5TdDNfXzExN2JhZF9mdW5jdGlvbl9jYWxsRTsKK09USEVSX0xERkxB
R1NfSElERV9TWU1CT0xTID0gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWJhZF9hbGxv
YyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRJU3Q5ZXhjZXB0aW9uIC1XbCwtdW5leHBvcnRl
ZF9zeW1ib2wsX19aVFNTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUU1N0
OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWmRsUHZTXyAtV2wsLXVuZXhwb3J0
ZWRfc3ltYm9sLF9fWm53bVB2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTktTdDNfXzE4ZnVu
Y3Rpb25JRnZ2RUVjbEV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlv
bklGdnZFRUMxRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9u
SUZ2dkVFQzJFT1MyXyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9u
SUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRWNsRVMzX1M1
XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZSTjNKU0MxN0J5
dGVjb2RlR2VuZXJhdG9yRVBOUzFfMTBSZWdpc3RlcklERUVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZSTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yRVBO
UzFfMTBSZWdpc3RlcklERUVFRDJFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVEMUV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5j
dGlvbklGdnZFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUVk5TdDNfXzExN2JhZF9m
dW5jdGlvbl9jYWxsRSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmls
ZXN5c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2FycmF5SVBLY1M0X2NMYjFFRTExX19yYW5nZV9l
bmRFUzRfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMTRfX2ZzMTBmaWxlc3lzdGVt
MjRfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXlJUEtjUzRfY0xiMUVFMTNfX3JhbmdlX2JlZ2luRVM0
XyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5c3RlbThfUGF0
aENWVEljRTE0X19hcHBlbmRfcmFuZ2VJUEtjRUVOU185ZW5hYmxlX2lmSVhzcjI3X19pc19jcHAx
N19mb3J3YXJkX2l0ZXJhdG9ySVRfRUU1dmFsdWVFdkU0dHlwZUVSTlNfMTJiYXNpY19zdHJpbmdJ
Y05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVM4X1M4XyAtV2wsLXVuZXhw
b3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5c3RlbThfUGF0aENWVEljRTE1X19h
cHBlbmRfc291cmNlSVBLY0VFdlJOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0lj
RUVOU185YWxsb2NhdG9ySWNFRUVFUktUXyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNf
XzE0X19mczEwZmlsZXN5c3RlbThfUGF0aENWVEljRTE0X19hcHBlbmRfcmFuZ2VJUEtjRUVOU185
ZW5hYmxlX2lmSVhzcjIxX19pc19mb3J3YXJkX2l0ZXJhdG9ySVRfRUU1dmFsdWVFdkU0dHlwZUVS
TlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVF
RVM4X1M4XzsKIAogT1RIRVJfTERGTEFHU19CQVNFID0gJChPVEhFUl9MREZMQUdTX0hJREVfU1lN
Qk9MUykgLWZvcmNlX2xvYWQgIiQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9K
YXZhU2NyaXB0Q29yZS9saWJXVEYuYSI7CiBPVEhFUl9MREZMQUdTW3Nkaz1lbWJlZGRlZCpdID0g
JChpbmhlcml0ZWQpICQoT1RIRVJfTERGTEFHU19CQVNFKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKaW5k
ZXggYmRmOTAyYTZiZDBhY2QwZTFiZTc1ZTlmNzY4OWNjMDJjZDYzZGU1Ny4uNDY0MTFhMWNmNjBk
ZTk5NThjYTM2MzY4ZWYxNzc0N2EwODVlNzNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
RmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvRmlsZU1ldGFkYXRhLmg+CiAjaW5jbHVkZSA8d3Rm
L0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRG
aWxlc3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtMzgyLDE0ICszODMsNiBAQCB2b2lkIHVubG9j
a0FuZENsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogICAgIGNsb3NlRmlsZSho
YW5kbGUpOwogfQogCi1ib29sIGZpbGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKLXsKLSAg
ICBhdXRvIG1ldGFkYXRhID0gc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzOjpZZXMgPyBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhwYXRo
KSA6IGZpbGVNZXRhZGF0YShwYXRoKTsKLSAgICBpZiAoIW1ldGFkYXRhKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRh
dGE6OlR5cGU6OkRpcmVjdG9yeTsKLX0KLQogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogYm9v
bCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJikKIHsKQEAgLTQwOCwy
MCArNDAxLDYgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeVppcEFyY2hpdmUoY29uc3QgU3RyaW5n
JikKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhT1MoV0lORE9XUykKLWJv
b2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1
dG8gZW50cmllcyA9IGxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOwotICAgIGZvciAoYXV0byYg
ZW50cnkgOiBlbnRyaWVzKSB7Ci0gICAgICAgIGlmIChmaWxlSXNEaXJlY3RvcnkoZW50cnksIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKLSAgICAgICAgICAgIGRlbGV0ZU5vbkVtcHR5
RGlyZWN0b3J5KGVudHJ5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlRmlsZShl
bnRyeSk7Ci0gICAgfQotICAgIHJldHVybiBkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKLX0K
LSNlbmRpZgotCiBNYXBwZWRGaWxlRGF0YSBtYXBUb0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBz
aXplX3QgYnl0ZXNTaXplLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
dWludDhfdCosIHNpemVfdCk+Jik+JiYgYXBwbHksIFBsYXRmb3JtRmlsZUhhbmRsZSogb3V0cHV0
SGFuZGxlKQogewogICAgIGNvbnN0ZXhwciBib29sIGZhaWxJZkZpbGVFeGlzdHMgPSB0cnVlOwpA
QCAtNTA0LDUgKzQ4MywxMDkgQEAgT3B0aW9uYWw8U2FsdD4gcmVhZE9yTWFrZVNhbHQoY29uc3Qg
U3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBzYWx0OwogfQogCitib29sIGZpbGVFeGlzdHMoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICAvLyBleGlz
dHMoKSByZXR1cm5zIGZhbHNlIG9uIGVycm9yIHNvIG5vIG5lZWQgdG8gY2hlY2sgZWMuCisgICAg
cmV0dXJuIHN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3RzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKS5kYXRhKCksIGVjKTsKK30KKworYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgLy8gcmVtb3ZlKCkgcmV0dXJucyBm
YWxzZSBvbiBlcnJvciBzbyBubyBuZWVkIHRvIGNoZWNrIGVjLgorICAgIHJldHVybiBzdGQ6OmZp
bGVzeXN0ZW06OnJlbW92ZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBl
Yyk7Cit9CisKKy8vIFdlIGN1cnJlbnRseSB1c2UgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24g
b24gbWFjT1MgdG8gZGVhbCB3aXRoIC5EU19TdG9yZSBmaWxlcyB0aGF0IG1heSBiZSBwcmVzZW50
IGluIG90aGVyd2lzZSBlbXB0eSBkaXJlY3Rvcmllcy4KKyNpZiAhUExBVEZPUk0oTUFDKQorYm9v
bCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjpl
cnJvcl9jb2RlIGVjOworICAgIC8vIHJlbW92ZSgpIHJldHVybnMgZmFsc2Ugb24gZXJyb3Igc28g
bm8gbmVlZCB0byBjaGVjayBlYy4KKyAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjpyZW1vdmUo
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworfQorI2VuZGlmCisK
K2Jvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1Bh
dGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cmVu
YW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihuZXdQYXRoKS5kYXRhKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOworfQor
Citib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQp
Cit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIGF1dG8gc2l6ZSA9IHN0ZDo6ZmlsZXN5
c3RlbTo6ZmlsZV9zaXplKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzaXpl
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIGZpbGVJc0RpcmVjdG9yeShjb25zdCBTdHJp
bmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rcykKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgc3RkOjpmaWxlc3lzdGVtOjpm
aWxlX3N0YXR1cyBmaWxlU3RhdHVzOworICAgIGlmIChzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
ID09IFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykKKyAgICAgICAgZmlsZVN0YXR1cyA9
IHN0ZDo6ZmlsZXN5c3RlbTo6c3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIGZpbGVTdGF0dXMgPSBzdGQ6OmZpbGVzeXN0
ZW06OnN5bWxpbmtfc3RhdHVzKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCks
IGVjKTsKKyAgICByZXR1cm4gZmlsZVN0YXR1cy50eXBlKCkgPT0gc3RkOjpmaWxlc3lzdGVtOjpm
aWxlX3R5cGU6OmRpcmVjdG9yeTsKK30KKworYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBzdGQ6OmZpbGVz
eXN0ZW06OmNyZWF0ZV9kaXJlY3RvcmllcyhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRWb2x1bWVGcmVlU3Bh
Y2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQoreworICAgIHN0ZDo6
ZXJyb3JfY29kZSBlYzsKKyAgICBhdXRvIHNwYWNlSW5mbyA9IHN0ZDo6ZmlsZXN5c3RlbTo6c3Bh
Y2UoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIGlmIChl
YykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZyZWVTcGFjZSA9IHNwYWNlSW5mby5hdmFp
bGFibGU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY3JlYXRlU3ltYm9saWNMaW5rKGNv
bnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBzeW1ib2xpY0xpbmtQYXRoKQor
eworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OmNyZWF0ZV9z
eW1saW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoKS5kYXRhKCksIGVjKTsKKyAgICBy
ZXR1cm4gIWVjOworfQorCitib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwg
Y29uc3QgU3RyaW5nJiBsaW5rUGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAg
c3RkOjpmaWxlc3lzdGVtOjpjcmVhdGVfaGFyZF9saW5rKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bih0YXJnZXRQYXRoKS5kYXRhKCksIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihsaW5rUGF0aCku
ZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBoYXJkTGlua09yQ29weUZp
bGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKQorewor
ICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBmc1RhcmdldFBhdGggPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBm
c0xpbmtQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGxpbmtQYXRoKS5kYXRhKCk7CisK
KyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgc3RkOjpmaWxlc3lzdGVtOjpjcmVhdGVfaGFy
ZF9saW5rKGZzVGFyZ2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIGlmICghZWMpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgc3RkOjpmaWxlc3lzdGVtOjpjb3B5X2ZpbGUoZnNUYXJn
ZXRQYXRoLCBmc0xpbmtQYXRoLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBkZWxl
dGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJv
cl9jb2RlIGVjOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cmVtb3ZlX2FsbChmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKwogfSAv
LyBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oIGIvU291cmNlL1dURi93dGYvRmlsZVN5c3Rl
bS5oCmluZGV4IDlhOWQ5Y2EwNmUyZTNjYmVmNDJlZGY2NWVlMDNkOGM1ZTg4YWNiYzkuLmY2YzQz
YTU4M2EwN2Y4YTg5YzIwMzEwZDk4YzQ3OTg5YTI3NTEyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKQEAg
LTE2Niw5ICsxNjYsOSBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tBbmRDbG9zZUZp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlKTsKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd3JpdGUgd2Fz
IHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGl0IHdhcyBub3QuCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBhcHBlbmRGaWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBQbGF0
Zm9ybUZpbGVIYW5kbGUmKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFyZExpbmsoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pOworV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBT
dHJpbmcmIGxpbmtQYXRoKTsKIC8vIEhhcmQgbGlua3MgYSBmaWxlIGlmIHBvc3NpYmxlLCBjb3Bp
ZXMgaXQgaWYgbm90LgotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFyZExpbmtPckNvcHlGaWxl
KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHRhcmdl
dFBhdGgsIGNvbnN0IFN0cmluZyYgbGlua1BhdGgpOwogCiAjaWYgVVNFKEZJTEVfTE9DSykKIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgT3B0aW9u
U2V0PEZpbGVMb2NrTW9kZT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1K
U0NPbmx5LmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlCmluZGV4
IDY1ZGU2NTk0ZDI1ZWVkNTBjODNkYzhmNWY4MDA5OTUxMjJmZGY3YjQuLjVkY2ViZGYzMDY1MzA3
ZGZhOTU5MDU2ZWFkOTFmZTg0ZDM2MDU3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtSlNDT25seS5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHku
Y21ha2UKQEAgLTE1OSwzICsxNTksMTUgQEAgZW5kaWYgKCkKIGxpc3QoQVBQRU5EIFdURl9MSUJS
QVJJRVMKICAgICBUaHJlYWRzOjpUaHJlYWRzCiApCisKK2lmIChDT01QSUxFUl9JU19HQ0NfT1Jf
Q0xBTkcpCisgICAgaWYgKENPTVBJTEVSX0lTX0NMQU5HKQorICAgICAgICBsaXN0KEFQUEVORCBX
VEZfTElCUkFSSUVTCisgICAgICAgICAgICBjKytmcworICAgICAgICApCisgICAgZWxzZSAoKQor
ICAgICAgICBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCisgICAgICAgICAgICBzdGRjKytmcwor
ICAgICAgICApCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxl
U3lzdGVtQ29jb2EubW0KaW5kZXggMWNjZTE3ZGM1OWUyMzNjNmE1ODAwMWUxYjZjOTA4ZTg0NWE3
YzkwNi4uYzg1MzdlYTE3M2U5OWJhYmRlN2Y3OGM5ZDNjZGM4M2MxZTNhMzVjZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbQpAQCAtMTI2LDI5ICsxMjYsNiBAQCBTdHJp
bmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhh
bmRsZSYgcGxhdGZvcm1GaWxlSAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBvcmFy
eUZpbGVQYXRoLmRhdGEoKSk7CiB9CiAKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQ
YXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgLy8gT3ZlcndyaXRlIGV4aXN0aW5n
IGZpbGVzLgotICAgIGF1dG8gbWFuYWdlciA9IGFkb3B0TlMoW1tOU0ZpbGVNYW5hZ2VyIGFsbG9j
XSBpbml0XSk7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXVEZXZWJGaWxlTWFuYWdl
ckRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgW21hbmFnZXIgc2V0RGVsZWdhdGU6ZGVsZWdh
dGUuZ2V0KCldOwotCi0gICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gW21hbmFnZXIgbW92ZUl0ZW1BdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOm9sZFBhdGhd
IHRvVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6bmV3UGF0aF0gZXJyb3I6JmVycm9yXTsKLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIE5TTG9nKEAiRXJyb3IgaW4gbW92ZUZpbGU6ICVAIiwg
ZXJyb3IpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIGdldFZvbHVtZUZyZWVTcGFj
ZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0gICAgTlNEaWN0
aW9uYXJ5ICpmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25hcnkgPSBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkZpbGVTeXN0ZW1Gb3JQYXRoOihOU1N0cmluZyAq
KXBhdGggZXJyb3I6TlVMTF07Ci0gICAgaWYgKCFmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25h
cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmVlU3BhY2UgPSBbW2ZpbGVTeXN0ZW1B
dHRyaWJ1dGVzRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNGaWxlU3lzdGVtRnJlZVNpemVdIHVu
c2lnbmVkTG9uZ0xvbmdWYWx1ZV07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE5TU3RyaW5nICpj
cmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoTlNTdHJpbmcgKmRpcmVjdG9yeVByZWZpeCkKIHsKICAg
ICBOU1N0cmluZyAqdGVtcERpcmVjdG9yeSA9IE5TVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CkBAIC0x
NzgsMTEgKzE1NSw2IEBAIE5TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoTlNTdHJp
bmcgKmRpcmVjdG9yeVByZWZpeCkKICAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGguZGF0YSgpIGxl
bmd0aDpsZW5ndGhdOwogfQogCi1ib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSByZW1vdmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6bmlsXTsKLX0KLQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiBib29sIGlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmluZGV4IDY4N2Zh
MTBjMjY3NTM2YzA1OGU3OTI0ZGJlY2I5M2E3MTI0OGY4OTAuLjYzZDVkYWYxYTk5NGZmNzIwY2M5
NDMwM2MxZjNjNTJiYTQ0ZTQwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmls
ZVN5c3RlbUdsaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIu
Y3BwCkBAIC0xMTgsMjQgKzExOCw2IEBAIFN0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiAjZW5kaWYKIH0KIAotYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotICAgIHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfZmls
ZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgR19GSUxFX1RFU1RfRVhJU1RTKSA6IGZhbHNlOwotfQot
Ci1ib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVw
cmVzZW50YXRpb24oZmlsZW5hbWUpID8gZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgpKSAhPSAtMSA6
IGZhbHNlOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OwotICAgIHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfcm1kaXIoZmls
ZW5hbWUuZGF0YSgpKSAhPSAtMSA6IGZhbHNlOwotfQotCiBzdGF0aWMgYm9vbCBnZXRGaWxlU3Rh
dChjb25zdCBTdHJpbmcmIHBhdGgsIEdTdGF0QnVmKiBzdGF0QnVmZmVyKQogewogICAgIGF1dG8g
ZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0xNTQsMTYgKzEz
Niw2IEBAIHN0YXRpYyBib29sIGdldEZpbGVMU3RhdChjb25zdCBTdHJpbmcmIHBhdGgsIEdTdGF0
QnVmKiBzdGF0QnVmZmVyKQogICAgIHJldHVybiBnX2xzdGF0KGZpbGVuYW1lLmRhdGEoKSwgc3Rh
dEJ1ZmZlcikgIT0gLTE7CiB9CiAKLWJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCi17Ci0gICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKLSAg
ICBpZiAoIWdldEZpbGVTdGF0KHBhdGgsICZzdGF0UmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBs
b25nIGxvbmcmIHJlc3VsdFNpemUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZUluZm8+IGluZm8gPSBh
ZG9wdEdSZWYoZ19maWxlX2lvX3N0cmVhbV9xdWVyeV9pbmZvKGhhbmRsZSwgR19GSUxFX0FUVFJJ
QlVURV9TVEFOREFSRF9TSVpFLCBudWxscHRyLCBudWxscHRyKSk7CkBAIC0yNDMsMzAgKzIxNSwx
MSBAQCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNv
bnN0IFZlY3RvcjxTdHJpbmdWaWV3PiYgY29tcAogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7CiB9CiAKLWJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsK
LSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAg
IHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfbWtkaXJfd2l0aF9wYXJl
bnRzKGZpbGVuYW1lLmRhdGEoKSwgU19JUldYVSkgIT0gLTEgOiBmYWxzZTsKLX0KLQogU3RyaW5n
IGhvbWVEaXJlY3RvcnlQYXRoKCkKIHsKICAgICByZXR1cm4gc3RyaW5nRnJvbUZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihnX2dldF9ob21lX2RpcigpKTsKIH0KIAotYm9vbCBjcmVhdGVTeW1ib2xp
Y0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlu
a1BhdGgpCi17Ci0gICAgQ1N0cmluZyB0YXJnZXRQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24odGFyZ2V0UGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHRhcmdl
dFBhdGhGU1JlcCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgc3ltYm9s
aWNMaW5rUGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1Bh
dGgpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoRlNSZXAp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN5bWxpbmsodGFyZ2V0UGF0
aEZTUmVwLmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSk7Ci19Ci0KIFN0cmlu
ZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8gZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0yNzcsMjEgKzIzMCw2IEBA
IFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KGJhc2VOYW1lLmdldCgpKTsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVl
U3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewotICAgIGF1
dG8gZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKCF2
YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZp
bGVuYW1lLmRhdGEoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0
R1JlZihnX2ZpbGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRS
SUJVVEVfRklMRVNZU1RFTV9GUkVFLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgaWYgKCFmaWxl
SW5mbykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZnJlZVNwYWNlID0gZ19maWxlX2lu
Zm9fZ2V0X2F0dHJpYnV0ZV91aW50NjQoZmlsZUluZm8uZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVf
RklMRVNZU1RFTV9GUkVFKTsKLSAgICByZXR1cm4gISFmcmVlU3BhY2U7Ci19Ci0KIFN0cmluZyBk
aXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvIGZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtNDI4LDYyICszNjYsNiBAQCBpbnQg
cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCiAgICAgcmV0dXJuIC0xOwogfQogCi1ib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYg
b2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewotICAgIGF1dG8gb2xkRmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ob2xkUGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJl
c2VudGF0aW9uKG9sZEZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBuZXdGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKLSAgICBp
ZiAoIXZhbGlkUmVwcmVzZW50YXRpb24obmV3RmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBvbGRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgob2xkRmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gbmV3Rmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG5ld0ZpbGVuYW1lLmRhdGEoKSkpOwot
Ci0gICAgcmV0dXJuIGdfZmlsZV9tb3ZlKG9sZEZpbGUuZ2V0KCksIG5ld0ZpbGUuZ2V0KCksIEdf
RklMRV9DT1BZX09WRVJXUklURSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7
Ci19Ci0KLWJvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYg
ZGVzdGluYXRpb24pCi17Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gQ3JlYXRlSGFyZExp
bmsoZGVzdGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIHNvdXJjZS53aWRlQ2hhcmFj
dGVycygpLmRhdGEoKSwgbnVsbHB0cik7Ci0jZWxzZQotICAgIGF1dG8gc291cmNlRmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVz
ZW50YXRpb24oc291cmNlRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGRlc3RpbmF0aW9uRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGlu
YXRpb24pOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbkZpbGVuYW1l
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFsaW5rKHNvdXJjZUZpbGVu
YW1lLmRhdGEoKSwgZGVzdGluYXRpb25GaWxlbmFtZS5kYXRhKCkpOwotI2VuZGlmCi19Ci0KLWJv
b2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3Jt
IGEgY29weSBpbnN0ZWFkLgotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuICEhOjpDb3B5Rmls
ZShzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBUUlVFKTsKLSNlbHNlCi0gICAgYXV0byBzb3VyY2VGaWxlbmFtZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRh
dGlvbihzb3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8g
ZGVzdGluYXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlv
bik7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uRmlsZW5hbWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBzb3VyY2VGaWxlID0g
YWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlRmlsZW5hbWUuZGF0YSgpKSk7Ci0g
ICAgR1JlZlB0cjxHRmlsZT4gZGVzdGluYXRpb25GaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgoZGVzdGluYXRpb25GaWxlbmFtZS5kYXRhKCkpKTsKLSAgICByZXR1cm4gZ19maWxl
X2NvcHkoc291cmNlRmlsZS5nZXQoKSwgZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ09Q
WV9OT05FLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKLSNlbmRpZgotfQot
CiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxl
KQogewogICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3Jf
cGF0aChmc0ZpbGUuZGF0YSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcAppbmRleCA5OWRjYmYyM2U5MGYwYWUxMzQyMWNhMGJiM2UyOTBjMjk1Y2YxMjk3Li5iZmU4
ZmFiYjZiZmM2NzBlNGVlNGIzMGQ4YjNjNDhlNDc5ZGM1ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bv
c2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTQ5LDM2ICs0OSw2IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiBuYW1lc3BhY2UgRmlsZVN5c3RlbUltcGwgewogCi1ib29sIGZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOwotCi0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBhY2Nlc3MoZnNSZXAuZGF0YSgp
LCBGX09LKSAhPSAtMTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwot
Ci0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJGaWxlIGZhaWxlZCB0byBkZWxldGUuIEZhaWxlZCB0byBnZXQgZmls
ZXN5c3RlbSByZXByZXNlbnRhdGlvbiB0byBjcmVhdGUgQ1N0cmluZyBmcm9tIGNmU3RyaW5nIG9y
IGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gaXMgYSBudWxsIHZhbHVlIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyB1bmxpbmsoLi4uKSByZXR1cm5zIDAgb24gc3Vj
Y2Vzc2Z1bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9uLXplcm8gaW4gYW55IG90aGVyIGNh
c2UgKGluY2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9yIG5vbi1leGlzdGVudCBmaWxlKQot
ICAgIGJvb2wgdW5saW5rZWQgPSAhdW5saW5rKGZzUmVwLmRhdGEoKSk7Ci0gICAgaWYgKCF1bmxp
bmtlZCAmJiBlcnJubyAhPSBFTk9FTlQpCi0gICAgICAgIExPR19FUlJPUigiRmlsZSBmYWlsZWQg
dG8gZGVsZXRlLiBFcnJvciBtZXNzYWdlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0KLSAgICBy
ZXR1cm4gdW5saW5rZWQ7Ci19Ci0KIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiBwZXJt
aXNzaW9uLCBib29sIGZhaWxJZkZpbGVFeGlzdHMpCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE4NiwzNSArMTU2LDYgQEAgYm9vbCB1
bmxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUpCiB9CiAjZW5kaWYKIAotI2lmICFQ
TEFURk9STShNQUMpCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OwotCi0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIHJtZGlyKC4uLikgcmV0dXJucyAwIG9uIHN1
Y2Nlc3NmdWwgZGVsZXRpb24gb2YgdGhlIHBhdGggYW5kIG5vbi16ZXJvIGluIGFueSBvdGhlciBj
YXNlIChpbmNsdWRpbmcgaW52YWxpZCBwZXJtaXNzaW9ucyBvciBub24tZXhpc3RlbnQgZmlsZSkK
LSAgICByZXR1cm4gIXJtZGlyKGZzUmVwLmRhdGEoKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBnZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0KQotewotICAgIENT
dHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAo
IWZzUmVwLmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc3RydWN0IHN0YXQgZmlsZUluZm87Ci0KLSAgICBpZiAoc3RhdChmc1Jl
cC5kYXRhKCksICZmaWxlSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3Vs
dCA9IGZpbGVJbmZvLnN0X3NpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgZ2V0Rmls
ZVNpemUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nJiByZXN1bHQpCiB7CiAg
ICAgc3RydWN0IHN0YXQgZmlsZUluZm87CkBAIC0zMDAsMTkgKzI0MSw2IEBAIE9wdGlvbmFsPEZp
bGVNZXRhZGF0YT4gZmlsZU1ldGFkYXRhRm9sbG93aW5nU3ltbGlua3MoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIHJldHVybiBmaWxlTWV0YWRhdGFVc2luZ0Z1bmN0aW9uKHBhdGgsICZzdGF0KTsK
IH0KIAotYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBj
b25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCi17Ci0gICAgQ1N0cmluZyB0YXJnZXRQYXRo
RlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCk7Ci0gICAgaWYgKCF0
YXJnZXRQYXRoRlNSZXAuZGF0YSgpIHx8IHRhcmdldFBhdGhGU1JlcC5kYXRhKClbMF0gPT0gJ1ww
JykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBzeW1ib2xpY0xpbmtQYXRo
RlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5rUGF0aCk7Ci0gICAg
aWYgKCFzeW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpIHx8IHN5bWJvbGljTGlua1BhdGhGU1Jl
cC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
ICFzeW1saW5rKHRhcmdldFBhdGhGU1JlcC5kYXRhKCksIHN5bWJvbGljTGlua1BhdGhGU1JlcC5k
YXRhKCkpOwotfQotCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7CiAgICAgaWYgKHBhdGguZW5kc1dp
dGgoJy8nKSkKQEAgLTMyOSwzNSArMjU3LDYgQEAgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudHMoU3RyaW5nVmlldyBwYXRoLCBjb25zdCBWZWN0b3I8U3RyaW5nVmlldz4mIGNvbXAKICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1ib29sIG1ha2VBbGxEaXJlY3Rvcmll
cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmdWxsUGF0aCA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoIWFjY2VzcyhmdWxsUGF0aC5kYXRhKCks
IEZfT0spKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNoYXIqIHAgPSBmdWxsUGF0aC5t
dXRhYmxlRGF0YSgpICsgMTsKLSAgICBpbnQgbGVuZ3RoID0gZnVsbFBhdGgubGVuZ3RoKCk7Ci0K
LSAgICBpZiAocFtsZW5ndGggLSAxXSA9PSAnLycpCi0gICAgICAgIHBbbGVuZ3RoIC0gMV0gPSAn
XDAnOwotICAgIGZvciAoOyAqcDsgKytwKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnLycpIHsKLSAg
ICAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0
YSgpLCBGX09LKSkgewotICAgICAgICAgICAgICAgIGlmIChta2RpcihmdWxsUGF0aC5kYXRhKCks
IFNfSVJXWFUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqcCA9ICcvJzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYWNj
ZXNzKGZ1bGxQYXRoLmRhdGEoKSwgRl9PSykpIHsKLSAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRo
LmRhdGEoKSwgU19JUldYVSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5n
JiBwYXRoKQogewogICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcv
JykgKyAxKTsKQEAgLTQxOSwyOSArMzE4LDYgQEAgQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci1ib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQ
YXRoKQotewotICAgIGF1dG8gb2xkRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
b2xkUGF0aCk7Ci0gICAgaWYgKG9sZEZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KG5ld1BhdGgpOwotICAgIGlmIChuZXdGaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlbmFtZShvbGRGaWxlbmFtZS5kYXRhKCksIG5ld0ZpbGVu
YW1lLmRhdGEoKSkgIT0gLTE7Ci19Ci0KLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0
cmluZyYgcGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdHZmcyBm
aWxlU3lzdGVtU3RhdDsKLSAgICBpZiAoIXN0YXR2ZnMoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSwgJmZpbGVTeXN0ZW1TdGF0KSkgewotICAgICAgICBmcmVlU3BhY2UgPSBm
aWxlU3lzdGVtU3RhdC5mX2JhdmFpbCAqIGZpbGVTeXN0ZW1TdGF0LmZfZnJzaXplOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBTdHJpbmcgb3Bl
blRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYg
aGFuZGxlLCBjb25zdCBTdHJpbmcmIHN1ZmZpeCkKIHsKICAgICAvLyBGSVhNRTogU3VmZml4IGlz
IG5vdCBzdXBwb3J0ZWQsIGJ1dCBPSyBmb3Igbm93IHNpbmNlIHRoZSBjb2RlIHVzaW5nIGl0IGlz
IG1hY09TLXBvcnQtb25seS4KQEAgLTQ2OCw1MyArMzQ0LDYgQEAgZW5kOgogfQogI2VuZGlmIC8v
ICFQTEFURk9STShDT0NPQSkKIAotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8
fCBkZXN0aW5hdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1
dG8gZnNTb3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBpZiAo
IWZzU291cmNlLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc0Rl
c3RpbmF0aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKLSAgICBp
ZiAoIWZzRGVzdGluYXRpb24uZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gIWxpbmsoZnNTb3VyY2UuZGF0YSgpLCBmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7Ci19Ci0K
LWJvb2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJp
bmcmIGRlc3RpbmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9u
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJm
b3JtIGEgY29weSBpbnN0ZWFkLgotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8IGRlc3RpbmF0
aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc1NvdXJj
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghZnNTb3VyY2Uu
ZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZzRGVzdGluYXRpb24g
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOwotICAgIGlmICghZnNEZXN0
aW5hdGlvbi5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gaGFuZGxl
ID0gb3Blbihmc0Rlc3RpbmF0aW9uLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENM
LCAwNjY2KTsKLSAgICBpZiAoaGFuZGxlID09IC0xKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBib29sIGFwcGVuZFJlc3VsdCA9IGFwcGVuZEZpbGVDb250ZW50c1RvRmlsZUhhbmRsZShz
b3VyY2UsIGhhbmRsZSk7Ci0gICAgY2xvc2UoaGFuZGxlKTsKLQotICAgIC8vIElmIHRoZSBjb3B5
IGZhaWxlZCwgZGVsZXRlIHRoZSB1bnVzYWJsZSBmaWxlLgotICAgIGlmICghYXBwZW5kUmVzdWx0
KQotICAgICAgICB1bmxpbmsoZnNEZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGFw
cGVuZFJlc3VsdDsKLX0KLQogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0
IENTdHJpbmcmIGZzRmlsZSkKIHsKICAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBhMDNmOGE0NjQ0ZWRiOTA3ODFmZTQzOWFmNmMw
Mzc5ZTVhMTJhN2EwLi5mZDU5ZjE5MDNlNmUxZmU4NGQxNThkNTc1YTk2MjllYWI5MDBjOWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0xMDUsMTUgKzEwNSw2IEBAIHN0
YXRpYyB2b2lkIGdldEZpbGVNb2RpZmljYXRpb25UaW1lRnJvbUZpbmREYXRhKGNvbnN0IFdJTjMy
X0ZJTkRfREFUQVcmIGZpbmREYXRhCiAgICAgdGltZSA9IGZpbGVUaW1lLlF1YWRQYXJ0IC8gMTAw
MDAwMDAgLSBrU2Vjb25kc0Zyb21GaWxlVGltZVRvVGltZXQ7CiB9CiAKLWJvb2wgZ2V0RmlsZVNp
emUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHNpemUpCi17Ci0gICAgV0lOMzJfRklO
RF9EQVRBVyBmaW5kRGF0YTsKLSAgICBpZiAoIWdldEZpbmREYXRhKHBhdGgsIGZpbmREYXRhKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGdldEZpbGVTaXplRnJvbUZpbmRE
YXRhKGZpbmREYXRhLCBzaXplKTsKLX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVI
YW5kbGUgZmlsZUhhbmRsZSwgbG9uZyBsb25nJiBzaXplKQogewogICAgIEJZX0hBTkRMRV9GSUxF
X0lORk9STUFUSU9OIGZpbGVJbmZvcm1hdGlvbjsKQEAgLTIyMCwzNiArMjExLDYgQEAgT3B0aW9u
YWw8RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhjb25zdCBTdHJp
bmcmIHBhdGgpCiAgICAgcmV0dXJuIGZpbmREYXRhVG9GaWxlTWV0YWRhdGEoZmluZERhdGEpOwog
fQogCi1ib29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNv
bnN0IFN0cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICByZXR1cm4gOjpDcmVhdGVTeW1i
b2xpY0xpbmtXKHN5bWJvbGljTGlua1BhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIHRhcmdl
dFBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIDApOwotfQotCi1ib29sIGZpbGVFeGlzdHMo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZERhdGE7Ci0g
ICAgcmV0dXJuIGdldEZpbmREYXRhKHBhdGgsIGZpbmREYXRhKTsKLX0KLQotYm9vbCBkZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwot
ICAgIHJldHVybiAhIURlbGV0ZUZpbGVXKGZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgp
KTsKLX0KLQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17
Ci0gICAgU3RyaW5nIGZpbGVuYW1lID0gcGF0aDsKLSAgICByZXR1cm4gISFSZW1vdmVEaXJlY3Rv
cnlXKGZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpKTsKLX0KLQotYm9vbCBtb3ZlRmls
ZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICBT
dHJpbmcgb2xkRmlsZW5hbWUgPSBvbGRQYXRoOwotICAgIFN0cmluZyBuZXdGaWxlbmFtZSA9IG5l
d1BhdGg7Ci0gICAgcmV0dXJuICEhOjpNb3ZlRmlsZUV4KG9sZEZpbGVuYW1lLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBuZXdGaWxlbmFtZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgTU9WRUZJ
TEVfQ09QWV9BTExPV0VEIHwgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORyk7Ci19Ci0KIFN0cmlu
ZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGNvbXBvbmVudCkKIHsKICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CkBA
IC0yOTEsMTkgKzI1Miw2IEBAIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0
IFN0cmluZyYgcGF0aCkKIAogI2VuZGlmIC8vICFVU0UoQ0YpCiAKLWJvb2wgbWFrZUFsbERpcmVj
dG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRo
OwotICAgIGlmIChTSENyZWF0ZURpcmVjdG9yeUV4KG51bGxwdHIsIGZ1bGxQYXRoLndpZGVDaGFy
YWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKSAhPSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIERX
T1JEIGVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBFUlJPUl9G
SUxFX0VYSVNUUyAmJiBlcnJvciAhPSBFUlJPUl9BTFJFQURZX0VYSVNUUykgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHBhdGggJXMiLCBwYXRoLmFzY2lpKCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKIHsKICAgICByZXR1
cm4gIiI7CkBAIC01MTQsMjAgKzQ2Miw2IEBAIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihieXRlc1JlYWQpOwogfQogCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYg
c291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBDcmVhdGVI
YXJkTGluayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgc291cmNlLndpZGVD
aGFyYWN0ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZp
bGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0g
ICAgaWYgKGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0g
ICAgcmV0dXJuICEhOjpDb3B5RmlsZShzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRl
c3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBUUlVFKTsKLX0KLQogU3RyaW5nIGxv
Y2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZFN0
b3JhZ2VEaXJlY3RvcnkoQ1NJRExfTE9DQUxfQVBQREFUQSk7CkBAIC01NTcsMTYgKzQ5MSw2IEBA
IFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNv
bnN0IFN0cmluZyYgZmlsdGVyKQogICAgIHJldHVybiBlbnRyaWVzOwogfQogCi1ib29sIGdldFZv
bHVtZUZyZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17
Ci0gICAgVUxBUkdFX0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7Ci0gICAgaWYg
KCFHZXREaXNrRnJlZVNwYWNlRXhXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmcmVl
Qnl0ZXNBdmFpbGFibGVUb0NhbGxlciwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGZyZWVTcGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1
YWRQYXJ0OwotICAgIHJldHVybiB0cnVlOwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxl
RGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIGF1dG8gaGFuZGxlID0gb3Bl
bkZpbGUoZnNGaWxlLmRhdGEoKSwgRmlsZU9wZW5Nb2RlOjpSZWFkKTsKQEAgLTU5NiwyMSArNTIw
LDYgQEAgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJv
b2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQot
ewotICAgIFNIRklMRU9QU1RSVUNUIGRlbGV0ZU9wZXJhdGlvbiA9IHsKLSAgICAgICAgbnVsbHB0
ciwKLSAgICAgICAgRk9fREVMRVRFLAotICAgICAgICBkaXJlY3RvcnlQYXRoLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLAotICAgICAgICBMIiIsCi0gICAgICAgIEZPRl9OT0NPTkZJUk1BVElPTiB8
IEZPRl9OT0VSUk9SVUkgfCBGT0ZfU0lMRU5ULAotICAgICAgICBmYWxzZSwKLSAgICAgICAgbnVs
bHB0ciwKLSAgICAgICAgTCIiCi0gICAgfTsKLSAgICByZXR1cm4gIVNIRmlsZU9wZXJhdGlvbigm
ZGVsZXRlT3BlcmF0aW9uKTsKLX0KLQogYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVy
LCBzaXplX3QpCiB7CiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ4YTM5MjI5MzUy
YWNjZWIzZWQ0MWM4ODQyNWIzMDdjM2IwYTZkMjQuLmRjNjQ5OGVjYzRkMzA0NDMwN2Q1Y2YxMmUx
MjU4Yjk0YzAyZjAyM2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVt
IGluIFdURjo6RmlsZVN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKwor
ICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UgZm9yIHRoZSBGaWxlU3lzdGVtIEFQSSB0aGF0
IHdhcyBtb2RpZmllZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVT
eXN0ZW0uY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBG
aWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6
dGVtcEZpbGVTeW1saW5rUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxl
U3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGggY29uc3Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBFbXB0eUZpbGVQ
YXRoIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpzcGFj
ZUNvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxl
U3lzdGVtVGVzdDo6YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6cXVvdGVDb250YWluaW5nRmlsZVBhdGggY29uc3Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAyMS0wNC0zMCAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjcHldIFN1
cHBvcnQgYXJndW1lbnRzIHRvIFRhc2tQb29sIHNldHVwIGFuZCB0ZWFyZG93bgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCA4ZjY1MWQzZWFlMzQz
Mjk3NTFhYzM2MWRkN2UwNjRjYjYzN2UzNzUyLi5hOTljMzFmZGZmYWM2NGJjMDk4NGJiZmMzZjhm
ZTVjZjljMmQxOGM1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aWxlU3lzdGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lz
dGVtLmNwcApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBXVEY6Omlu
aXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLSAgICAgICAgLy8gY3JlYXRlIHRlbXAgZmlsZQorICAg
ICAgICAvLyBjcmVhdGUgdGVtcCBmaWxlLgogICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlOwogICAgICAgICBtX3RlbXBGaWxlUGF0aCA9IEZpbGVTeXN0ZW06Om9w
ZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wVGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lz
dGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3RybGVuKEZpbGVT
eXN0ZW1UZXN0RGF0YSkpOwpAQCAtNTIsNiArNTIsMTggQEAgcHVibGljOgogICAgICAgICBtX3Rl
bXBGaWxlU3ltbGlua1BhdGggPSAidGVtcFRlc3RGaWxlLXN5bWxpbmsiOwogICAgICAgICBGaWxl
U3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsobV90ZW1wRmlsZVBhdGgsIG1fdGVtcEZpbGVTeW1s
aW5rUGF0aCk7CiAKKyAgICAgICAgLy8gQ3JlYXRlIHRlbXAgZGlyZWN0b3J5LgorICAgICAgICBG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgdGVtcG9yYXJ5RmlsZTsKKyAgICAgICAgbV90
ZW1wRW1wdHlGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBF
bXB0eUZvbGRlciIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUodGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1w
RW1wdHlGb2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVz
KG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisKKyAgICAgICAgbV90ZW1wRW1wdHlGb2xkZXJTeW1s
aW5rUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlGb2xkZXIt
c3ltbGluayIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUo
dGVtcG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1w
dHlGb2xkZXJTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGlj
TGluayhtX3RlbXBFbXB0eUZvbGRlclBhdGgsIG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgp
OworCiAgICAgICAgIG1fdGVtcEVtcHR5RmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9y
YXJ5RmlsZSgidGVtcEVtcHR5VGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoaGFuZGxlKTsKIApAQCAtNjksMjIgKzgxLDI4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRmlsZVBhdGgpOwogICAgICAg
ICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7CisgICAgICAg
IEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7
CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJTeW1saW5r
UGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGaWxlUGF0
aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zcGFjZUNvbnRhaW5pbmdGaWxl
UGF0aCk7CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9iYW5nQ29udGFpbmluZ0Zp
bGVQYXRoKTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3F1b3RlQ29udGFpbmlu
Z0ZpbGVQYXRoKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRlbXBGaWxlUGF0aCgpIHsg
cmV0dXJuIG1fdGVtcEZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVN5bWxp
bmtQYXRoKCkgeyByZXR1cm4gbV90ZW1wRmlsZVN5bWxpbmtQYXRoOyB9Ci0gICAgY29uc3QgU3Ry
aW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0K
LSAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9z
cGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5p
bmdGaWxlUGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNv
bnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX3F1b3RlQ29u
dGFpbmluZ0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3RlbXBGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEZpbGVT
eW1saW5rUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEZpbGVTeW1saW5rUGF0aDsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVt
cEVtcHR5Rm9sZGVyUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyU3lt
bGlua1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoOyB9
CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGVtcEVtcHR5RmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0Zp
bGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAg
IGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWlu
aW5nRmlsZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9
CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVQYXRoOwogICAgIFN0cmluZyBtX3Rl
bXBGaWxlU3ltbGlua1BhdGg7CisgICAgU3RyaW5nIG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsKKyAg
ICBTdHJpbmcgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aDsKICAgICBTdHJpbmcgbV90ZW1w
RW1wdHlGaWxlUGF0aDsKICAgICBTdHJpbmcgbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsKICAg
ICBTdHJpbmcgbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOwpAQCAtMTc2LDQgKzE5NCwyNDcgQEAg
VEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVOb25FbXB0eURpcmVjdG9yeSkKICAgICBFWFBF
Q1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wb3JhcnlUZXN0Rm9sZGVyKSk7CiB9
CiAKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUV4aXN0cykKK3sKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBh
dGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2Vz
LW5vdC1leGlzdCJfcykpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVTeW1s
aW5rKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxl
U3ltbGlua1BhdGgoKSkpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmls
ZSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKworICAgIC8vIFNob3VsZCBoYXZlIGRlbGV0ZWQg
dGhlIHN5bWxpbmsgYnV0IG5vdCB0aGUgdGFyZ2V0IGZpbGUuCisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworfQorCitURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIGRlbGV0ZUZpbGUpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShG
aWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxl
U3lzdGVtVGVzdCwgZGVsZXRlRW1wdHlEaXJlY3RvcnkpCit7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRo
KCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlG
b2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlE
aXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVt
VGVzdCwgbW92ZUZpbGUpCit7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJ0ZW1wRmlsZS1t
b3ZlZCIpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhkZXN0aW5h
dGlvbikpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0
aCgpLCBkZXN0aW5hdGlvbikpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhkZXN0aW5hdGlvbikpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjptb3ZlRmls
ZSh0ZW1wRmlsZVBhdGgoKSwgZGVzdGluYXRpb24pKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1U
ZXN0LCBtb3ZlRmlsZU92ZXJ3cml0ZXNEZXN0aW5hdGlvbikKK3sKKyAgICBFWFBFQ1RfVFJVRShG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisKKyAgICBsb25n
IGxvbmcgZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVT
aXplKHRlbXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwg
MCk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRW1wdHlG
aWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxlU2l6ZSk7CisKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjptb3ZlRmlsZSh0ZW1wRmlsZVBhdGgoKSwgdGVtcEVt
cHR5RmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyh0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisKKyAgICBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBhdGgoKSwgZmlsZVNp
emUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworfQorCitURVNUX0YoRmlsZVN5c3Rl
bVRlc3QsIGdldEZpbGVTaXplKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHModGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9
IDA7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRo
KCksIGZpbGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVT
aXplKSk7CisgICAgRVhQRUNUX1RSVUUoIWZpbGVTaXplKTsKKworICAgIGZpbGVTaXplID0gMDsK
KyAgICBTdHJpbmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3QiX3Mp
OworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlVGhhdERvZXNO
b3RFeGlzdCwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRSghZmlsZVNpemUpOworfQorCitU
RVNUX0YoRmlsZVN5c3RlbVRlc3QsIGZpbGVJc0RpcmVjdG9yeSkKK3sKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxl
U3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIEZpbGVT
eXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgYXV0byBmb2xk
ZXJTeW1saW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEodGVtcEVtcHR5Rm9s
ZGVyU3ltbGlua1BhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoISFmb2xkZXJTeW1saW5rTWV0YWRh
dGEpOworICAgIEVYUEVDVF9FUShmb2xkZXJTeW1saW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRh
ZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6
ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06
OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCksIEZpbGVT
eXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgRVhQRUNUX0ZB
TFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3Rl
bTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmls
ZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKTsKKworICAgIGF1dG8gZmlsZVN5bWxpbmtNZXRh
ZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpOwor
ICAgIEVYUEVDVF9UUlVFKCEhZmlsZVN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKGZp
bGVTeW1saW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5r
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxl
U3ltbGlua1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8p
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxl
U3ltbGlua1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVz
KSk7CisKKyAgICBTdHJpbmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhp
c3QiX3MpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZmls
ZVRoYXREb2VzTm90RXhpc3QsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6
Ok5vKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShmaWxl
VGhhdERvZXNOb3RFeGlzdCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6
WWVzKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbWFrZUFsbERpcmVjdG9yaWVzKQor
eworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5Rm9sZGVy
UGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRl
bXBFbXB0eUZvbGRlclBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
czo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMo
dGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgU3RyaW5nIHN1YkZvbGRlclBhdGggPSBGaWxl
U3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSwg
eyAic3ViRm9sZGVyMSIsICJzdWJGb2xkZXIyIiwgInN1YkZvbGRlcjMiIH0pOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN1YkZvbGRlclBhdGgpKTsKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoc3ViRm9sZGVyUGF0aCkpOwor
ICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOwor
ICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShzdWJGb2xkZXJQYXRo
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVD
VF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRl
clBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN1YkZv
bGRlclBhdGgpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBnZXRWb2x1bWVGcmVlU3Bh
Y2UpCit7CisgICAgdWludDY0X3QgZnJlZVNwYWNlID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpnZXRWb2x1bWVGcmVlU3BhY2UodGVtcEZpbGVQYXRoKCksIGZyZWVTcGFjZSkpOwor
ICAgIEVYUEVDVF9HVChmcmVlU3BhY2UsIDBVKTsKKworICAgIFN0cmluZyBmaWxlVGhhdERvZXNO
b3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlG
b2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVT
eXN0ZW06OmdldFZvbHVtZUZyZWVTcGFjZShmaWxlVGhhdERvZXNOb3RFeGlzdCwgZnJlZVNwYWNl
KSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgY3JlYXRlU3ltYm9saWNMaW5rKQorewor
ICAgIGF1dG8gc3ltbGlua1BhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAidGVtcEZpbGUtc3ltbGluayIpOworICAgIEVYUEVD
VF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNU
X1RSVUUoRmlsZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKHRlbXBGaWxlUGF0aCgpLCBzeW1s
aW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlu
a1BhdGgpKTsKKworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1l
dGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7
CisgICAgRVhQRUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBl
OjpTeW1ib2xpY0xpbmspOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmls
ZShzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0
ZW1wRmlsZVBhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZVN5bWJv
bGljTGlua0ZvbGRlcikKK3sKKyAgICBhdXRvIHN5bWxpbmtQYXRoID0gdGVtcEVtcHR5Rm9sZGVy
U3ltbGlua1BhdGgoKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN5
bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3lt
bGlua1BhdGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xp
bmsodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKworICAgIGF1dG8gc3ltbGlu
a01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAgICBF
WFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKHN5bWxpbmtNZXRh
ZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworCisgICAgRVhQ
RUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShzeW1saW5rUGF0aCwgRmlsZVN5
c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShG
aWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnkoc3ltbGlua1BhdGgsIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVt
OjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0
ZW1UZXN0LCBjcmVhdGVTeW1ib2xpY0xpbmtGaWxlRG9lc05vdEV4aXN0KQoreworICAgIFN0cmlu
ZyBmaWxlVGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQ
RUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVRoYXREb2VzTm90RXhpc3QpKTsK
KworICAgIGF1dG8gc3ltbGlua1BhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3Qtc3ltbGluayJfcyk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsoZmlsZVRoYXRE
b2VzTm90RXhpc3QsIHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06
OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBj
cmVhdGVIYXJkTGluaykKK3sKKyAgICBhdXRvIGhhcmRsaW5rUGF0aCA9IEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJ0ZW1wRmlsZS1o
YXJkbGluayIpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRs
aW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAg
ICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
aGFyZExpbmsodGVtcEZpbGVQYXRoKCksIGhhcmRsaW5rUGF0aCkpOworCisgICAgRVhQRUNUX1RS
VUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxvbmcgbG9u
ZyBsaW5rRmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVT
aXplKGhhcmRsaW5rUGF0aCwgbGlua0ZpbGVTaXplKSk7CisgICAgRVhQRUNUX0VRKGxpbmtGaWxl
U2l6ZSwgZmlsZVNpemUpOworCisgICAgYXV0byBoYXJkbGlua01ldGFkYXRhID0gRmlsZVN5c3Rl
bTo6ZmlsZU1ldGFkYXRhKGhhcmRsaW5rUGF0aCk7CisgICAgRVhQRUNUX1RSVUUoISFoYXJkbGlu
a01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfRVEoaGFyZGxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1l
dGFkYXRhOjpUeXBlOjpGaWxlKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsaW5rRmlsZVNpemUgPSAwOworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGhhcmRsaW5rUGF0aCwgbGlua0ZpbGVT
aXplKSk7CisgICAgRVhQRUNUX0VRKGxpbmtGaWxlU2l6ZSwgZmlsZVNpemUpOworfQorCitURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZUhhcmRMaW5rT3JDb3B5RmlsZSkKK3sKKyAgICBhdXRv
IGhhcmRsaW5rUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1w
RW1wdHlGb2xkZXJQYXRoKCksICJ0ZW1wRmlsZS1oYXJkbGluayIpOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25n
IGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0
ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOwor
CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6aGFyZExpbmtPckNvcHlGaWxlKHRlbXBGaWxl
UGF0aCgpLCBoYXJkbGlua1BhdGgpKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZp
bGVFeGlzdHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgbGlua0ZpbGVTaXplID0g
MDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgs
IGxpbmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsK
KworICAgIGF1dG8gaGFyZGxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YSho
YXJkbGlua1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhaGFyZGxpbmtNZXRhZGF0YSk7CisgICAg
RVhQRUNUX0VRKGhhcmRsaW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6Rmls
ZSk7CisKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0
aCgpKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5r
UGF0aCkpOworCisgICAgbGlua0ZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOworICAgIEVYUEVD
VF9FUShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427512</attachid>
            <date>2021-05-01 14:01:00 -0700</date>
            <delta_ts>2021-05-01 19:36:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225255-20210501140059.patch</filename>
            <type>text/plain</type>
            <size>215918</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2ODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
M2ZjMzYxMWNjMjFlYWQ0NWEyN2FlODhkNTkyN2Y1ZWMwMmRlYmM0Li5hNDg5Yzk0N2M3YWIxNGY5
ZjVjMDc1OTYyYjU4ZGU4OWY1MDcyMzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICBVbmV4cG9y
dCBzb21lIHN5bWJvbHMgdG8gZml4IGJ1aWxkLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMv
SmF2YVNjcmlwdENvcmUueGNjb25maWc6CisKIDIwMjEtMDQtMjkgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgSW5saW5pbmcgcHJvcGVydHkgYWNjZXNzZXMgaW5z
aWRlIGNvbnN0YW50IGZvbGRpbmcgc2hvdWxkIGNoZWNrIE9wdGlvbnM6OnVzZUFjY2Vzc0lubGlu
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCmluZGV4IDlmNDUxNmYyMzQ3OWE0NzNiZTQxMGJhOTk3ZjYxYWIzMmQwMGE1NjcuLjJkZmE1
MDBlYjQ3NTMxOTJmMDExYTJmNGIzY2YzZjYzNmNiMWM1ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMjEtMDUtMDEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBT
dGFydCBsZXZlcmFnaW5nIHN0ZDo6ZmlsZXN5c3RlbSBpbiBXVEY6OkZpbGVTeXN0ZW0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTI1NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcg
c3RkOjpmaWxlc3lzdGVtIGluIFdURjo6RmlsZVN5c3RlbSB0byByZWR1Y2UgdGhlIGFtb3VudCBv
ZgorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0ZpbGVTeXN0ZW0uY3BwOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZmlsZUV4aXN0cyk6CisgICAgICAgIChXVEY6OkZp
bGVTeXN0ZW1JbXBsOjpkZWxldGVGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6
OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om1v
dmVGaWxlKToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmdldEZpbGVTaXplKToKKyAg
ICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmZpbGVJc0RpcmVjdG9yeSk6CisgICAgICAgIChX
VEY6OkZpbGVTeXN0ZW1JbXBsOjptYWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV1RGOjpG
aWxlU3lzdGVtSW1wbDo6Z2V0Vm9sdW1lRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6OmNyZWF0ZVN5bWJvbGljTGluayk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1J
bXBsOjpoYXJkTGluayk6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpoYXJkTGlua09y
Q29weUZpbGUpOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6ZGVsZXRlTm9uRW1wdHlE
aXJlY3RvcnkpOgorICAgICAgICAqIHd0Zi9GaWxlU3lzdGVtLmg6CisgICAgICAgICogd3RmL2Nv
Y29hL0ZpbGVTeXN0ZW1Db2NvYS5tbToKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6OmNy
ZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSk6CisgICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUds
aWIuY3BwOgorICAgICAgICAqIHd0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAg
ICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1K
U0NPbmx5LmNtYWtlOgorICAgICAgICBHTlUgaW1wbGVtZW50YXRpb24gcHJpb3IgdG8gOS4xIHJl
cXVpcmVzIGxpbmtpbmcgd2l0aCAtbHN0ZGMrK2ZzIGFuZCBMTFZNIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIHByaW9yIHRvIExMVk0gOS4wIHJlcXVpcmVzIGxpbmtpbmcgd2l0aCAtbGMrK2ZzLgor
CisgICAgICAgICogd3RmL1N0ZEZpbGVzeXN0ZW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0
Zi9TdGRGaWxlc3lzdGVtLmg6CisgICAgICAgIERyb3Agb3VyIG93biBjb3B5IG9mIHN0ZDo6Zmls
ZXN5c3RlbSBhcyBhbGwgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2Ugc3VwcG9ydCBub3cgaGF2ZQor
ICAgICAgICBzdXBwb3J0IGZvciB0aGlzLgorCiAyMDIxLTA0LTMwICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBTb3J0ZWRBcnJheU1hcCBieSB1c2lu
ZyBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBhcnJheXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwpp
bmRleCA5NmQxMWM2ZWMzM2ZmY2UzYTczNjE5NTcwZWUzNmQ5NGQxMDVmYTI1Li5jNGI0ZDY2Mzg1
ZDUwYmYxNDFkYzJlNDJmNWUwYWQ3MWUyYzZjYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNjcmlwdENvcmUueGNjb25maWcKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmln
CkBAIC0yNyw3ICsyNyw3IEBAIERFRklORVNfTU9EVUxFID0gWUVTOwogTU9EVUxFTUFQX0ZJTEUg
PSAkKFNSQ1JPT1QpL0phdmFTY3JpcHRDb3JlLm1vZHVsZW1hcDsKIAogLy8gUHJldmVudCBDKysg
c3RhbmRhcmQgbGlicmFyeSBvcGVyYXRvciBuZXcsIGRlbGV0ZSBhbmQgdGhlaXIgcmVsYXRlZCBl
eGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBvcnRlZCBhcyB3ZWFrIHN5bWJvbHMuCi1PVEhF
Ul9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDli
YWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2FsbG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2ws
X19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11
bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3Qz
X18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4
ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThm
dW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThm
dW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVj
bEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4z
SlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVy
YXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pO
U3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNf
XzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18x
MTdiYWRfZnVuY3Rpb25fY2FsbEU7CitPVEhFUl9MREZMQUdTX0hJREVfU1lNQk9MUyA9IC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sLF9fWlRTU3Q5YmFkX2Fs
bG9jIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9y
dGVkX3N5bWJvbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pud21QdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5LU3QzX18xOGZ1bmN0aW9uSUZ2dkVFY2xFdiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVDMUVPUzJfIC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aTlN0M19fMThmdW5jdGlvbklGdnZFRUMyRU9TMl8gLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOS1N0M19fMThmdW5jdGlvbklGdlJOM0pTQzE3Qnl0ZWNvZGVHZW5l
cmF0b3JFUE5TMV8xMFJlZ2lzdGVySURFRUVjbEVTM19TNV8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEw
UmVnaXN0ZXJJREVFRUQxRXYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0
aW9uSUZ2Uk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvckVQTlMxXzEwUmVnaXN0ZXJJREVFRUQyRXYg
LVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xOGZ1bmN0aW9uSUZ2dkVFRDFFdiAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sLF9fWk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVEMkV2IC1XbCwtdW5l
eHBvcnRlZF9zeW1ib2wsX19aVFZOU3QzX18xMTdiYWRfZnVuY3Rpb25fY2FsbEUgLVdsLC11bmV4
cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW0yNF9faXNfcGF0aGFibGVf
Y2hhcl9hcnJheUlQS2NTNF9jTGIxRUUxMV9fcmFuZ2VfZW5kRVM0XyAtV2wsLXVuZXhwb3J0ZWRf
c3ltYm9sLF9fWk5TdDNfXzE0X19mczEwZmlsZXN5c3RlbTI0X19pc19wYXRoYWJsZV9jaGFyX2Fy
cmF5SVBLY1M0X2NMYjFFRTEzX19yYW5nZV9iZWdpbkVTNF8gLVdsLC11bmV4cG9ydGVkX3N5bWJv
bCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0UxNF9fYXBwZW5kX3Jhbmdl
SVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyN19faXNfY3BwMTdfZm9yd2FyZF9pdGVyYXRvcklUX0VF
NXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5T
XzlhbGxvY2F0b3JJY0VFRUVTOF9TOF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18x
NF9fZnMxMGZpbGVzeXN0ZW04X1BhdGhDVlRJY0UxNV9fYXBwZW5kX3NvdXJjZUlQS2NFRXZSTlNf
MTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRVJL
VF8gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCxfX1pOU3QzX18xNF9fZnMxMGZpbGVzeXN0ZW04X1Bh
dGhDVlRJY0UxNF9fYXBwZW5kX3JhbmdlSVBLY0VFTlNfOWVuYWJsZV9pZklYc3IyMV9faXNfZm9y
d2FyZF9pdGVyYXRvcklUX0VFNXZhbHVlRXZFNHR5cGVFUk5TXzEyYmFzaWNfc3RyaW5nSWNOU18x
MWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUVTOF9TOF87CiAKIE9USEVSX0xERkxB
R1NfQkFTRSA9ICQoT1RIRVJfTERGTEFHU19ISURFX1NZTUJPTFMpIC1mb3JjZV9sb2FkICIkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvbGliV1RGLmEi
OwogT1RIRVJfTERGTEFHU1tzZGs9ZW1iZWRkZWQqXSA9ICQoaW5oZXJpdGVkKSAkKE9USEVSX0xE
RkxBR1NfQkFTRSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA2ODFlOTBmNWYwZTY3OGI1ZDQ0ZDJhYmJhYTIyZmZmNjUwNTMyMjQzLi4zYWUwNWU3MDE1ZTU2
MmRkZDRkMjYzZGIxM2YwNzQ5NzMxMGNmZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTkzLDcgKzkzLDYgQEAKIAkJN0E2RUJBMzQyMDc0NkMzNDAwNEY5
QzQ0IC8qIE1hY2hTZW5kUmlnaHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0E2RUJBMzMyMDc0NkMzNDAwNEY5QzQ0IC8qIE1hY2hTZW5kUmlnaHQu
Y3BwICovOyB9OwogCQk3QUYwMjNCNTIwNjFFMTcwMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYw
MjNCNDIwNjFFMTZGMDBBOEVGRDYgLyogUHJvY2Vzc1ByaXZpbGVnZS5jcHAgKi87IH07CiAJCTdB
RkVDNkIxMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlE
LmNwcCAqLzsgfTsKLQkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1OTVG
RkQyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovOyB9OwogCQk4MTM0MDEz
ODE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxMzQwMTM2MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNlNjQu
Y3BwICovOyB9OwogCQk4MzQ4QkEwRTIxRkJDMEQ1MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmll
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzQ4
QkEwRDIxRkJDMEQ0MDBGRDMwNTQgLyogT2JqZWN0SWRlbnRpZmllci5jcHAgKi87IH07CiAJCTkz
OTM0QkQzMThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q29jb2EubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJEMjE4QTFFOEMzMDBEMEQ2
QTEgLyogU3RyaW5nVmlld0NvY29hLm1tICovOyB9OwpAQCAtNDY5LDcgKzQ2OCw2IEBACiAJCTdD
NDIzMDczMjNDRTJEOEIwMDZFNTREMCAvKiBQbGF0Zm9ybU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M0MjMwNzQyM0NFQjE4NzAwNkU1NEQwIC8qIFBsYXRmb3JtTGVnYWN5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtTGVnYWN5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNTk1RkZDMjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lzdGVt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEZpbGVzeXN0ZW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M1OTVGRkQyNTJBOTZFMDAwRTQyMTY4IC8qIFN0
ZEZpbGVzeXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Rk
RmlsZXN5c3RlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOTY5Mjk0MUY2
NjMwNkUwMDI2N0E5RSAvKiBLZXlWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS2V5VmFsdWVQYWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
OThDREM3MjNFN0E5QjgwMDEyRjIzMiAvKiBQbGF0Zm9ybUVuYWJsZUNvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtRW5hYmxlQ29jb2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M5OENEQzgyM0U3QUZDODAwMTJGMjMyIC8qIFBsYXRmb3Jt
RW5hYmxlV2luQXBwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1FbmFibGVXaW5BcHBsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2NSw3
ICsxMjYzLDYgQEAKIAkJCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5o
ICovLAogCQkJCTMxM0VERUM5Nzc4RTQ5QzlCRUE5MUNGQyAvKiBTdGFja1RyYWNlLmNwcCAqLywK
IAkJCQlFRjdENkNENTlEODY0MkE4QTBEQTg2QUQgLyogU3RhY2tUcmFjZS5oICovLAotCQkJCTdD
NTk1RkZEMjUyQTk2RTAwMEU0MjE2OCAvKiBTdGRGaWxlc3lzdGVtLmNwcCAqLywKIAkJCQk3QzU5
NUZGQzI1MkE5NkUwMDBFNDIxNjggLyogU3RkRmlsZXN5c3RlbS5oICovLAogCQkJCUZFOTdGNkE4
MjQ1Q0U1REQwMEM2M0ZDNiAvKiBTdGRJbnRFeHRyYXMuaCAqLywKIAkJCQlBOEE0NzMxMTE1MUE4
MjVCMDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggKi8sCkBAIC0xNzcwLDcgKzE3NjcsNiBAQAog
CQkJCUZFRUE0REY5MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1BvaW50ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzMzN0RCOUNFNzQzNDEwRkFGMDc2RTE3IC8qIFN0YWNrVHJhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0M1OTVGRkUyNTJBOTZFMDAwRTQyMTY4IC8qIFN0ZEZp
bGVzeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5NUI2MzcyMENCNUVGRDAwNDc5NjM1
IC8qIFN0cmluZ0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVC
MDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhENkUy
NzFGNTUyMkUzMDBBNzVDQzQgLyogU3RyaW5nQnVpbGRlckpTT04uY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGJkZjkwMmE2YmQwYWNkMGUxYmU3NWU5Zjc2ODljYzAy
Y2Q2M2RlNTcuLjQ2NDExYTFjZjYwZGU5OTU4Y2EzNjM2OGVmMTc3NDdhMDg1ZTczYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0ZpbGVTeXN0ZW0uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZpbGVNZXRh
ZGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkRmlsZXN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTM4Miwx
NCArMzgzLDYgQEAgdm9pZCB1bmxvY2tBbmRDbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhh
bmRsZSkKICAgICBjbG9zZUZpbGUoaGFuZGxlKTsKIH0KIAotYm9vbCBmaWxlSXNEaXJlY3Rvcnko
Y29uc3QgU3RyaW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3MpCi17Ci0gICAgYXV0byBtZXRhZGF0YSA9IHNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3MgPT0gU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzID8gZmlsZU1ldGFkYXRh
Rm9sbG93aW5nU3ltbGlua3MocGF0aCkgOiBmaWxlTWV0YWRhdGEocGF0aCk7Ci0gICAgaWYgKCFt
ZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtZXRhZGF0YS52YWx1
ZSgpLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlOjpEaXJlY3Rvcnk7Ci19Ci0KICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIGJvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0
IFN0cmluZyYpCiB7CkBAIC00MDgsMjAgKzQwMSw2IEBAIFN0cmluZyBjcmVhdGVUZW1wb3Jhcnla
aXBBcmNoaXZlKGNvbnN0IFN0cmluZyYpCiB9CiAjZW5kaWYKIAotI2lmICFQTEFURk9STShDT0NP
QSkgJiYgIU9TKFdJTkRPV1MpCi1ib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKLXsKLSAgICBhdXRvIGVudHJpZXMgPSBsaXN0RGlyZWN0b3J5KHBhdGgsICIq
Il9zKTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogZW50cmllcykgewotICAgICAgICBpZiAoZmls
ZUlzRGlyZWN0b3J5KGVudHJ5LCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCi0gICAg
ICAgICAgICBkZWxldGVOb25FbXB0eURpcmVjdG9yeShlbnRyeSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGRlbGV0ZUZpbGUoZW50cnkpOwotICAgIH0KLSAgICByZXR1cm4gZGVsZXRlRW1w
dHlEaXJlY3RvcnkocGF0aCk7Ci19Ci0jZW5kaWYKLQogTWFwcGVkRmlsZURhdGEgbWFwVG9GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgc2l6ZV90IGJ5dGVzU2l6ZSwgRnVuY3Rpb248dm9pZChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpPiYpPiYmIGFwcGx5LCBQbGF0
Zm9ybUZpbGVIYW5kbGUqIG91dHB1dEhhbmRsZSkKIHsKICAgICBjb25zdGV4cHIgYm9vbCBmYWls
SWZGaWxlRXhpc3RzID0gdHJ1ZTsKQEAgLTUwNCw1ICs0ODMsMTA5IEBAIE9wdGlvbmFsPFNhbHQ+
IHJlYWRPck1ha2VTYWx0KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gc2FsdDsKIH0K
IAorYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9y
X2NvZGUgZWM7CisgICAgLy8gZXhpc3RzKCkgcmV0dXJucyBmYWxzZSBvbiBlcnJvciBzbyBubyBu
ZWVkIHRvIGNoZWNrIGVjLgorICAgIHJldHVybiBzdGQ6OmZpbGVzeXN0ZW06OmV4aXN0cyhmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7Cit9CisKK2Jvb2wgZGVsZXRl
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAg
IC8vIHJlbW92ZSgpIHJldHVybnMgZmFsc2Ugb24gZXJyb3Igc28gbm8gbmVlZCB0byBjaGVjayBl
Yy4KKyAgICByZXR1cm4gc3RkOjpmaWxlc3lzdGVtOjpyZW1vdmUoZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworfQorCisvLyBXZSBjdXJyZW50bHkgdXNlIGEgZGlm
ZmVyZW50IGltcGxlbWVudGF0aW9uIG9uIG1hY09TIHRvIGRlYWwgd2l0aCAuRFNfU3RvcmUgZmls
ZXMgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiBvdGhlcndpc2UgZW1wdHkgZGlyZWN0b3JpZXMuCisj
aWYgIVBMQVRGT1JNKE1BQykKK2Jvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICAvLyByZW1vdmUoKSByZXR1
cm5zIGZhbHNlIG9uIGVycm9yIHNvIG5vIG5lZWQgdG8gY2hlY2sgZWMuCisgICAgcmV0dXJuIHN0
ZDo6ZmlsZXN5c3RlbTo6cmVtb3ZlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRh
KCksIGVjKTsKK30KKyNlbmRpZgorCitib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0
aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAg
ICBzdGQ6OmZpbGVzeXN0ZW06OnJlbmFtZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ob2xkUGF0
aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24obmV3UGF0aCkuZGF0YSgpLCBlYyk7
CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyYgcmVzdWx0KQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBh
dXRvIHNpemUgPSBzdGQ6OmZpbGVzeXN0ZW06OmZpbGVfc2l6ZShmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmVzdWx0ID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBmaWxl
SXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
IHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCit7CisgICAgc3RkOjplcnJvcl9jb2RlIGVjOwor
ICAgIHN0ZDo6ZmlsZXN5c3RlbTo6ZmlsZV9zdGF0dXMgZmlsZVN0YXR1czsKKyAgICBpZiAoc2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMp
CisgICAgICAgIGZpbGVTdGF0dXMgPSBzdGQ6OmZpbGVzeXN0ZW06OnN0YXR1cyhmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgZWxzZQorICAgICAgICBmaWxl
U3RhdHVzID0gc3RkOjpmaWxlc3lzdGVtOjpzeW1saW5rX3N0YXR1cyhmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuIGZpbGVTdGF0dXMudHlwZSgp
ID09IHN0ZDo6ZmlsZXN5c3RlbTo6ZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2Jvb2wgbWFr
ZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2Nv
ZGUgZWM7CisgICAgc3RkOjpmaWxlc3lzdGVtOjpjcmVhdGVfZGlyZWN0b3JpZXMoZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVybiAhZWM7Cit9CisK
K2Jvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3QmIGZy
ZWVTcGFjZSkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgYXV0byBzcGFjZUluZm8g
PSBzdGQ6OmZpbGVzeXN0ZW06OnNwYWNlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmcmVl
U3BhY2UgPSBzcGFjZUluZm8uYXZhaWxhYmxlOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmlu
ZyYgc3ltYm9saWNMaW5rUGF0aCkKK3sKKyAgICBzdGQ6OmVycm9yX2NvZGUgZWM7CisgICAgc3Rk
OjpmaWxlc3lzdGVtOjpjcmVhdGVfc3ltbGluayhmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGFy
Z2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5rUGF0
aCkuZGF0YSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKK30KKworYm9vbCBoYXJkTGluayhjb25z
dCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYgbGlua1BhdGgpCit7CisgICAgc3Rk
OjplcnJvcl9jb2RlIGVjOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6Y3JlYXRlX2hhcmRfbGluayhm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCkuZGF0YSgpLCBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24obGlua1BhdGgpLmRhdGEoKSwgZWMpOworICAgIHJldHVybiAhZWM7Cit9CisK
K2Jvb2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3Qg
U3RyaW5nJiBsaW5rUGF0aCkKK3sKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggZnNUYXJnZXRQ
YXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRhcmdldFBhdGgpLmRhdGEoKTsKKyAgICBz
dGQ6OmZpbGVzeXN0ZW06OnBhdGggZnNMaW5rUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihsaW5rUGF0aCkuZGF0YSgpOworCisgICAgc3RkOjplcnJvcl9jb2RlIGVjOworICAgIHN0ZDo6
ZmlsZXN5c3RlbTo6Y3JlYXRlX2hhcmRfbGluayhmc1RhcmdldFBhdGgsIGZzTGlua1BhdGgsIGVj
KTsKKyAgICBpZiAoIWVjKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN0ZDo6ZmlsZXN5
c3RlbTo6Y29weV9maWxlKGZzVGFyZ2V0UGF0aCwgZnNMaW5rUGF0aCwgZWMpOworICAgIHJldHVy
biAhZWM7Cit9CisKK2Jvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoKQoreworICAgIHN0ZDo6ZXJyb3JfY29kZSBlYzsKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnJl
bW92ZV9hbGwoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgZWMpOworICAg
IHJldHVybiAhZWM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW1JbXBsCiB9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaCBiL1Nv
dXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAppbmRleCA5YTlkOWNhMDZlMmUzY2JlZjQyZWRmNjVl
ZTAzZDhjNWU4OGFjYmM5Li5mNmM0M2E1ODNhMDdmOGE4OWMyMDMxMGQ5OGM0Nzk4OWEyNzUxMjA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvRmlsZVN5c3RlbS5oCkBAIC0xNjYsOSArMTY2LDkgQEAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgdW5sb2NrQW5kQ2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CiAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90Lgog
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKLVdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRl
c3RpbmF0aW9uKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhcmRMaW5rKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5nJiBsaW5rUGF0aCk7CiAvLyBIYXJkIGxpbmtzIGEg
ZmlsZSBpZiBwb3NzaWJsZSwgY29waWVzIGl0IGlmIG5vdC4KLVdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbik7CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXJkTGlua09yQ29weUZp
bGUoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIGxpbmtQYXRoKTsKIAog
I2lmIFVTRShGSUxFX0xPQ0spCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBsb2NrRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUsIE9wdGlvblNldDxGaWxlTG9ja01vZGU+KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtSlNDT25seS5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtSlNDT25seS5jbWFrZQppbmRleCA2NWRlNjU5NGQyNWVlZDUwYzgzZGM4ZjVmODAwOTk1MTIy
ZmRmN2I0Li41ZGNlYmRmMzA2NTMwN2RmYTk1OTA1NmVhZDkxZmU4NGQzNjA1NzY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUpTQ09ubHkuY21ha2UKKysrIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1KU0NPbmx5LmNtYWtlCkBAIC0xNTksMyArMTU5LDE1IEBAIGVuZGlmICgp
CiBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCiAgICAgVGhyZWFkczo6VGhyZWFkcwogKQorCitp
ZiAoQ09NUElMRVJfSVNfR0NDX09SX0NMQU5HKQorICAgIGlmIChDT01QSUxFUl9JU19DTEFORykK
KyAgICAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAgICAgICAgICAgYysrZnMKKyAg
ICAgICAgKQorICAgIGVsc2UgKCkKKyAgICAgICAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwor
ICAgICAgICAgICAgc3RkYysrZnMKKyAgICAgICAgKQorICAgIGVuZGlmICgpCitlbmRpZiAoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9TdGRGaWxlc3lzdGVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVi
MGE0NTg0ZWYzMThmYTI3Y2ZhNzY1ZTZlYmFiNjRkOGJlMDViZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGRGaWxlc3lzdGVt
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2MDUgKzAsMCBAQAotLy89PT0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFN0ZEZpbGVzeXN0ZW0uY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
PT09Ly8KLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJh
c3RydWN0dXJlCi0vLwotLy8gVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbgotLy8gU291cmNlIExpY2Vuc2Vz
LiBTZWUgTElDRU5TRS1saWJjKysudHh0IGZvciBkZXRhaWxzLgotLy8KLS8vPT09LS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLT09PS8vCi0KLS8qIEltcG9ydHMgYSBjb3B5IG9mIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9j
b21tb24uaCwgZmlsZXN5c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwLAotICAgZmlsZXN5c3Rl
bS9pbnQxMjhfYnVpbHRpbnMuY3BwIGFuZCBmaWxlc3lzdGVtL29wZXJhdGlvbnMuY3BwIGZyb20g
cjM0MzgzOCBvZiB0aGUKLSAgIGxpYmMrKyBwcm9qZWN0IGFuZCBoYXMgbW9kaWZpZWQgdGhlbSB0
byB3b3JrIG91dHNpZGUgb2YgYSBidWlsZCBvZiBsaWJjKysgaXRzZWxmLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgUExBVEZPUk0o
TUFDKQotCi0jaW5jbHVkZSA8QXZhaWxhYmlsaXR5Lmg+Ci0KLSNpZiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgMTAxNTAwCi0KLSNpbmNsdWRlICJTdGRGaWxlc3lzdGVtLmgiCi0K
LSNpbmNsdWRlIDxfX2NvbmZpZz4KLQotLyogLS0gQkVHSU4gZmlsZXN5c3RlbS9maWxlc3lzdGVt
X2NvbW1vbi5oIC0tICovCi0KLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDxjaHJvbm8+Ci0j
aW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjbGltaXRzPgotCi0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2lu
Y2x1ZGUgPHN5cy90aW1lLmg+IC8vIGZvciA6OnV0aW1lcyBhcyB1c2VkIGluIF9fbGFzdF93cml0
ZV90aW1lCi0jaW5jbHVkZSA8ZmNudGwuaD4gICAgLyogdmFsdWVzIGZvciBmY2htb2RhdCAqLwot
Ci0vKiAjaW5jbHVkZSAiLi4vaW5jbHVkZS9hcHBsZV9hdmFpbGFiaWxpdHkuaCIgKi8KLQotI2lm
ICFkZWZpbmVkKF9fQVBQTEVfXykKLS8vIFdlIGNhbiB1c2UgdGhlIHByZXNlbmNlIG9mIFVUSU1F
X09NSVQgdG8gZGV0ZWN0IHBsYXRmb3JtcyB0aGF0IHByb3ZpZGUKLS8vIHV0aW1lbnNhdC4KLSNp
ZiBkZWZpbmVkKFVUSU1FX09NSVQpCi0jZGVmaW5lIF9MSUJDUFBfVVNFX1VUSU1FTlNBVAotI2Vu
ZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBkaWFnbm9z
dGljIHB1c2gKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rp
b24iCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXBhcmFtZXRlciIK
LSNlbmRpZgotCi1fTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCi0KLW5hbWVzcGFj
ZSBkZXRhaWwgewotbmFtZXNwYWNlIHsKLQotc3RhdGljIHN0cmluZyBmb3JtYXRfc3RyaW5nX2lt
cChjb25zdCBjaGFyKiBtc2csIC4uLikgewotICAvLyB3ZSBtaWdodCBuZWVkIGEgc2Vjb25kIHNo
b3QgYXQgdGhpcywgc28gcHJlLWVtcHRpdmx5IG1ha2UgYSBjb3B5Ci0gIHN0cnVjdCBHdWFyZFZB
TGlzdCB7Ci0gICAgdmFfbGlzdCYgdGFyZ2V0OwotICAgIGJvb2wgYWN0aXZlID0gdHJ1ZTsKLSAg
ICBHdWFyZFZBTGlzdCh2YV9saXN0JiB0YXJnZXQpIDogdGFyZ2V0KHRhcmdldCksIGFjdGl2ZSh0
cnVlKSB7fQotICAgIHZvaWQgY2xlYXIoKSB7Ci0gICAgICBpZiAoYWN0aXZlKQotICAgICAgICB2
YV9lbmQodGFyZ2V0KTsKLSAgICAgIGFjdGl2ZSA9IGZhbHNlOwotICAgIH0KLSAgICB+R3VhcmRW
QUxpc3QoKSB7Ci0gICAgICBpZiAoYWN0aXZlKQotICAgICAgICB2YV9lbmQodGFyZ2V0KTsKLSAg
ICB9Ci0gIH07Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgbXNnKTsKLSAgR3Vh
cmRWQUxpc3QgYXJnc19ndWFyZChhcmdzKTsKLQotICB2YV9saXN0IGFyZ3NfY3A7Ci0gIHZhX2Nv
cHkoYXJnc19jcCwgYXJncyk7Ci0gIEd1YXJkVkFMaXN0IGFyZ3NfY29weV9ndWFyZChhcmdzX2Nw
KTsKLQotICBhcnJheTxjaGFyLCAyNTY+IGxvY2FsX2J1ZmY7Ci0gIHNpemVfdCBzaXplID0gbG9j
YWxfYnVmZi5zaXplKCk7Ci0KLSNpZmRlZiBfX2NsYW5nX18KLSNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9u
bGl0ZXJhbCIKLSNlbmRpZgotICBhdXRvIHJldCA9IDo6dnNucHJpbnRmKGxvY2FsX2J1ZmYuZGF0
YSgpLCBzaXplLCBtc2csIGFyZ3NfY3ApOwotI2lmZGVmIF9fY2xhbmdfXwotI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KLSAgYXJnc19jb3B5X2d1YXJkLmNsZWFyKCk7Ci0K
LSAgLy8gaGFuZGxlIGVtcHR5IGV4cGFuc2lvbgotICBpZiAocmV0ID09IDApCi0gICAgcmV0dXJu
IHN0cmluZ3t9OwotICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXQpIDwgc2l6ZSkKLSAgICBy
ZXR1cm4gc3RyaW5nKGxvY2FsX2J1ZmYuZGF0YSgpKTsKLQotICAvLyB3ZSBkaWQgbm90IHByb3Zp
ZGUgYSBsb25nIGVub3VnaCBidWZmZXIgb24gb3VyIGZpcnN0IGF0dGVtcHQuCi0gIC8vIGFkZCAx
IHRvIHNpemUgdG8gYWNjb3VudCBmb3IgbnVsbC1ieXRlIGluIHNpemUgY2FzdCB0byBwcmV2ZW50
IG92ZXJmbG93Ci0gIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJldCkgKyAxOwotICBhdXRv
IGJ1ZmZfcHRyID0gdW5pcXVlX3B0cjxjaGFyW10+KG5ldyBjaGFyW3NpemVdKTsKLQotI2lmZGVm
IF9fY2xhbmdfXwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgotI2VuZGlmCi0gIHJldCA9
IDo6dnNucHJpbnRmKGJ1ZmZfcHRyLmdldCgpLCBzaXplLCBtc2csIGFyZ3MpOwotI2lmZGVmIF9f
Y2xhbmdfXwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KLSAgcmV0dXJu
IHN0cmluZyhidWZmX3B0ci5nZXQoKSk7Ci19Ci0KLWNvbnN0IGNoYXIqIHVud3JhcChzdHJpbmcg
Y29uc3QmIHMpIHsgcmV0dXJuIHMuY19zdHIoKTsgfQotY29uc3QgY2hhciogdW53cmFwKHBhdGgg
Y29uc3QmIHApIHsgcmV0dXJuIHAubmF0aXZlKCkuY19zdHIoKTsgfQotdGVtcGxhdGUgPGNsYXNz
IEFyZz4KLUFyZyBjb25zdCYgdW53cmFwKEFyZyBjb25zdCYgYSkgewotICBzdGF0aWNfYXNzZXJ0
KCFpc19jbGFzczxBcmc+Ojp2YWx1ZSwgImNhbm5vdCBwYXNzIGNsYXNzIGhlcmUiKTsKLSAgcmV0
dXJuIGE7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotc3RyaW5nIGZvcm1hdF9zdHJp
bmcoY29uc3QgY2hhciogZm10LCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSB7Ci0gIHJldHVybiBmb3Jt
YXRfc3RyaW5nX2ltcChmbXQsIHVud3JhcChhcmdzKS4uLik7Ci19Ci0KLWVycm9yX2NvZGUgY2Fw
dHVyZV9lcnJubygpIHsKLSAgX0xJQkNQUF9BU1NFUlQoZXJybm8sICJFeHBlY3RlZCBlcnJubyB0
byBiZSBub24temVybyIpOwotICByZXR1cm4gZXJyb3JfY29kZShlcnJubywgZ2VuZXJpY19jYXRl
Z29yeSgpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1UIGVycm9yX3ZhbHVlKCk7Ci10ZW1w
bGF0ZSA8PgotX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgdm9pZCBlcnJvcl92YWx1ZTx2
b2lkPigpIHt9Ci10ZW1wbGF0ZSA8PgotYm9vbCBlcnJvcl92YWx1ZTxib29sPigpIHsKLSAgcmV0
dXJuIGZhbHNlOwotfQotdGVtcGxhdGUgPD4KLXVpbnRtYXhfdCBlcnJvcl92YWx1ZTx1aW50bWF4
X3Q+KCkgewotICByZXR1cm4gdWludG1heF90KC0xKTsKLX0KLXRlbXBsYXRlIDw+Ci1fTElCQ1BQ
X0NPTlNURVhQUl9BRlRFUl9DWFgxMSBmaWxlX3RpbWVfdHlwZSBlcnJvcl92YWx1ZTxmaWxlX3Rp
bWVfdHlwZT4oKSB7Ci0gIHJldHVybiBmaWxlX3RpbWVfdHlwZTo6bWluKCk7Ci19Ci10ZW1wbGF0
ZSA8PgotcGF0aCBlcnJvcl92YWx1ZTxwYXRoPigpIHsKLSAgcmV0dXJuIHt9OwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBFcnJvckhhbmRsZXIgewotICBjb25zdCBjaGFyKiBmdW5j
X25hbWU7Ci0gIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cjsKLSAgY29uc3QgcGF0aCogcDEgPSBu
dWxscHRyOwotICBjb25zdCBwYXRoKiBwMiA9IG51bGxwdHI7Ci0KLSAgRXJyb3JIYW5kbGVyKGNv
bnN0IGNoYXIqIGZuYW1lLCBlcnJvcl9jb2RlKiBlYywgY29uc3QgcGF0aCogcDEgPSBudWxscHRy
LAotICAgICAgICAgICAgICAgY29uc3QgcGF0aCogcDIgPSBudWxscHRyKQotICAgICAgOiBmdW5j
X25hbWUoZm5hbWUpLCBlYyhlYyksIHAxKHAxKSwgcDIocDIpIHsKLSAgICBpZiAoZWMpCi0gICAg
ICBlYy0+Y2xlYXIoKTsKLSAgfQotCi0gIFQgcmVwb3J0KGNvbnN0IGVycm9yX2NvZGUmIG1fZWMp
IGNvbnN0IHsKLSAgICBpZiAoZWMpIHsKLSAgICAgICplYyA9IG1fZWM7Ci0gICAgICByZXR1cm4g
ZXJyb3JfdmFsdWU8VD4oKTsKLSAgICB9Ci0gICAgc3RyaW5nIHdoYXQgPSBzdHJpbmcoImluICIp
ICsgZnVuY19uYW1lOwotICAgIHN3aXRjaCAoYm9vbChwMSkgKyBib29sKHAyKSkgewotICAgIGNh
c2UgMDoKLSAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCBtX2VjKTsKLSAgICBj
YXNlIDE6Ci0gICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCBtX2VjKTsK
LSAgICBjYXNlIDI6Ci0gICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCAq
cDIsIG1fZWMpOwotICAgIH0KLSAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Ci0gIH0KLQotICB0
ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgVCByZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9l
YywgY29uc3QgY2hhciogbXNnLCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSBjb25zdCB7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAqZWMgPSBtX2VjOwotICAgICAgcmV0dXJuIGVycm9yX3ZhbHVlPFQ+KCk7
Ci0gICAgfQotICAgIHN0cmluZyB3aGF0ID0KLSAgICAgICAgc3RyaW5nKCJpbiAiKSArIGZ1bmNf
bmFtZSArICI6ICIgKyBmb3JtYXRfc3RyaW5nKG1zZywgYXJncy4uLik7Ci0gICAgc3dpdGNoIChi
b29sKHAxKSArIGJvb2wocDIpKSB7Ci0gICAgY2FzZSAwOgotICAgICAgX190aHJvd19maWxlc3lz
dGVtX2Vycm9yKHdoYXQsIG1fZWMpOwotICAgIGNhc2UgMToKLSAgICAgIF9fdGhyb3dfZmlsZXN5
c3RlbV9lcnJvcih3aGF0LCAqcDEsIG1fZWMpOwotICAgIGNhc2UgMjoKLSAgICAgIF9fdGhyb3df
ZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsICpwMiwgbV9lYyk7Ci0gICAgfQotICAgIF9MSUJD
UFBfVU5SRUFDSEFCTEUoKTsKLSAgfQotCi0gIFQgcmVwb3J0KGVycmMgY29uc3QmIGVycikgY29u
c3QgeyByZXR1cm4gcmVwb3J0KG1ha2VfZXJyb3JfY29kZShlcnIpKTsgfQotCi0gIHRlbXBsYXRl
IDxjbGFzcy4uLiBBcmdzPgotICBUIHJlcG9ydChlcnJjIGNvbnN0JiBlcnIsIGNvbnN0IGNoYXIq
IG1zZywgQXJncyBjb25zdCYuLi4gYXJncykgY29uc3QgewotICAgIHJldHVybiByZXBvcnQobWFr
ZV9lcnJvcl9jb2RlKGVyciksIG1zZywgYXJncy4uLik7Ci0gIH0KLQotcHJpdmF0ZToKLSAgRXJy
b3JIYW5kbGVyKEVycm9ySGFuZGxlciBjb25zdCYpID0gZGVsZXRlOwotICBFcnJvckhhbmRsZXIm
IG9wZXJhdG9yPShFcnJvckhhbmRsZXIgY29uc3QmKSA9IGRlbGV0ZTsKLX07Ci0KLXVzaW5nIGNo
cm9ubzo6ZHVyYXRpb247Ci11c2luZyBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q7Ci0KLXVzaW5nIFRp
bWVTcGVjID0gc3RydWN0IDo6dGltZXNwZWM7Ci11c2luZyBTdGF0VCA9IHN0cnVjdCA6OnN0YXQ7
Ci0KLXRlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVULAotICAgICAgICAgIGJv
b2wgSXNGbG9hdCA9IGlzX2Zsb2F0aW5nX3BvaW50PHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwPjo6
dmFsdWU+Ci1zdHJ1Y3QgdGltZV91dGlsX2Jhc2UgewotICB1c2luZyByZXAgPSB0eXBlbmFtZSBG
aWxlVGltZVQ6OnJlcDsKLSAgdXNpbmcgZnNfZHVyYXRpb24gPSB0eXBlbmFtZSBGaWxlVGltZVQ6
OmR1cmF0aW9uOwotICB1c2luZyBmc19zZWNvbmRzID0gZHVyYXRpb248cmVwPjsKLSAgdXNpbmcg
ZnNfbmFub3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG5hbm8+OwotICB1c2luZyBmc19taWNyb3Nl
Y29uZHMgPSBkdXJhdGlvbjxyZXAsIG1pY3JvPjsKLQotICBzdGF0aWMgY29uc3RleHByIHJlcCBt
YXhfc2Vjb25kcyA9Ci0gICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6
ZHVyYXRpb246Om1heCgpKS5jb3VudCgpOwotCi0gIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9u
c2VjID0KLSAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVy
YXRpb246Om1heCgpIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3Nl
Y29uZHMobWF4X3NlY29uZHMpKQotICAgICAgICAgIC5jb3VudCgpOwotCi0gIHN0YXRpYyBjb25z
dGV4cHIgcmVwIG1pbl9zZWNvbmRzID0KLSAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4o
RmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkpLmNvdW50KCk7Ci0KLSAgc3RhdGljIGNvbnN0ZXhw
ciByZXAgbWluX25zZWNfdGltZXNwZWMgPQotICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vj
b25kcz4oCi0gICAgICAgICAgKEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0gZnNfc2Vjb25k
cyhtaW5fc2Vjb25kcykpICsKLSAgICAgICAgICBmc19zZWNvbmRzKDEpKQotICAgICAgICAgIC5j
b3VudCgpOwotCi1wcml2YXRlOgotI2lmIF9MSUJDUFBfU1REX1ZFUiA+IDExICYmICFkZWZpbmVk
KF9MSUJDUFBfSEFTX05PX0NYWDE0X0NPTlNURVhQUikKLSAgc3RhdGljIGNvbnN0ZXhwciBmc19k
dXJhdGlvbiBnZXRfbWluX25zZWNzKCkgewotICAgIHJldHVybiBkdXJhdGlvbl9jYXN0PGZzX2R1
cmF0aW9uPigKLSAgICAgICAgZnNfbmFub3NlY29uZHMobWluX25zZWNfdGltZXNwZWMpIC0KLSAg
ICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oZnNfc2Vjb25kcygxKSkpOwotICB9
Ci0gIC8vIFN0YXRpYyBhc3NlcnQgdGhhdCB0aGVzZSB2YWx1ZXMgcHJvcGVybHkgcm91bmQgdHJp
cC4KLSAgc3RhdGljX2Fzc2VydChmc19zZWNvbmRzKG1pbl9zZWNvbmRzKSArIGdldF9taW5fbnNl
Y3MoKSA9PQotICAgICAgICAgICAgICAgICAgICBGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSwK
LSAgICAgICAgICAgICAgICAidmFsdWUgZG9lc24ndCByb3VuZHRyaXAiKTsKLQotICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgY2hlY2tfcmFuZ2UoKSB7Ci0gICAgLy8gVGhpcyBraW5kYSBzdWNrcywg
YnV0IGl0J3Mgd2hhdCBoYXBwZW5zIHdoZW4gd2UgZG9uJ3QgaGF2ZSBfX2ludDEyOF90LgotICAg
IGlmIChzaXplb2YoVGltZVQpID09IHNpemVvZihyZXApKSB7Ci0gICAgICB0eXBlZGVmIGR1cmF0
aW9uPGxvbmcgbG9uZywgcmF0aW88MzYwMCAqIDI0ICogMzY1PiA+IFllYXJzOwotICAgICAgcmV0
dXJuIGR1cmF0aW9uX2Nhc3Q8WWVhcnM+KGZzX3NlY29uZHMobWF4X3NlY29uZHMpKSA+IFllYXJz
KDI1MCkgJiYKLSAgICAgICAgICAgICBkdXJhdGlvbl9jYXN0PFllYXJzPihmc19zZWNvbmRzKG1p
bl9zZWNvbmRzKSkgPCBZZWFycygtMjUwKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1heF9zZWNvbmRz
ID49IG51bWVyaWNfbGltaXRzPFRpbWVUPjo6bWF4KCkgJiYKLSAgICAgICAgICAgbWluX3NlY29u
ZHMgPD0gbnVtZXJpY19saW1pdHM8VGltZVQ+OjptaW4oKTsKLSAgfQotICBzdGF0aWNfYXNzZXJ0
KGNoZWNrX3JhbmdlKCksICJ0aGUgcmVwcmVzZW50YWJsZSByYW5nZSBpcyB1bmFjY2VwdGFibGUg
c21hbGwiKTsKLSNlbmRpZgotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3Mg
VGltZVQ+Ci1zdHJ1Y3QgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT4gewot
ICB1c2luZyByZXAgPSB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcDsKLSAgdXNpbmcgZnNfZHVyYXRp
b24gPSB0eXBlbmFtZSBGaWxlVGltZVQ6OmR1cmF0aW9uOwotICB1c2luZyBmc19zZWNvbmRzID0g
ZHVyYXRpb248cmVwPjsKLSAgdXNpbmcgZnNfbmFub3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG5h
bm8+OwotICB1c2luZyBmc19taWNyb3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG1pY3JvPjsKLQot
ICBzdGF0aWMgY29uc3QgcmVwIG1heF9zZWNvbmRzOwotICBzdGF0aWMgY29uc3QgcmVwIG1heF9u
c2VjOwotICBzdGF0aWMgY29uc3QgcmVwIG1pbl9zZWNvbmRzOwotICBzdGF0aWMgY29uc3QgcmVw
IG1pbl9uc2VjX3RpbWVzcGVjOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xh
c3MgVGltZVQ+Ci1jb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcAotICAgIHRpbWVfdXRpbF9i
YXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+OjptYXhfc2Vjb25kcyA9Ci0gICAgICAgIGR1cmF0
aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkpLmNvdW50KCk7
Ci0KLXRlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVUPgotY29uc3QgdHlwZW5h
bWUgRmlsZVRpbWVUOjpyZXAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46
Om1heF9uc2VjID0KLSAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihGaWxlVGltZVQ6
OmR1cmF0aW9uOjptYXgoKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNf
c2Vjb25kcyhtYXhfc2Vjb25kcykpCi0gICAgICAgIC5jb3VudCgpOwotCi10ZW1wbGF0ZSA8Y2xh
c3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KLWNvbnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVw
Ci0gICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1pbl9zZWNvbmRz
ID0KLSAgICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9u
OjptaW4oKSkuY291bnQoKTsKLQotdGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGlt
ZVQ+Ci1jb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcAotICAgIHRpbWVfdXRpbF9iYXNlPEZp
bGVUaW1lVCwgVGltZVQsIHRydWU+OjptaW5fbnNlY190aW1lc3BlYyA9Ci0gICAgICAgIGR1cmF0
aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KChGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSAtCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKG1pbl9zZWNv
bmRzKSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRz
KDEpKQotICAgICAgICAgICAgLmNvdW50KCk7Ci0KLXRlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQs
IGNsYXNzIFRpbWVULCBjbGFzcyBUaW1lU3BlY1Q+Ci1zdHJ1Y3QgdGltZV91dGlsIDogdGltZV91
dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVD4gewotICB1c2luZyBCYXNlID0gdGltZV91dGlsX2Jh
c2U8RmlsZVRpbWVULCBUaW1lVD47Ci0gIHVzaW5nIEJhc2U6Om1heF9uc2VjOwotICB1c2luZyBC
YXNlOjptYXhfc2Vjb25kczsKLSAgdXNpbmcgQmFzZTo6bWluX25zZWNfdGltZXNwZWM7Ci0gIHVz
aW5nIEJhc2U6Om1pbl9zZWNvbmRzOwotCi0gIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX2R1cmF0
aW9uOwotICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19taWNyb3NlY29uZHM7Ci0gIHVzaW5nIHR5
cGVuYW1lIEJhc2U6OmZzX25hbm9zZWNvbmRzOwotICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19z
ZWNvbmRzOwotCi1wdWJsaWM6Ci0gIHRlbXBsYXRlIDxjbGFzcyBDVHlwZSwgY2xhc3MgQ2hyb25v
VHlwZT4KLSAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgY2hlY2tl
ZF9zZXQoQ1R5cGUqIG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2hyb25vVHlwZSB0aW1lKSB7Ci0gICAgdXNpbmcgTGltID0gbnVt
ZXJpY19saW1pdHM8Q1R5cGU+OwotICAgIGlmICh0aW1lID4gTGltOjptYXgoKSB8fCB0aW1lIDwg
TGltOjptaW4oKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqb3V0ID0gc3RhdGljX2Nhc3Q8
Q1R5cGU+KHRpbWUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgc3RhdGljIF9MSUJDUFBf
Q09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgaXNfcmVwcmVzZW50YWJsZShUaW1lU3BlY1QgdG0p
IHsKLSAgICBpZiAodG0udHZfc2VjID49IDApIHsKLSAgICAgIHJldHVybiB0bS50dl9zZWMgPCBt
YXhfc2Vjb25kcyB8fAotICAgICAgICAgICAgICh0bS50dl9zZWMgPT0gbWF4X3NlY29uZHMgJiYg
dG0udHZfbnNlYyA8PSBtYXhfbnNlYyk7Ci0gICAgfSBlbHNlIGlmICh0bS50dl9zZWMgPT0gKG1p
bl9zZWNvbmRzIC0gMSkpIHsKLSAgICAgIHJldHVybiB0bS50dl9uc2VjID49IG1pbl9uc2VjX3Rp
bWVzcGVjOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gdG0udHZfc2VjID49IG1pbl9zZWNv
bmRzOwotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgx
MSBib29sIGlzX3JlcHJlc2VudGFibGUoRmlsZVRpbWVUIHRtKSB7Ci0gICAgYXV0byBzZWNzID0g
ZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPih0bS50aW1lX3NpbmNlX2Vwb2NoKCkpOwotICAgIGF1
dG8gbnNlY3MgPSBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPih0bS50aW1lX3NpbmNlX2Vw
b2NoKCkgLSBzZWNzKTsKLSAgICBpZiAobnNlY3MuY291bnQoKSA8IDApIHsKLSAgICAgIHNlY3Mg
PSBzZWNzICsgZnNfc2Vjb25kcygxKTsKLSAgICAgIG5zZWNzID0gbnNlY3MgKyBmc19zZWNvbmRz
KDEpOwotICAgIH0KLSAgICB1c2luZyBUTGltID0gbnVtZXJpY19saW1pdHM8VGltZVQ+OwotICAg
IGlmIChzZWNzLmNvdW50KCkgPj0gMCkKLSAgICAgIHJldHVybiBzZWNzLmNvdW50KCkgPD0gVExp
bTo6bWF4KCk7Ci0gICAgcmV0dXJuIHNlY3MuY291bnQoKSA+PSBUTGltOjptaW4oKTsKLSAgfQot
Ci0gIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBGaWxlVGltZVQKLSAgY29u
dmVydF9mcm9tX3RpbWVzcGVjKFRpbWVTcGVjVCB0bSkgewotICAgIGlmICh0bS50dl9zZWMgPj0g
MCB8fCB0bS50dl9uc2VjID09IDApIHsKLSAgICAgIHJldHVybiBGaWxlVGltZVQoZnNfc2Vjb25k
cyh0bS50dl9zZWMpICsKLSAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fY2FzdDxmc19k
dXJhdGlvbj4oZnNfbmFub3NlY29uZHModG0udHZfbnNlYykpKTsKLSAgICB9IGVsc2UgeyAvLyB0
bS50dl9zZWMgPCAwCi0gICAgICBhdXRvIGFkal9zdWJzZWMgPSBkdXJhdGlvbl9jYXN0PGZzX2R1
cmF0aW9uPihmc19zZWNvbmRzKDEpIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZzX25hbm9zZWNvbmRzKHRtLnR2X25zZWMpKTsKLSAgICAgIGF1
dG8gRHVyID0gZnNfc2Vjb25kcyh0bS50dl9zZWMgKyAxKSAtIGFkal9zdWJzZWM7Ci0gICAgICBy
ZXR1cm4gRmlsZVRpbWVUKER1cik7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFN1
YlNlY1Q+Ci0gIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sCi0gIHNl
dF90aW1lc19jaGVja2VkKFRpbWVUKiBzZWNfb3V0LCBTdWJTZWNUKiBzdWJzZWNfb3V0LCBGaWxl
VGltZVQgdHApIHsKLSAgICBhdXRvIGR1ciA9IHRwLnRpbWVfc2luY2VfZXBvY2goKTsKLSAgICBh
dXRvIHNlY19kdXIgPSBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KGR1cik7Ci0gICAgYXV0byBz
dWJzZWNfZHVyID0gZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oZHVyIC0gc2VjX2R1cik7
Ci0gICAgLy8gVGhlIHR2X25zZWMgYW5kIHR2X3VzZWMgZmllbGRzIG11c3Qgbm90IGJlIG5lZ2F0
aXZlIHNvIGFkanVzdCBhY2NvcmRpbmdseQotICAgIGlmIChzdWJzZWNfZHVyLmNvdW50KCkgPCAw
KSB7Ci0gICAgICBpZiAoc2VjX2R1ci5jb3VudCgpID4gbWluX3NlY29uZHMpIHsKLSAgICAgICAg
c2VjX2R1ciA9IHNlY19kdXIgLSBmc19zZWNvbmRzKDEpOwotICAgICAgICBzdWJzZWNfZHVyID0g
c3Vic2VjX2R1ciArIGZzX3NlY29uZHMoMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdWJz
ZWNfZHVyID0gZnNfbmFub3NlY29uZHM6Onplcm8oKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIGNoZWNrZWRfc2V0KHNlY19vdXQsIHNlY19kdXIuY291bnQoKSkgJiYKLSAgICAgICAgICAg
Y2hlY2tlZF9zZXQoc3Vic2VjX291dCwgc3Vic2VjX2R1ci5jb3VudCgpKTsKLSAgfQotICBzdGF0
aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjb252ZXJ0X3RvX3RpbWVzcGVj
KFRpbWVTcGVjVCYgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlVGltZVQgdHApIHsKLSAgICBpZiAoIWlzX3Jl
cHJlc2VudGFibGUodHApKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzZXRfdGlt
ZXNfY2hlY2tlZCgmZGVzdC50dl9zZWMsICZkZXN0LnR2X25zZWMsIHRwKTsKLSAgfQotfTsKLQot
dXNpbmcgZnNfdGltZSA9IHRpbWVfdXRpbDxmaWxlX3RpbWVfdHlwZSwgdGltZV90LCBUaW1lU3Bl
Yz47Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLVRpbWVTcGVjIGV4dHJhY3RfbXRpbWUoU3Rh
dFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9tdGltZXNwZWM7IH0KLVRpbWVTcGVjIGV4dHJh
Y3RfYXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9hdGltZXNwZWM7IH0KLSNl
bHNlCi1UaW1lU3BlYyBleHRyYWN0X210aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Qu
c3RfbXRpbTsgfQotVGltZVNwZWMgZXh0cmFjdF9hdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0
dXJuIHN0LnN0X2F0aW07IH0KLSNlbmRpZgotCi0vLyBhbGxvdyB0aGUgdXRpbWVzIGltcGxlbWVu
dGF0aW9uIHRvIGNvbXBpbGUgZXZlbiBpdCB3ZSdyZSBub3QgZ29pbmcKLS8vIHRvIHVzZSBpdC4K
LQotYm9vbCBwb3NpeF91dGltZXMoY29uc3QgcGF0aCYgcCwgc3RkOjphcnJheTxUaW1lU3BlYywg
Mj4gY29uc3QmIFRTLAotICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKLSAgdXNp
bmcgbmFtZXNwYWNlIGNocm9ubzsKLSAgYXV0byBDb252ZXJ0ID0gW10obG9uZyBuc2VjKSB7Ci0g
ICAgdXNpbmcgaW50X3R5cGUgPSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8IDo6dGltZXZhbD4oKS50
dl91c2VjKTsKLSAgICBhdXRvIGR1ciA9IGR1cmF0aW9uX2Nhc3Q8bWljcm9zZWNvbmRzPihuYW5v
c2Vjb25kcyhuc2VjKSkuY291bnQoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+
KGR1cik7Ci0gIH07Ci0gIHN0cnVjdCA6OnRpbWV2YWwgQ29udmVydGVkVFNbMl0gPSB7e1RTWzBd
LnR2X3NlYywgQ29udmVydChUU1swXS50dl9uc2VjKX0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAge1RTWzFdLnR2X3NlYywgQ29udmVydChUU1sxXS50dl9uc2VjKX19Owot
ICBpZiAoOjp1dGltZXMocC5jX3N0cigpLCBDb252ZXJ0ZWRUUykgPT0gLTEpIHsKLSAgICBlYyA9
IGNhcHR1cmVfZXJybm8oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7
Ci19Ci0KLSNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKLWJvb2wgcG9zaXhfdXRp
bWVuc2F0KGNvbnN0IHBhdGgmIHAsIHN0ZDo6YXJyYXk8VGltZVNwZWMsIDI+IGNvbnN0JiBUUywK
LSAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7Ci0gIGlmICg6OnV0aW1lbnNh
dChBVF9GRENXRCwgcC5jX3N0cigpLCBUUy5kYXRhKCksIDApID09IC0xKSB7Ci0gICAgZWMgPSBj
YXB0dXJlX2Vycm5vKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwot
fQotI2VuZGlmCi0KLWJvb2wgc2V0X2ZpbGVfdGltZXMoY29uc3QgcGF0aCYgcCwgc3RkOjphcnJh
eTxUaW1lU3BlYywgMj4gY29uc3QmIFRTLAotICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBlYykgewotI2lmICFkZWZpbmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKLSAgcmV0dXJuIHBv
c2l4X3V0aW1lcyhwLCBUUywgZWMpOwotI2Vsc2UKLSAgcmV0dXJuIHBvc2l4X3V0aW1lbnNhdChw
LCBUUywgZWMpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlCi19IC8vIGVuZCBuYW1lc3Bh
Y2UgZGV0YWlsCi0KLV9MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCi0KLS8qIC0tIEVO
RCBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9uLmggLS0gKi8KLQotLyogLS0gQkVHSU4gZmls
ZXN5c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwIC0tICovCi0KLSNpZiBkZWZpbmVkKF9MSUJD
UFBfV0lOMzJBUEkpCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNpbmNsdWRlIDxXaW5k
b3dzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGRpcmVudC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8ZXJy
bm8uaD4KLQotLyogI2luY2x1ZGUgImZpbGVzeXN0ZW1fY29tbW9uLmgiICovCi0KLV9MSUJDUFBf
QkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci1uYW1lc3Bh
Y2UgewotCi0jaWYgIWRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKLXRlbXBsYXRlIDxjbGFzcyBE
aXJFbnRULCBjbGFzcyA9IGRlY2x0eXBlKERpckVudFQ6OmRfdHlwZSk+Ci1zdGF0aWMgZmlsZV90
eXBlIGdldF9maWxlX3R5cGUoRGlyRW50VCogZW50LCBpbnQpIHsKLSAgc3dpdGNoIChlbnQtPmRf
dHlwZSkgewotICBjYXNlIERUX0JMSzoKLSAgICByZXR1cm4gZmlsZV90eXBlOjpibG9jazsKLSAg
Y2FzZSBEVF9DSFI6Ci0gICAgcmV0dXJuIGZpbGVfdHlwZTo6Y2hhcmFjdGVyOwotICBjYXNlIERU
X0RJUjoKLSAgICByZXR1cm4gZmlsZV90eXBlOjpkaXJlY3Rvcnk7Ci0gIGNhc2UgRFRfRklGTzoK
LSAgICByZXR1cm4gZmlsZV90eXBlOjpmaWZvOwotICBjYXNlIERUX0xOSzoKLSAgICByZXR1cm4g
ZmlsZV90eXBlOjpzeW1saW5rOwotICBjYXNlIERUX1JFRzoKLSAgICByZXR1cm4gZmlsZV90eXBl
OjpyZWd1bGFyOwotICBjYXNlIERUX1NPQ0s6Ci0gICAgcmV0dXJuIGZpbGVfdHlwZTo6c29ja2V0
OwotICAvLyBVbmxpa2UgaW4gbHN0YXQsIGhpdHRpbmcgInVua25vd24iIGhlcmUgc2ltcGx5IG1l
YW5zIHRoYXQgdGhlIHVuZGVybHlpbmcKLSAgLy8gZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQg
ZF90eXBlLiBSZXBvcnQgaXMgYXMgJ25vbmUnIHNvIHdlIGNvcnJlY3RseQotICAvLyBzZXQgdGhl
IGNhY2hlIHRvIGVtcHR5LgotICBjYXNlIERUX1VOS05PV046Ci0gICAgYnJlYWs7Ci0gIH0KLSAg
cmV0dXJuIGZpbGVfdHlwZTo6bm9uZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIERpckVudFQ+Ci1z
dGF0aWMgZmlsZV90eXBlIGdldF9maWxlX3R5cGUoRGlyRW50VCogZW50LCBsb25nKSB7Ci0gIHJl
dHVybiBmaWxlX3R5cGU6Om5vbmU7Ci19Ci0KLXN0YXRpYyBwYWlyPHN0cmluZ192aWV3LCBmaWxl
X3R5cGU+IHBvc2l4X3JlYWRkaXIoRElSKiBkaXJfc3RyZWFtLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgewotICBzdHJ1
Y3QgZGlyZW50KiBkaXJfZW50cnlfcHRyID0gbnVsbHB0cjsKLSAgZXJybm8gPSAwOyAvLyB6ZXJv
IGVycm5vIGluIG9yZGVyIHRvIGRldGVjdCBlcnJvcnMKLSAgZWMuY2xlYXIoKTsKLSAgaWYgKChk
aXJfZW50cnlfcHRyID0gOjpyZWFkZGlyKGRpcl9zdHJlYW0pKSA9PSBudWxscHRyKSB7Ci0gICAg
aWYgKGVycm5vKQotICAgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7Ci0gICAgcmV0dXJuIHt9Owot
ICB9IGVsc2UgewotICAgIHJldHVybiB7ZGlyX2VudHJ5X3B0ci0+ZF9uYW1lLCBnZXRfZmlsZV90
eXBlKGRpcl9lbnRyeV9wdHIsIDApfTsKLSAgfQotfQotI2Vsc2UKLQotc3RhdGljIGZpbGVfdHlw
ZSBnZXRfZmlsZV90eXBlKGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYgZGF0YSkgewotICAvL2F1dG8g
YXR0cnMgPSBkYXRhLmR3RmlsZUF0dHJpYnV0ZXM7Ci0gIC8vIEZJWE1FKEVyaWNXRikKLSAgcmV0
dXJuIGZpbGVfdHlwZTo6dW5rbm93bjsKLX0KLXN0YXRpYyB1aW50bWF4X3QgZ2V0X2ZpbGVfc2l6
ZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKLSAgcmV0dXJuIChkYXRhLm5GaWxlU2l6
ZUhpZ2h0ICogKE1BWERXT1JEICsgMSkpICsgZGF0YS5uRmlsZVNpemVMb3c7Ci19Ci1zdGF0aWMg
ZmlsZV90aW1lX3R5cGUgZ2V0X3dyaXRlX3RpbWUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRh
KSB7Ci0gIFVMQVJHRV9JTlRFR0VSIHRtcDsKLSAgRklMRVRJTUUmIHRpbWUgPSBkYXRhLmZ0TGFz
dFdyaXRlVGltZTsKLSAgdG1wLnUuTG93UGFydCA9IHRpbWUuZHdMb3dEYXRlVGltZTsKLSAgdG1w
LnUuSGlnaFBhcnQgPSB0aW1lLmR3SGlnaERhdGVUaW1lOwotICByZXR1cm4gZmlsZV90aW1lX3R5
cGUoZmlsZV90aW1lX3R5cGU6OmR1cmF0aW9uKHRpbWUuUXVhZFBhcnQpKTsKLX0KLQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotdXNpbmcgZGV0YWls
OjpFcnJvckhhbmRsZXI7Ci0KLSNpZiBkZWZpbmVkKF9MSUJDUFBfV0lOMzJBUEkpCi1jbGFzcyBf
X2Rpcl9zdHJlYW0gewotcHVibGljOgotICBfX2Rpcl9zdHJlYW0oKSA9IGRlbGV0ZTsKLSAgX19k
aXJfc3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgX19kaXJfc3RyZWFtJikgPSBkZWxldGU7Ci0KLSAg
X19kaXJfc3RyZWFtKF9fZGlyX3N0cmVhbSYmIF9fZHMpIG5vZXhjZXB0IDogX19zdHJlYW1fKF9f
ZHMuX19zdHJlYW1fKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yb290Xyhtb3ZlKF9fZHMuX19yb290XykpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VudHJ5Xyhtb3ZlKF9fZHMuX19lbnRyeV8pKSB7
Ci0gICAgX19kcy5fX3N0cmVhbV8gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLSAgfQotCi0gIF9f
ZGlyX3N0cmVhbShjb25zdCBwYXRoJiByb290LCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRzLCBlcnJv
cl9jb2RlJiBlYykKLSAgICAgIDogX19zdHJlYW1fKElOVkFMSURfSEFORExFX1ZBTFVFKSwgX19y
b290Xyhyb290KSB7Ci0gICAgX19zdHJlYW1fID0gOjpGaW5kRmlyc3RGaWxlRXgocm9vdC5jX3N0
cigpLCAmX19kYXRhXyk7Ci0gICAgaWYgKF9fc3RyZWFtXyA9PSBJTlZBTElEX0hBTkRMRV9WQUxV
RSkgewotICAgICAgZWMgPSBlcnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0
ZWdvcnkoKSk7Ci0gICAgICBjb25zdCBib29sIGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCA9Ci0g
ICAgICAgICAgYm9vbChvcHRzICYgZGlyZWN0b3J5X29wdGlvbnM6OnNraXBfcGVybWlzc2lvbl9k
ZW5pZWQpOwotICAgICAgaWYgKGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCAmJiBlYy52YWx1ZSgp
ID09IEVSUk9SX0FDQ0VTU19ERU5JRUQpCi0gICAgICAgIGVjLmNsZWFyKCk7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICB9Ci0KLSAgfl9fZGlyX3N0cmVhbSgpIG5vZXhjZXB0IHsKLSAgICBpZiAo
X19zdHJlYW1fID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgcmV0dXJuOwotICAgIGNs
b3NlKCk7Ci0gIH0KLQotICBib29sIGdvb2QoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0
cmVhbV8gIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7IH0KLQotICBib29sIGFkdmFuY2UoZXJyb3Jf
Y29kZSYgZWMpIHsKLSAgICB3aGlsZSAoOjpGaW5kTmV4dEZpbGUoX19zdHJlYW1fLCAmX19kYXRh
XykpIHsKLSAgICAgIGlmICghc3RyY21wKF9fZGF0YV8uY0ZpbGVOYW1lLCAiLiIpIHx8IHN0cmNt
cChfX2RhdGFfLmNGaWxlTmFtZSwgIi4uIikpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgLy8g
RklYTUU6IENhY2hlIG1vcmUgb2YgdGhpcwotICAgICAgLy9kaXJlY3RvcnlfZW50cnk6Ol9fY2Fj
aGVkX2RhdGEgY2RhdGE7Ci0gICAgICAvL2NkYXRhLl9fdHlwZV8gPSBnZXRfZmlsZV90eXBlKF9f
ZGF0YV8pOwotICAgICAgLy9jZGF0YS5fX3NpemVfID0gZ2V0X2ZpbGVfc2l6ZShfX2RhdGFfKTsK
LSAgICAgIC8vY2RhdGEuX193cml0ZV90aW1lXyA9IGdldF93cml0ZV90aW1lKF9fZGF0YV8pOwot
ICAgICAgX19lbnRyeV8uX19hc3NpZ25faXRlcl9lbnRyeSgKLSAgICAgICAgICBfX3Jvb3RfIC8g
X19kYXRhXy5jRmlsZU5hbWUsCi0gICAgICAgICAgZGlyZWN0b3J5X2VudHJ5OjpfX2NyZWF0ZV9p
dGVyX3Jlc3VsdChnZXRfZmlsZV90eXBlKF9fZGF0YSkpKTsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRl
Z29yeSgpKTsKLSAgICBjbG9zZSgpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi1wcml2YXRl
OgotICBlcnJvcl9jb2RlIGNsb3NlKCkgbm9leGNlcHQgewotICAgIGVycm9yX2NvZGUgZWM7Ci0g
ICAgaWYgKCE6OkZpbmRDbG9zZShfX3N0cmVhbV8pKQotICAgICAgZWMgPSBlcnJvcl9jb2RlKDo6
R2V0TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0ZWdvcnkoKSk7Ci0gICAgX19zdHJlYW1fID0gSU5W
QUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgcmV0dXJuIGVjOwotICB9Ci0KLSAgSEFORExFIF9fc3Ry
ZWFtX3tJTlZBTElEX0hBTkRMRV9WQUxVRX07Ci0gIFdJTjMyX0ZJTkRfREFUQSBfX2RhdGFfOwot
Ci1wdWJsaWM6Ci0gIHBhdGggX19yb290XzsKLSAgZGlyZWN0b3J5X2VudHJ5IF9fZW50cnlfOwot
fTsKLSNlbHNlCi1jbGFzcyBfX2Rpcl9zdHJlYW0gewotcHVibGljOgotICBfX2Rpcl9zdHJlYW0o
KSA9IGRlbGV0ZTsKLSAgX19kaXJfc3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgX19kaXJfc3RyZWFt
JikgPSBkZWxldGU7Ci0KLSAgX19kaXJfc3RyZWFtKF9fZGlyX3N0cmVhbSYmIG90aGVyKSBub2V4
Y2VwdCA6IF9fc3RyZWFtXyhvdGhlci5fX3N0cmVhbV8pLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yb290Xyhtb3ZlKG90aGVyLl9fcm9vdF8pKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW50cnlf
KG1vdmUob3RoZXIuX19lbnRyeV8pKSB7Ci0gICAgb3RoZXIuX19zdHJlYW1fID0gbnVsbHB0cjsK
LSAgfQotCi0gIF9fZGlyX3N0cmVhbShjb25zdCBwYXRoJiByb290LCBkaXJlY3Rvcnlfb3B0aW9u
cyBvcHRzLCBlcnJvcl9jb2RlJiBlYykKLSAgICAgIDogX19zdHJlYW1fKG51bGxwdHIpLCBfX3Jv
b3RfKHJvb3QpIHsKLSAgICBpZiAoKF9fc3RyZWFtXyA9IDo6b3BlbmRpcihyb290LmNfc3RyKCkp
KSA9PSBudWxscHRyKSB7Ci0gICAgICBlYyA9IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOwotICAg
ICAgY29uc3QgYm9vbCBhbGxvd19lYWNlc3MgPQotICAgICAgICAgIGJvb2wob3B0cyAmIGRpcmVj
dG9yeV9vcHRpb25zOjpza2lwX3Blcm1pc3Npb25fZGVuaWVkKTsKLSAgICAgIGlmIChhbGxvd19l
YWNlc3MgJiYgZWMudmFsdWUoKSA9PSBFQUNDRVMpCi0gICAgICAgIGVjLmNsZWFyKCk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGFkdmFuY2UoZWMpOwotICB9Ci0KLSAgfl9fZGlyX3N0cmVh
bSgpIG5vZXhjZXB0IHsKLSAgICBpZiAoX19zdHJlYW1fKQotICAgICAgY2xvc2UoKTsKLSAgfQot
Ci0gIGJvb2wgZ29vZCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RyZWFtXyAhPSBudWxs
cHRyOyB9Ci0KLSAgYm9vbCBhZHZhbmNlKGVycm9yX2NvZGUmIGVjKSB7Ci0gICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgIGF1dG8gc3RyX3R5cGVfcGFpciA9IGRldGFpbDo6cG9zaXhfcmVhZGRpcihf
X3N0cmVhbV8sIGVjKTsKLSAgICAgIGF1dG8mIHN0ciA9IHN0cl90eXBlX3BhaXIuZmlyc3Q7Ci0g
ICAgICBpZiAoc3RyID09ICIuIiB8fCBzdHIgPT0gIi4uIikgewotICAgICAgICBjb250aW51ZTsK
LSAgICAgIH0gZWxzZSBpZiAoZWMgfHwgc3RyLmVtcHR5KCkpIHsKLSAgICAgICAgY2xvc2UoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgX19lbnRyeV8u
X19hc3NpZ25faXRlcl9lbnRyeSgKLSAgICAgICAgICAgIF9fcm9vdF8gLyBzdHIsCi0gICAgICAg
ICAgICBkaXJlY3RvcnlfZW50cnk6Ol9fY3JlYXRlX2l0ZXJfcmVzdWx0KHN0cl90eXBlX3BhaXIu
c2Vjb25kKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgfQotCi1w
cml2YXRlOgotICBlcnJvcl9jb2RlIGNsb3NlKCkgbm9leGNlcHQgewotICAgIGVycm9yX2NvZGUg
bV9lYzsKLSAgICBpZiAoOjpjbG9zZWRpcihfX3N0cmVhbV8pID09IC0xKQotICAgICAgbV9lYyA9
IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOwotICAgIF9fc3RyZWFtXyA9IG51bGxwdHI7Ci0gICAg
cmV0dXJuIG1fZWM7Ci0gIH0KLQotICBESVIqIF9fc3RyZWFtX3tudWxscHRyfTsKLQotcHVibGlj
OgotICBwYXRoIF9fcm9vdF87Ci0gIGRpcmVjdG9yeV9lbnRyeSBfX2VudHJ5XzsKLX07Ci0jZW5k
aWYKLQotLy8gZGlyZWN0b3J5X2l0ZXJhdG9yCi0KLWRpcmVjdG9yeV9pdGVyYXRvcjo6ZGlyZWN0
b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMgb3B0cykgewotICBF
cnJvckhhbmRsZXI8dm9pZD4gZXJyKCJkaXJlY3RvcnlfaXRlcmF0b3I6OmRpcmVjdG9yeV9pdGVy
YXRvciguLi4pIiwgZWMsICZwKTsKLQotICBlcnJvcl9jb2RlIG1fZWM7Ci0gIF9faW1wXyA9IG1h
a2Vfc2hhcmVkPF9fZGlyX3N0cmVhbT4ocCwgb3B0cywgbV9lYyk7Ci0gIGlmIChlYykKLSAgICAq
ZWMgPSBtX2VjOwotICBpZiAoIV9faW1wXy0+Z29vZCgpKSB7Ci0gICAgX19pbXBfLnJlc2V0KCk7
Ci0gICAgaWYgKG1fZWMpCi0gICAgICBlcnIucmVwb3J0KG1fZWMpOwotICB9Ci19Ci0KLWRpcmVj
dG9yeV9pdGVyYXRvciYgZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2luY3JlbWVudChlcnJvcl9jb2Rl
KiBlYykgewotICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJBdHRlbXB0aW5nIHRvIGluY3JlbWVu
dCBhbiBpbnZhbGlkIGl0ZXJhdG9yIik7Ci0gIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImRpcmVj
dG9yeV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpIiwgZWMpOwotCi0gIGVycm9yX2NvZGUgbV9lYzsK
LSAgaWYgKCFfX2ltcF8tPmFkdmFuY2UobV9lYykpIHsKLSAgICBwYXRoIHJvb3QgPSBtb3ZlKF9f
aW1wXy0+X19yb290Xyk7Ci0gICAgX19pbXBfLnJlc2V0KCk7Ci0gICAgaWYgKG1fZWMpCi0gICAg
ICBlcnIucmVwb3J0KG1fZWMsICJhdCByb290IFwiJXNcIiIsIHJvb3QpOwotICB9Ci0gIHJldHVy
biAqdGhpczsKLX0KLQotZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBkaXJlY3RvcnlfaXRlcmF0b3I6
Ol9fZGVyZWZlcmVuY2UoKSBjb25zdCB7Ci0gIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIkF0dGVt
cHRpbmcgdG8gZGVyZWZlcmVuY2UgYW4gaW52YWxpZCBpdGVyYXRvciIpOwotICByZXR1cm4gX19p
bXBfLT5fX2VudHJ5XzsKLX0KLQotLy8gcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgotCi1z
dHJ1Y3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19zaGFyZWRfaW1wIHsKLSAgc3Rh
Y2s8X19kaXJfc3RyZWFtPiBfX3N0YWNrXzsKLSAgZGlyZWN0b3J5X29wdGlvbnMgX19vcHRpb25z
XzsKLX07Ci0KLXJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6OnJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3IoCi0gICAgY29uc3QgcGF0aCYgcCwgZGlyZWN0b3J5X29wdGlvbnMgb3B0LCBl
cnJvcl9jb2RlKiBlYykKLSAgICA6IF9faW1wXyhudWxscHRyKSwgX19yZWNfKHRydWUpIHsKLSAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciIsIGVj
LCAmcCk7Ci0KLSAgZXJyb3JfY29kZSBtX2VjOwotICBfX2Rpcl9zdHJlYW0gbmV3X3MocCwgb3B0
LCBtX2VjKTsKLSAgaWYgKG1fZWMpCi0gICAgZXJyLnJlcG9ydChtX2VjKTsKLSAgaWYgKG1fZWMg
fHwgIW5ld19zLmdvb2QoKSkKLSAgICByZXR1cm47Ci0KLSAgX19pbXBfID0gbWFrZV9zaGFyZWQ8
X19zaGFyZWRfaW1wPigpOwotICBfX2ltcF8tPl9fb3B0aW9uc18gPSBvcHQ7Ci0gIF9faW1wXy0+
X19zdGFja18ucHVzaChtb3ZlKG5ld19zKSk7Ci19Ci0KLXZvaWQgcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcjo6X19wb3AoZXJyb3JfY29kZSogZWMpIHsKLSAgX0xJQkNQUF9BU1NFUlQoX19p
bXBfLCAiUG9wcGluZyB0aGUgZW5kIGl0ZXJhdG9yIik7Ci0gIGlmIChlYykKLSAgICBlYy0+Y2xl
YXIoKTsKLSAgX19pbXBfLT5fX3N0YWNrXy5wb3AoKTsKLSAgaWYgKF9faW1wXy0+X19zdGFja18u
c2l6ZSgpID09IDApCi0gICAgX19pbXBfLnJlc2V0KCk7Ci0gIGVsc2UKLSAgICBfX2FkdmFuY2Uo
ZWMpOwotfQotCi1kaXJlY3Rvcnlfb3B0aW9ucyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
OjpvcHRpb25zKCkgY29uc3QgewotICByZXR1cm4gX19pbXBfLT5fX29wdGlvbnNfOwotfQotCi1p
bnQgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6ZGVwdGgoKSBjb25zdCB7Ci0gIHJldHVy
biBfX2ltcF8tPl9fc3RhY2tfLnNpemUoKSAtIDE7Ci19Ci0KLWNvbnN0IGRpcmVjdG9yeV9lbnRy
eSYgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19kZXJlZmVyZW5jZSgpIGNvbnN0IHsK
LSAgcmV0dXJuIF9faW1wXy0+X19zdGFja18udG9wKCkuX19lbnRyeV87Ci19Ci0KLXJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3ImCi1yZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2lu
Y3JlbWVudChlcnJvcl9jb2RlKiBlYykgewotICBpZiAoZWMpCi0gICAgZWMtPmNsZWFyKCk7Ci0g
IGlmIChyZWN1cnNpb25fcGVuZGluZygpKSB7Ci0gICAgaWYgKF9fdHJ5X3JlY3Vyc2lvbihlYykg
fHwgKGVjICYmICplYykpCi0gICAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgX19yZWNfID0gdHJ1
ZTsKLSAgX19hZHZhbmNlKGVjKTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi12b2lkIHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fYWR2YW5jZShlcnJvcl9jb2RlKiBlYykgewotICBFcnJv
ckhhbmRsZXI8dm9pZD4gZXJyKCJyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRv
cisrKCkiLCBlYyk7Ci0KLSAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yIGVuZF9pdDsKLSAgYXV0
byYgc3RhY2sgPSBfX2ltcF8tPl9fc3RhY2tfOwotICBlcnJvcl9jb2RlIG1fZWM7Ci0gIHdoaWxl
IChzdGFjay5zaXplKCkgPiAwKSB7Ci0gICAgaWYgKHN0YWNrLnRvcCgpLmFkdmFuY2UobV9lYykp
Ci0gICAgICByZXR1cm47Ci0gICAgaWYgKG1fZWMpCi0gICAgICBicmVhazsKLSAgICBzdGFjay5w
b3AoKTsKLSAgfQotCi0gIGlmIChtX2VjKSB7Ci0gICAgcGF0aCByb290ID0gbW92ZShzdGFjay50
b3AoKS5fX3Jvb3RfKTsKLSAgICBfX2ltcF8ucmVzZXQoKTsKLSAgICBlcnIucmVwb3J0KG1fZWMs
ICJhdCByb290IFwiJXNcIiIsIHJvb3QpOwotICB9IGVsc2UgewotICAgIF9faW1wXy5yZXNldCgp
OwotICB9Ci19Ci0KLWJvb2wgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X190cnlfcmVj
dXJzaW9uKGVycm9yX2NvZGUqIGVjKSB7Ci0gIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKLQotICBib29sIHJl
Y19zeW0gPSBib29sKG9wdGlvbnMoKSAmIGRpcmVjdG9yeV9vcHRpb25zOjpmb2xsb3dfZGlyZWN0
b3J5X3N5bWxpbmspOwotCi0gIGF1dG8mIGN1cnJfaXQgPSBfX2ltcF8tPl9fc3RhY2tfLnRvcCgp
OwotCi0gIGJvb2wgc2tpcF9yZWMgPSBmYWxzZTsKLSAgZXJyb3JfY29kZSBtX2VjOwotICBpZiAo
IXJlY19zeW0pIHsKLSAgICBmaWxlX3N0YXR1cyBzdChjdXJyX2l0Ll9fZW50cnlfLl9fZ2V0X3N5
bV9mdCgmbV9lYykpOwotICAgIGlmIChtX2VjICYmIHN0YXR1c19rbm93bihzdCkpCi0gICAgICBt
X2VjLmNsZWFyKCk7Ci0gICAgaWYgKG1fZWMgfHwgaXNfc3ltbGluayhzdCkgfHwgIWlzX2RpcmVj
dG9yeShzdCkpCi0gICAgICBza2lwX3JlYyA9IHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgZmlsZV9z
dGF0dXMgc3QoY3Vycl9pdC5fX2VudHJ5Xy5fX2dldF9mdCgmbV9lYykpOwotICAgIGlmIChtX2Vj
ICYmIHN0YXR1c19rbm93bihzdCkpCi0gICAgICBtX2VjLmNsZWFyKCk7Ci0gICAgaWYgKG1fZWMg
fHwgIWlzX2RpcmVjdG9yeShzdCkpCi0gICAgICBza2lwX3JlYyA9IHRydWU7Ci0gIH0KLQotICBp
ZiAoIXNraXBfcmVjKSB7Ci0gICAgX19kaXJfc3RyZWFtIG5ld19pdChjdXJyX2l0Ll9fZW50cnlf
LnBhdGgoKSwgX19pbXBfLT5fX29wdGlvbnNfLCBtX2VjKTsKLSAgICBpZiAobmV3X2l0Lmdvb2Qo
KSkgewotICAgICAgX19pbXBfLT5fX3N0YWNrXy5wdXNoKG1vdmUobmV3X2l0KSk7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgaWYgKG1fZWMpIHsKLSAgICBjb25zdCBib29sIGFs
bG93X2VhY2VzcyA9Ci0gICAgICAgIGJvb2woX19pbXBfLT5fX29wdGlvbnNfICYgZGlyZWN0b3J5
X29wdGlvbnM6OnNraXBfcGVybWlzc2lvbl9kZW5pZWQpOwotICAgIGlmIChtX2VjLnZhbHVlKCkg
PT0gRUFDQ0VTICYmIGFsbG93X2VhY2VzcykgewotICAgICAgaWYgKGVjKQotICAgICAgICBlYy0+
Y2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgcGF0aCBhdF9lbnQgPSBtb3ZlKGN1cnJfaXQu
X19lbnRyeV8uX19wXyk7Ci0gICAgICBfX2ltcF8ucmVzZXQoKTsKLSAgICAgIGVyci5yZXBvcnQo
bV9lYywgImF0dGVtcHRpbmcgcmVjdXJzaW9uIGludG8gXCIlc1wiIiwgYXRfZW50KTsKLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1fTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZ
U1RFTQotCi0vKiAtLSBFTkQgZmlsZXN5c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwIC0tICov
Ci0KLS8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCAtLSAqLwotCi0v
KiA9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogVGhpcyBmaWxlIGltcGxlbWVudHMgX19tdWxv
dGk0LCBhbmQgaXMgc3RvbGVuIGZyb20gdGhlIGNvbXBpbGVyX3J0IGxpYnJhcnkuCi0gKgotICog
RklYTUU6IHdlIHN0ZWFsIGFuZCByZS1jb21waWxlIGl0IGludG8gZmlsZXN5c3RlbSwgd2hpY2gg
dXNlcyBfX2ludDEyOF90LAotICogYW5kIHJlcXVpcmVzIHRoaXMgYnVpbHRpbiB3aGVuIHNhbml0
aXplZC4gU2VlIGxsdm0ub3JnL1BSMzA2NDMKLSAqCi0gKiA9PT0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0g
Ki8KLQotLyogI2luY2x1ZGUgIl9fY29uZmlnIiAqLwotI2luY2x1ZGUgPGNsaW1pdHM+Ci0KLSNp
Zm5kZWYgX19TSVpFT0ZfSU5UMTI4X18KLSNkZWZpbmUgX0xJQkNQUF9IQVNfTk9fSU5UMTI4Ci0j
ZW5kaWYKLQotI2lmICFkZWZpbmVkKF9MSUJDUFBfSEFTX05PX0lOVDEyOCkKLQotI2lmZGVmIF9f
Y2xhbmdfXwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctcHJvdG90eXBlcyIKLSNlbmRpZgotZXh0ZXJuICJD
IiBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZSgidW5kZWZpbmVkIikpKQotX19pbnQxMjhfdCBf
X211bG90aTQoX19pbnQxMjhfdCBhLCBfX2ludDEyOF90IGIsIGludCogb3ZlcmZsb3cpIHsKLSAg
Y29uc3QgaW50IE4gPSAoaW50KShzaXplb2YoX19pbnQxMjhfdCkgKiBDSEFSX0JJVCk7Ci0gIGNv
bnN0IF9faW50MTI4X3QgTUlOID0gKF9faW50MTI4X3QpMSA8PCAoTiAtIDEpOwotICBjb25zdCBf
X2ludDEyOF90IE1BWCA9IH5NSU47Ci0gICpvdmVyZmxvdyA9IDA7Ci0gIF9faW50MTI4X3QgcmVz
dWx0ID0gYSAqIGI7Ci0gIGlmIChhID09IE1JTikgewotICAgIGlmIChiICE9IDAgJiYgYiAhPSAx
KQotICAgICAgKm92ZXJmbG93ID0gMTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIGlmIChi
ID09IE1JTikgewotICAgIGlmIChhICE9IDAgJiYgYSAhPSAxKQotICAgICAgKm92ZXJmbG93ID0g
MTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIF9faW50MTI4X3Qgc2EgPSBhID4+IChOIC0g
MSk7Ci0gIF9faW50MTI4X3QgYWJzX2EgPSAoYSBeIHNhKSAtIHNhOwotICBfX2ludDEyOF90IHNi
ID0gYiA+PiAoTiAtIDEpOwotICBfX2ludDEyOF90IGFic19iID0gKGIgXiBzYikgLSBzYjsKLSAg
aWYgKGFic19hIDwgMiB8fCBhYnNfYiA8IDIpCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgaWYgKHNh
ID09IHNiKSB7Ci0gICAgaWYgKGFic19hID4gTUFYIC8gYWJzX2IpCi0gICAgICAqb3ZlcmZsb3cg
PSAxOwotICB9IGVsc2UgewotICAgIGlmIChhYnNfYSA+IE1JTiAvIC1hYnNfYikKLSAgICAgICpv
dmVyZmxvdyA9IDE7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNpZmRlZiBfX2NsYW5nX18K
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0jZW5kaWYKLQotLyogLS0g
RU5EIGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCAtLSAqLwotCi0vKiAtLSBCRUdJTiBm
aWxlc3lzdGVtL29wZXJhdGlvbnMuY3BwIC0tICovCi0KLS8qICNpbmNsdWRlICJmaWxlc3lzdGVt
IiAqLwotI2luY2x1ZGUgPGFycmF5PgotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPGZz
dHJlYW0+Ci0jaW5jbHVkZSA8cmFuZG9tPiAvKiBmb3IgdW5pcXVlX3BhdGggKi8KLSNpbmNsdWRl
IDxzdHJpbmdfdmlldz4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx2ZWN0b3I+
Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjbGltaXRzPgotCi0vKiAjaW5jbHVkZSAi
ZmlsZXN5c3RlbV9jb21tb24uaCIgKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNpbmNsdWRlIDx0aW1lLmg+
Ci0jaW5jbHVkZSA8ZmNudGwuaD4gLyogdmFsdWVzIGZvciBmY2htb2RhdCAqLwotCi0jaWYgZGVm
aW5lZChfX2xpbnV4X18pCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2lmIExJTlVYX1ZF
UlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAzMykKLSNpbmNsdWRlIDxzeXMvc2Vu
ZGZpbGUuaD4KLSNkZWZpbmUgX0xJQkNQUF9VU0VfU0VOREZJTEUKLSNlbmRpZgotI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IF9faGFzX2luY2x1ZGUoPGNvcHlmaWxlLmg+KQotI2luY2x1ZGUg
PGNvcHlmaWxlLmg+Ci0jZGVmaW5lIF9MSUJDUFBfVVNFX0NPUFlGSUxFCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKF9fQVBQTEVfXykKLSNkZWZpbmUgX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElNRQot
I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkgfHwgIWRlZmluZWQoX0xJQkNQ
UF9VU0VfQ0xPQ0tfR0VUVElNRSkKLSNpbmNsdWRlIDxzeXMvdGltZS5oPiAvLyBmb3IgZ2V0dGlt
ZW9mZGF5IGFuZCB0aW1ldmFsCi0jZW5kaWYgICAgICAgICAgICAgICAgLy8gIWRlZmluZWQoQ0xP
Q0tfUkVBTFRJTUUpCi0KLSNpZiBkZWZpbmVkKF9MSUJDUFBfQ09NUElMRVJfR0NDKQotI2lmIF9H
TlVDX1ZFUiA8IDUwMAotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmct
ZmllbGQtaW5pdGlhbGl6ZXJzIgotI2VuZGlmCi0jZW5kaWYKLQotX0xJQkNQUF9CRUdJTl9OQU1F
U1BBQ0VfRklMRVNZU1RFTQotCi1uYW1lc3BhY2UgewotbmFtZXNwYWNlIHBhcnNlciB7Ci0KLXVz
aW5nIHN0cmluZ192aWV3X3QgPSBwYXRoOjpfX3N0cmluZ192aWV3OwotdXNpbmcgc3RyaW5nX3Zp
ZXdfcGFpciA9IHBhaXI8c3RyaW5nX3ZpZXdfdCwgc3RyaW5nX3ZpZXdfdD47Ci11c2luZyBQb3NQ
dHIgPSBwYXRoOjp2YWx1ZV90eXBlIGNvbnN0KjsKLQotc3RydWN0IFBhdGhQYXJzZXIgewotICBl
bnVtIFBhcnNlclN0YXRlIDogdW5zaWduZWQgY2hhciB7Ci0gICAgLy8gWmVybyBpcyBhIHNwZWNp
YWwgc2VudGluZWwgdmFsdWUgdXNlZCBieSBkZWZhdWx0IGNvbnN0cnVjdGVkIGl0ZXJhdG9ycy4K
LSAgICBQU19CZWZvcmVCZWdpbiA9IHBhdGg6Oml0ZXJhdG9yOjpfQmVmb3JlQmVnaW4sCi0gICAg
UFNfSW5Sb290TmFtZSA9IHBhdGg6Oml0ZXJhdG9yOjpfSW5Sb290TmFtZSwKLSAgICBQU19JblJv
b3REaXIgPSBwYXRoOjppdGVyYXRvcjo6X0luUm9vdERpciwKLSAgICBQU19JbkZpbGVuYW1lcyA9
IHBhdGg6Oml0ZXJhdG9yOjpfSW5GaWxlbmFtZXMsCi0gICAgUFNfSW5UcmFpbGluZ1NlcCA9IHBh
dGg6Oml0ZXJhdG9yOjpfSW5UcmFpbGluZ1NlcCwKLSAgICBQU19BdEVuZCA9IHBhdGg6Oml0ZXJh
dG9yOjpfQXRFbmQKLSAgfTsKLQotICBjb25zdCBzdHJpbmdfdmlld190IFBhdGg7Ci0gIHN0cmlu
Z192aWV3X3QgUmF3RW50cnk7Ci0gIFBhcnNlclN0YXRlIFN0YXRlOwotCi1wcml2YXRlOgotICBQ
YXRoUGFyc2VyKHN0cmluZ192aWV3X3QgUCwgUGFyc2VyU3RhdGUgU3RhdGUpIG5vZXhjZXB0IDog
UGF0aChQKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YXRlKFN0YXRlKSB7fQotCi1wdWJsaWM6Ci0gIFBhdGhQYXJzZXIoc3Ry
aW5nX3ZpZXdfdCBQLCBzdHJpbmdfdmlld190IEUsIHVuc2lnbmVkIGNoYXIgUykKLSAgICAgIDog
UGF0aChQKSwgUmF3RW50cnkoRSksIFN0YXRlKHN0YXRpY19jYXN0PFBhcnNlclN0YXRlPihTKSkg
ewotICAgIC8vIFMgY2Fubm90IGJlICcwJyBvciBQU19CZWZvcmVCZWdpbi4KLSAgfQotCi0gIHN0
YXRpYyBQYXRoUGFyc2VyIENyZWF0ZUJlZ2luKHN0cmluZ192aWV3X3QgUCkgbm9leGNlcHQgewot
ICAgIFBhdGhQYXJzZXIgUFAoUCwgUFNfQmVmb3JlQmVnaW4pOwotICAgIFBQLmluY3JlbWVudCgp
OwotICAgIHJldHVybiBQUDsKLSAgfQotCi0gIHN0YXRpYyBQYXRoUGFyc2VyIENyZWF0ZUVuZChz
dHJpbmdfdmlld190IFApIG5vZXhjZXB0IHsKLSAgICBQYXRoUGFyc2VyIFBQKFAsIFBTX0F0RW5k
KTsKLSAgICByZXR1cm4gUFA7Ci0gIH0KLQotICBQb3NQdHIgcGVlaygpIGNvbnN0IG5vZXhjZXB0
IHsKLSAgICBhdXRvIFRrRW5kID0gZ2V0TmV4dFRva2VuU3RhcnRQb3MoKTsKLSAgICBhdXRvIEVu
ZCA9IGdldEFmdGVyQmFjaygpOwotICAgIHJldHVybiBUa0VuZCA9PSBFbmQgPyBudWxscHRyIDog
VGtFbmQ7Ci0gIH0KLQotICB2b2lkIGluY3JlbWVudCgpIG5vZXhjZXB0IHsKLSAgICBjb25zdCBQ
b3NQdHIgRW5kID0gZ2V0QWZ0ZXJCYWNrKCk7Ci0gICAgY29uc3QgUG9zUHRyIFN0YXJ0ID0gZ2V0
TmV4dFRva2VuU3RhcnRQb3MoKTsKLSAgICBpZiAoU3RhcnQgPT0gRW5kKQotICAgICAgcmV0dXJu
IG1ha2VTdGF0ZShQU19BdEVuZCk7Ci0KLSAgICBzd2l0Y2ggKFN0YXRlKSB7Ci0gICAgY2FzZSBQ
U19CZWZvcmVCZWdpbjogewotICAgICAgUG9zUHRyIFRrRW5kID0gY29uc3VtZVNlcGFyYXRvcihT
dGFydCwgRW5kKTsKLSAgICAgIGlmIChUa0VuZCkKLSAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQ
U19JblJvb3REaXIsIFN0YXJ0LCBUa0VuZCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBt
YWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFN0YXJ0LCBjb25zdW1lTmFtZShTdGFydCwgRW5kKSk7
Ci0gICAgfQotICAgIGNhc2UgUFNfSW5Sb290RGlyOgotICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQ
U19JbkZpbGVuYW1lcywgU3RhcnQsIGNvbnN1bWVOYW1lKFN0YXJ0LCBFbmQpKTsKLQotICAgIGNh
c2UgUFNfSW5GaWxlbmFtZXM6IHsKLSAgICAgIFBvc1B0ciBTZXBFbmQgPSBjb25zdW1lU2VwYXJh
dG9yKFN0YXJ0LCBFbmQpOwotICAgICAgaWYgKFNlcEVuZCAhPSBFbmQpIHsKLSAgICAgICAgUG9z
UHRyIFRrRW5kID0gY29uc3VtZU5hbWUoU2VwRW5kLCBFbmQpOwotICAgICAgICBpZiAoVGtFbmQp
Ci0gICAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgU2VwRW5kLCBUa0Vu
ZCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luVHJhaWxpbmdTZXAsIFN0
YXJ0LCBTZXBFbmQpOwotICAgIH0KLQotICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKLSAgICAg
IHJldHVybiBtYWtlU3RhdGUoUFNfQXRFbmQpOwotCi0gICAgY2FzZSBQU19JblJvb3ROYW1lOgot
ICAgIGNhc2UgUFNfQXRFbmQ6Ci0gICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
ICB9Ci0KLSAgdm9pZCBkZWNyZW1lbnQoKSBub2V4Y2VwdCB7Ci0gICAgY29uc3QgUG9zUHRyIFJF
bmQgPSBnZXRCZWZvcmVGcm9udCgpOwotICAgIGNvbnN0IFBvc1B0ciBSU3RhcnQgPSBnZXRDdXJy
ZW50VG9rZW5TdGFydFBvcygpIC0gMTsKLSAgICBpZiAoUlN0YXJ0ID09IFJFbmQpIC8vIHdlJ3Jl
IGRlY3JlbWVudGluZyB0aGUgYmVnaW4KLSAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfQmVmb3Jl
QmVnaW4pOwotCi0gICAgc3dpdGNoIChTdGF0ZSkgewotICAgIGNhc2UgUFNfQXRFbmQ6IHsKLSAg
ICAgIC8vIFRyeSB0byBjb25zdW1lIGEgdHJhaWxpbmcgc2VwYXJhdG9yIG9yIHJvb3QgZGlyZWN0
b3J5IGZpcnN0LgotICAgICAgaWYgKFBvc1B0ciBTZXBFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFJT
dGFydCwgUkVuZCkpIHsKLSAgICAgICAgaWYgKFNlcEVuZCA9PSBSRW5kKQotICAgICAgICAgIHJl
dHVybiBtYWtlU3RhdGUoUFNfSW5Sb290RGlyLCBQYXRoLmRhdGEoKSwgUlN0YXJ0ICsgMSk7Ci0g
ICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5UcmFpbGluZ1NlcCwgU2VwRW5kICsgMSwgUlN0
YXJ0ICsgMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBQb3NQdHIgVGtTdGFydCA9IGNvbnN1
bWVOYW1lKFJTdGFydCwgUkVuZCk7Ci0gICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxl
bmFtZXMsIFRrU3RhcnQgKyAxLCBSU3RhcnQgKyAxKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2Fz
ZSBQU19JblRyYWlsaW5nU2VwOgotICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1l
cywgY29uc3VtZU5hbWUoUlN0YXJ0LCBSRW5kKSArIDEsCi0gICAgICAgICAgICAgICAgICAgICAg
IFJTdGFydCArIDEpOwotICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6IHsKLSAgICAgIFBvc1B0ciBT
ZXBFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFJTdGFydCwgUkVuZCk7Ci0gICAgICBpZiAoU2VwRW5k
ID09IFJFbmQpCi0gICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5Sb290RGlyLCBQYXRoLmRh
dGEoKSwgUlN0YXJ0ICsgMSk7Ci0gICAgICBQb3NQdHIgVGtFbmQgPSBjb25zdW1lTmFtZShTZXBF
bmQsIFJFbmQpOwotICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgVGtFbmQg
KyAxLCBTZXBFbmQgKyAxKTsKLSAgICB9Ci0gICAgY2FzZSBQU19JblJvb3REaXI6Ci0gICAgICAv
LyByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdE5hbWUsIFBhdGguZGF0YSgpLCBSU3RhcnQgKyAx
KTsKLSAgICBjYXNlIFBTX0luUm9vdE5hbWU6Ci0gICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKLSAg
ICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gIH0KLQotICAvLy8gXGJyaWVmIFJl
dHVybiBhIHZpZXcgd2l0aCB0aGUgInByZWZlcnJlZCByZXByZXNlbnRhdGlvbiIgb2YgdGhlIGN1
cnJlbnQKLSAgLy8vICAgZWxlbWVudC4gRm9yIGV4YW1wbGUgdHJhaWxpbmcgc2VwYXJhdG9ycyBh
cmUgcmVwcmVzZW50ZWQgYXMgYSAnLicKLSAgc3RyaW5nX3ZpZXdfdCBvcGVyYXRvciooKSBjb25z
dCBub2V4Y2VwdCB7Ci0gICAgc3dpdGNoIChTdGF0ZSkgewotICAgIGNhc2UgUFNfQmVmb3JlQmVn
aW46Ci0gICAgY2FzZSBQU19BdEVuZDoKLSAgICAgIHJldHVybiAiIjsKLSAgICBjYXNlIFBTX0lu
Um9vdERpcjoKLSAgICAgIHJldHVybiAiLyI7Ci0gICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgot
ICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgUFNfSW5Sb290TmFtZToKLSAgICBjYXNlIFBTX0lu
RmlsZW5hbWVzOgotICAgICAgcmV0dXJuIFJhd0VudHJ5OwotICAgIH0KLSAgICBfTElCQ1BQX1VO
UkVBQ0hBQkxFKCk7Ci0gIH0KLQotICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9l
eGNlcHQgewotICAgIHJldHVybiBTdGF0ZSAhPSBQU19CZWZvcmVCZWdpbiAmJiBTdGF0ZSAhPSBQ
U19BdEVuZDsKLSAgfQotCi0gIFBhdGhQYXJzZXImIG9wZXJhdG9yKysoKSBub2V4Y2VwdCB7Ci0g
ICAgaW5jcmVtZW50KCk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgUGF0aFBhcnNlciYg
b3BlcmF0b3ItLSgpIG5vZXhjZXB0IHsKLSAgICBkZWNyZW1lbnQoKTsKLSAgICByZXR1cm4gKnRo
aXM7Ci0gIH0KLQotICBib29sIGluUm9vdFBhdGgoKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0
dXJuIFN0YXRlID09IFBTX0luUm9vdERpciB8fCBTdGF0ZSA9PSBQU19JblJvb3ROYW1lOwotICB9
Ci0KLXByaXZhdGU6Ci0gIHZvaWQgbWFrZVN0YXRlKFBhcnNlclN0YXRlIE5ld1N0YXRlLCBQb3NQ
dHIgU3RhcnQsIFBvc1B0ciBFbmQpIG5vZXhjZXB0IHsKLSAgICBTdGF0ZSA9IE5ld1N0YXRlOwot
ICAgIFJhd0VudHJ5ID0gc3RyaW5nX3ZpZXdfdChTdGFydCwgRW5kIC0gU3RhcnQpOwotICB9Ci0g
IHZvaWQgbWFrZVN0YXRlKFBhcnNlclN0YXRlIE5ld1N0YXRlKSBub2V4Y2VwdCB7Ci0gICAgU3Rh
dGUgPSBOZXdTdGF0ZTsKLSAgICBSYXdFbnRyeSA9IHt9OwotICB9Ci0KLSAgUG9zUHRyIGdldEFm
dGVyQmFjaygpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIFBhdGguZGF0YSgpICsgUGF0aC5zaXpl
KCk7IH0KLQotICBQb3NQdHIgZ2V0QmVmb3JlRnJvbnQoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVy
biBQYXRoLmRhdGEoKSAtIDE7IH0KLQotICAvLy8gXGJyaWVmIFJldHVybiBhIHBvaW50ZXIgdG8g
dGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgY3VycmVudGx5Ci0gIC8vLyAgIGxleGVkIGVs
ZW1lbnQuCi0gIFBvc1B0ciBnZXROZXh0VG9rZW5TdGFydFBvcygpIGNvbnN0IG5vZXhjZXB0IHsK
LSAgICBzd2l0Y2ggKFN0YXRlKSB7Ci0gICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKLSAgICAgIHJl
dHVybiBQYXRoLmRhdGEoKTsKLSAgICBjYXNlIFBTX0luUm9vdE5hbWU6Ci0gICAgY2FzZSBQU19J
blJvb3REaXI6Ci0gICAgY2FzZSBQU19JbkZpbGVuYW1lczoKLSAgICAgIHJldHVybiAmUmF3RW50
cnkuYmFjaygpICsgMTsKLSAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6Ci0gICAgY2FzZSBQU19B
dEVuZDoKLSAgICAgIHJldHVybiBnZXRBZnRlckJhY2soKTsKLSAgICB9Ci0gICAgX0xJQkNQUF9V
TlJFQUNIQUJMRSgpOwotICB9Ci0KLSAgLy8vIFxicmllZiBSZXR1cm4gYSBwb2ludGVyIHRvIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnRseSBsZXhlZAotICAvLy8gICBlbGVtZW50
LgotICBQb3NQdHIgZ2V0Q3VycmVudFRva2VuU3RhcnRQb3MoKSBjb25zdCBub2V4Y2VwdCB7Ci0g
ICAgc3dpdGNoIChTdGF0ZSkgewotICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46Ci0gICAgY2FzZSBQ
U19JblJvb3ROYW1lOgotICAgICAgcmV0dXJuICZQYXRoLmZyb250KCk7Ci0gICAgY2FzZSBQU19J
blJvb3REaXI6Ci0gICAgY2FzZSBQU19JbkZpbGVuYW1lczoKLSAgICBjYXNlIFBTX0luVHJhaWxp
bmdTZXA6Ci0gICAgICByZXR1cm4gJlJhd0VudHJ5LmZyb250KCk7Ci0gICAgY2FzZSBQU19BdEVu
ZDoKLSAgICAgIHJldHVybiAmUGF0aC5iYWNrKCkgKyAxOwotICAgIH0KLSAgICBfTElCQ1BQX1VO
UkVBQ0hBQkxFKCk7Ci0gIH0KLQotICBQb3NQdHIgY29uc3VtZVNlcGFyYXRvcihQb3NQdHIgUCwg
UG9zUHRyIEVuZCkgY29uc3Qgbm9leGNlcHQgewotICAgIGlmIChQID09IEVuZCB8fCAqUCAhPSAn
LycpCi0gICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb25zdCBpbnQgSW5jID0gUCA8IEVuZCA/
IDEgOiAtMTsKLSAgICBQICs9IEluYzsKLSAgICB3aGlsZSAoUCAhPSBFbmQgJiYgKlAgPT0gJy8n
KQotICAgICAgUCArPSBJbmM7Ci0gICAgcmV0dXJuIFA7Ci0gIH0KLQotICBQb3NQdHIgY29uc3Vt
ZU5hbWUoUG9zUHRyIFAsIFBvc1B0ciBFbmQpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICBpZiAoUCA9
PSBFbmQgfHwgKlAgPT0gJy8nKQotICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29uc3QgaW50
IEluYyA9IFAgPCBFbmQgPyAxIDogLTE7Ci0gICAgUCArPSBJbmM7Ci0gICAgd2hpbGUgKFAgIT0g
RW5kICYmICpQICE9ICcvJykKLSAgICAgIFAgKz0gSW5jOwotICAgIHJldHVybiBQOwotICB9Ci19
OwotCi1zdGF0aWMgc3RyaW5nX3ZpZXdfcGFpciBzZXBhcmF0ZV9maWxlbmFtZShzdHJpbmdfdmll
d190IGNvbnN0JiBzKSB7Ci0gIGlmIChzID09ICIuIiB8fCBzID09ICIuLiIgfHwgcy5lbXB0eSgp
KQotICAgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3MsICIifTsKLSAgYXV0byBwb3MgPSBzLmZp
bmRfbGFzdF9vZignLicpOwotICBpZiAocG9zID09IHN0cmluZ192aWV3X3Q6Om5wb3MgfHwgcG9z
ID09IDApCi0gICAgcmV0dXJuIHN0cmluZ192aWV3X3BhaXJ7cywgc3RyaW5nX3ZpZXdfdHt9fTsK
LSAgcmV0dXJuIHN0cmluZ192aWV3X3BhaXJ7cy5zdWJzdHIoMCwgcG9zKSwgcy5zdWJzdHIocG9z
KX07Ci19Ci0KLXN0YXRpYyBzdHJpbmdfdmlld190IGNyZWF0ZVZpZXcoUG9zUHRyIFMsIFBvc1B0
ciBFKSBub2V4Y2VwdCB7Ci0gIHJldHVybiB7Uywgc3RhdGljX2Nhc3Q8c2l6ZV90PihFIC0gUykg
KyAxfTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgcGFyc2VyCi19IC8vIG5hbWVzcGFjZQotCi0vLyAg
ICAgICAgICAgICAgICAgICAgICAgUE9TSVggSEVMUEVSUwotCi1uYW1lc3BhY2UgZGV0YWlsIHsK
LW5hbWVzcGFjZSB7Ci0KLXVzaW5nIHZhbHVlX3R5cGUgPSBwYXRoOjp2YWx1ZV90eXBlOwotdXNp
bmcgc3RyaW5nX3R5cGUgPSBwYXRoOjpzdHJpbmdfdHlwZTsKLQotc3RydWN0IEZpbGVEZXNjcmlw
dG9yIHsKLSAgY29uc3QgcGF0aCYgbmFtZTsKLSAgaW50IGZkID0gLTE7Ci0gIFN0YXRUIG1fc3Rh
dDsKLSAgZmlsZV9zdGF0dXMgbV9zdGF0dXM7Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+
Ci0gIHN0YXRpYyBGaWxlRGVzY3JpcHRvciBjcmVhdGUoY29uc3QgcGF0aCogcCwgZXJyb3JfY29k
ZSYgZWMsIEFyZ3MuLi4gYXJncykgewotICAgIGVjLmNsZWFyKCk7Ci0gICAgaW50IGZkOwotICAg
IGlmICgoZmQgPSA6Om9wZW4ocC0+Y19zdHIoKSwgYXJncy4uLikpID09IC0xKSB7Ci0gICAgICBl
YyA9IGNhcHR1cmVfZXJybm8oKTsKLSAgICAgIHJldHVybiBGaWxlRGVzY3JpcHRvcntwfTsKLSAg
ICB9Ci0gICAgcmV0dXJuIEZpbGVEZXNjcmlwdG9yKHAsIGZkKTsKLSAgfQotCi0gIHRlbXBsYXRl
IDxjbGFzcy4uLiBBcmdzPgotICBzdGF0aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlX3dpdGhfc3Rh
dHVzKGNvbnN0IHBhdGgqIHAsIGVycm9yX2NvZGUmIGVjLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4gYXJncykgewotICAgIEZpbGVEZXNjcmlwdG9y
IGZkID0gY3JlYXRlKHAsIGVjLCBhcmdzLi4uKTsKLSAgICBpZiAoIWVjKQotICAgICAgZmQucmVm
cmVzaF9zdGF0dXMoZWMpOwotCi0gICAgcmV0dXJuIGZkOwotICB9Ci0KLSAgZmlsZV9zdGF0dXMg
Z2V0X3N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9Ci0gIFN0YXRUIGNvbnN0JiBn
ZXRfc3RhdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdDsgfQotCi0gIGJvb2wgc3RhdHVzX2tub3du
KCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OnN0YXR1c19rbm93bihtX3N0YXR1cyk7IH0KLQot
ICBmaWxlX3N0YXR1cyByZWZyZXNoX3N0YXR1cyhlcnJvcl9jb2RlJiBlYyk7Ci0KLSAgdm9pZCBj
bG9zZSgpIG5vZXhjZXB0IHsKLSAgICBpZiAoZmQgIT0gLTEpCi0gICAgICA6OmNsb3NlKGZkKTsK
LSAgICBmZCA9IC0xOwotICB9Ci0KLSAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0b3ImJiBv
dGhlcikKLSAgICAgIDogbmFtZShvdGhlci5uYW1lKSwgZmQob3RoZXIuZmQpLCBtX3N0YXQob3Ro
ZXIubV9zdGF0KSwKLSAgICAgICAgbV9zdGF0dXMob3RoZXIubV9zdGF0dXMpIHsKLSAgICBvdGhl
ci5mZCA9IC0xOwotICAgIG90aGVyLm1fc3RhdHVzID0gZmlsZV9zdGF0dXN7fTsKLSAgfQotCi0g
IH5GaWxlRGVzY3JpcHRvcigpIHsgY2xvc2UoKTsgfQotCi0gIEZpbGVEZXNjcmlwdG9yKEZpbGVE
ZXNjcmlwdG9yIGNvbnN0JikgPSBkZWxldGU7Ci0gIEZpbGVEZXNjcmlwdG9yJiBvcGVyYXRvcj0o
RmlsZURlc2NyaXB0b3IgY29uc3QmKSA9IGRlbGV0ZTsKLQotcHJpdmF0ZToKLSAgZXhwbGljaXQg
RmlsZURlc2NyaXB0b3IoY29uc3QgcGF0aCogcCwgaW50IGZkID0gLTEpIDogbmFtZSgqcCksIGZk
KGZkKSB7fQotfTsKLQotcGVybXMgcG9zaXhfZ2V0X3Blcm1zKGNvbnN0IFN0YXRUJiBzdCkgbm9l
eGNlcHQgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0LnN0X21vZGUpICYgcGVybXM6
Om1hc2s7Ci19Ci0KLTo6bW9kZV90IHBvc2l4X2NvbnZlcnRfcGVybXMocGVybXMgcHJtcykgewot
ICByZXR1cm4gc3RhdGljX2Nhc3Q8IDo6bW9kZV90Pihwcm1zICYgcGVybXM6Om1hc2spOwotfQot
Ci1maWxlX3N0YXR1cyBjcmVhdGVfZmlsZV9zdGF0dXMoZXJyb3JfY29kZSYgbV9lYywgcGF0aCBj
b25zdCYgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0VCYgcGF0
aF9zdGF0LCBlcnJvcl9jb2RlKiBlYykgewotICBpZiAoZWMpCi0gICAgKmVjID0gbV9lYzsKLSAg
aWYgKG1fZWMgJiYgKG1fZWMudmFsdWUoKSA9PSBFTk9FTlQgfHwgbV9lYy52YWx1ZSgpID09IEVO
T1RESVIpKSB7Ci0gICAgcmV0dXJuIGZpbGVfc3RhdHVzKGZpbGVfdHlwZTo6bm90X2ZvdW5kKTsK
LSAgfSBlbHNlIGlmIChtX2VjKSB7Ci0gICAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicG9zaXhf
c3RhdCIsIGVjLCAmcCk7Ci0gICAgZXJyLnJlcG9ydChtX2VjLCAiZmFpbGVkIHRvIGRldGVybWlu
ZSBhdHRyaWJ1dGVzIGZvciB0aGUgc3BlY2lmaWVkIHBhdGgiKTsKLSAgICByZXR1cm4gZmlsZV9z
dGF0dXMoZmlsZV90eXBlOjpub25lKTsKLSAgfQotICAvLyBlbHNlCi0KLSAgZmlsZV9zdGF0dXMg
ZnNfdG1wOwotICBhdXRvIGNvbnN0IG1vZGUgPSBwYXRoX3N0YXQuc3RfbW9kZTsKLSAgaWYgKFNf
SVNMTksobW9kZSkpCi0gICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpzeW1saW5rKTsKLSAgZWxz
ZSBpZiAoU19JU1JFRyhtb2RlKSkKLSAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnJlZ3VsYXIp
OwotICBlbHNlIGlmIChTX0lTRElSKG1vZGUpKQotICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6
ZGlyZWN0b3J5KTsKLSAgZWxzZSBpZiAoU19JU0JMSyhtb2RlKSkKLSAgICBmc190bXAudHlwZShm
aWxlX3R5cGU6OmJsb2NrKTsKLSAgZWxzZSBpZiAoU19JU0NIUihtb2RlKSkKLSAgICBmc190bXAu
dHlwZShmaWxlX3R5cGU6OmNoYXJhY3Rlcik7Ci0gIGVsc2UgaWYgKFNfSVNGSUZPKG1vZGUpKQot
ICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6Zmlmbyk7Ci0gIGVsc2UgaWYgKFNfSVNTT0NLKG1v
ZGUpKQotICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6c29ja2V0KTsKLSAgZWxzZQotICAgIGZz
X3RtcC50eXBlKGZpbGVfdHlwZTo6dW5rbm93bik7Ci0KLSAgZnNfdG1wLnBlcm1pc3Npb25zKGRl
dGFpbDo6cG9zaXhfZ2V0X3Blcm1zKHBhdGhfc3RhdCkpOwotICByZXR1cm4gZnNfdG1wOwotfQot
Ci1maWxlX3N0YXR1cyBwb3NpeF9zdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBwYXRoX3N0YXQs
IGVycm9yX2NvZGUqIGVjKSB7Ci0gIGVycm9yX2NvZGUgbV9lYzsKLSAgaWYgKDo6c3RhdChwLmNf
c3RyKCksICZwYXRoX3N0YXQpID09IC0xKQotICAgIG1fZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJy
bm8oKTsKLSAgcmV0dXJuIGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBwLCBwYXRoX3N0YXQsIGVj
KTsKLX0KLQotZmlsZV9zdGF0dXMgcG9zaXhfc3RhdChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2Rl
KiBlYykgewotICBTdGF0VCBwYXRoX3N0YXQ7Ci0gIHJldHVybiBwb3NpeF9zdGF0KHAsIHBhdGhf
c3RhdCwgZWMpOwotfQotCi1maWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNvbnN0JiBwLCBT
dGF0VCYgcGF0aF9zdGF0LCBlcnJvcl9jb2RlKiBlYykgewotICBlcnJvcl9jb2RlIG1fZWM7Ci0g
IGlmICg6OmxzdGF0KHAuY19zdHIoKSwgJnBhdGhfc3RhdCkgPT0gLTEpCi0gICAgbV9lYyA9IGRl
dGFpbDo6Y2FwdHVyZV9lcnJubygpOwotICByZXR1cm4gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMs
IHAsIHBhdGhfc3RhdCwgZWMpOwotfQotCi1maWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNv
bnN0JiBwLCBlcnJvcl9jb2RlKiBlYykgewotICBTdGF0VCBwYXRoX3N0YXQ7Ci0gIHJldHVybiBw
b3NpeF9sc3RhdChwLCBwYXRoX3N0YXQsIGVjKTsKLX0KLQotYm9vbCBwb3NpeF9mdHJ1bmNhdGUo
Y29uc3QgRmlsZURlc2NyaXB0b3ImIGZkLCBzaXplX3QgdG9fc2l6ZSwgZXJyb3JfY29kZSYgZWMp
IHsKLSAgaWYgKDo6ZnRydW5jYXRlKGZkLmZkLCB0b19zaXplKSA9PSAtMSkgewotICAgIGVjID0g
Y2FwdHVyZV9lcnJubygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGVjLmNsZWFyKCk7Ci0g
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBwb3NpeF9mY2htb2QoY29uc3QgRmlsZURlc2NyaXB0
b3ImIGZkLCBjb25zdCBTdGF0VCYgc3QsIGVycm9yX2NvZGUmIGVjKSB7Ci0gIGlmICg6OmZjaG1v
ZChmZC5mZCwgc3Quc3RfbW9kZSkgPT0gLTEpIHsKLSAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBlYy5jbGVhcigpOwotICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgc3RhdF9lcXVpdmFsZW50KGNvbnN0IFN0YXRUJiBzdDEsIGNvbnN0IFN0YXRUJiBz
dDIpIHsKLSAgcmV0dXJuIChzdDEuc3RfZGV2ID09IHN0Mi5zdF9kZXYgJiYgc3QxLnN0X2lubyA9
PSBzdDIuc3RfaW5vKTsKLX0KLQotZmlsZV9zdGF0dXMgRmlsZURlc2NyaXB0b3I6OnJlZnJlc2hf
c3RhdHVzKGVycm9yX2NvZGUmIGVjKSB7Ci0gIC8vIEZEIG11c3QgYmUgb3BlbiBhbmQgZ29vZC4K
LSAgbV9zdGF0dXMgPSBmaWxlX3N0YXR1c3t9OwotICBtX3N0YXQgPSB7fTsKLSAgZXJyb3JfY29k
ZSBtX2VjOwotICBpZiAoOjpmc3RhdChmZCwgJm1fc3RhdCkgPT0gLTEpCi0gICAgbV9lYyA9IGNh
cHR1cmVfZXJybm8oKTsKLSAgbV9zdGF0dXMgPSBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgbmFt
ZSwgbV9zdGF0LCAmZWMpOwotICByZXR1cm4gbV9zdGF0dXM7Ci19Ci19IC8vIG5hbWVzcGFjZQot
fSAvLyBlbmQgbmFtZXNwYWNlIGRldGFpbAotCi11c2luZyBkZXRhaWw6OmNhcHR1cmVfZXJybm87
Ci11c2luZyBkZXRhaWw6OkVycm9ySGFuZGxlcjsKLXVzaW5nIGRldGFpbDo6U3RhdFQ7Ci11c2lu
ZyBkZXRhaWw6OlRpbWVTcGVjOwotdXNpbmcgcGFyc2VyOjpjcmVhdGVWaWV3OwotdXNpbmcgcGFy
c2VyOjpQYXRoUGFyc2VyOwotdXNpbmcgcGFyc2VyOjpzdHJpbmdfdmlld190OwotCi1jb25zdCBi
b29sIF9GaWxlc3lzdGVtQ2xvY2s6OmlzX3N0ZWFkeTsKLQotX0ZpbGVzeXN0ZW1DbG9jazo6dGlt
ZV9wb2ludCBfRmlsZXN5c3RlbUNsb2NrOjpub3coKSBub2V4Y2VwdCB7Ci0gIHR5cGVkZWYgY2hy
b25vOjpkdXJhdGlvbjxyZXA+IF9fc2VjczsKLSNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX0NMT0NL
X0dFVFRJTUUpICYmIGRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpCi0gIHR5cGVkZWYgY2hyb25vOjpk
dXJhdGlvbjxyZXAsIG5hbm8+IF9fbnNlY3M7Ci0gIHN0cnVjdCB0aW1lc3BlYyB0cDsKLSAgaWYg
KDAgIT0gY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRwKSkKLSAgICBfX3Rocm93X3N5
c3RlbV9lcnJvcihlcnJubywgImNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUpIGZhaWxlZCIp
OwotICByZXR1cm4gdGltZV9wb2ludChfX3NlY3ModHAudHZfc2VjKSArCi0gICAgICAgICAgICAg
ICAgICAgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxkdXJhdGlvbj4oX19uc2Vjcyh0cC50dl9uc2Vj
KSkpOwotI2Vsc2UKLSAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgbWljcm8+IF9fbWlj
cm9zZWNzOwotICB0aW1ldmFsIHR2OwotICBnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKLSAgcmV0dXJu
IHRpbWVfcG9pbnQoX19zZWNzKHR2LnR2X3NlYykgKyBfX21pY3Jvc2Vjcyh0di50dl91c2VjKSk7
Ci0jZW5kaWYgLy8gX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElNRSAmJiBDTE9DS19SRUFMVElNRQot
fQotCi1maWxlc3lzdGVtX2Vycm9yOjp+ZmlsZXN5c3RlbV9lcnJvcigpIHt9Ci0KLXZvaWQgZmls
ZXN5c3RlbV9lcnJvcjo6X19jcmVhdGVfd2hhdChpbnQgX19udW1fcGF0aHMpIHsKLSAgY29uc3Qg
Y2hhciogZGVyaXZlZF93aGF0ID0gc3lzdGVtX2Vycm9yOjp3aGF0KCk7Ci0gIF9fc3RvcmFnZV8t
Pl9fd2hhdF8gPSBbJl0oKSAtPiBzdHJpbmcgewotICAgIGNvbnN0IGNoYXIqIHAxID0gcGF0aDEo
KS5uYXRpdmUoKS5lbXB0eSgpID8gIlwiXCIiIDogcGF0aDEoKS5jX3N0cigpOwotICAgIGNvbnN0
IGNoYXIqIHAyID0gcGF0aDIoKS5uYXRpdmUoKS5lbXB0eSgpID8gIlwiXCIiIDogcGF0aDIoKS5j
X3N0cigpOwotICAgIHN3aXRjaCAoX19udW1fcGF0aHMpIHsKLSAgICBkZWZhdWx0OgotICAgICAg
cmV0dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMiLCBkZXJp
dmVkX3doYXQpOwotICAgIGNhc2UgMToKLSAgICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJp
bmcoImZpbGVzeXN0ZW0gZXJyb3I6ICVzIFslc10iLCBkZXJpdmVkX3doYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHAxKTsKLSAgICBjYXNlIDI6Ci0gICAgICByZXR1cm4g
ZGV0YWlsOjpmb3JtYXRfc3RyaW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyBbJXNdIFslc10iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVkX3doYXQsIHAxLCBwMik7
Ci0gICAgfQotICB9KCk7Ci19Ci0KLXN0YXRpYyBwYXRoIF9fZG9fYWJzb2x1dGUoY29uc3QgcGF0
aCYgcCwgcGF0aCogY3dkLCBlcnJvcl9jb2RlKiBlYykgewotICBpZiAoZWMpCi0gICAgZWMtPmNs
ZWFyKCk7Ci0gIGlmIChwLmlzX2Fic29sdXRlKCkpCi0gICAgcmV0dXJuIHA7Ci0gICpjd2QgPSBf
X2N1cnJlbnRfcGF0aChlYyk7Ci0gIGlmIChlYyAmJiAqZWMpCi0gICAgcmV0dXJuIHt9OwotICBy
ZXR1cm4gKCpjd2QpIC8gcDsKLX0KLQotcGF0aCBfX2Fic29sdXRlKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjKSB7Ci0gIHBhdGggY3dkOwotICByZXR1cm4gX19kb19hYnNvbHV0ZShwLCAm
Y3dkLCBlYyk7Ci19Ci0KLXBhdGggX19jYW5vbmljYWwocGF0aCBjb25zdCYgb3JpZ19wLCBlcnJv
cl9jb2RlKiBlYykgewotICBwYXRoIGN3ZDsKLSAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigiY2Fu
b25pY2FsIiwgZWMsICZvcmlnX3AsICZjd2QpOwotCi0gIHBhdGggcCA9IF9fZG9fYWJzb2x1dGUo
b3JpZ19wLCAmY3dkLCBlYyk7Ci0gIGNoYXIgYnVmZltQQVRIX01BWCArIDFdOwotICBjaGFyKiBy
ZXQ7Ci0gIGlmICgocmV0ID0gOjpyZWFscGF0aChwLmNfc3RyKCksIGJ1ZmYpKSA9PSBudWxscHRy
KQotICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Ci0gIHJldHVybiB7cmV0
fTsKLX0KLQotdm9pZCBfX2NvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNv
cHlfb3B0aW9ucyBvcHRpb25zLAotICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKLSAgRXJy
b3JIYW5kbGVyPHZvaWQ+IGVycigiY29weSIsIGVjLCAmZnJvbSwgJnRvKTsKLQotICBjb25zdCBi
b29sIHN5bV9zdGF0dXMgPSBib29sKAotICAgICAgb3B0aW9ucyAmIChjb3B5X29wdGlvbnM6OmNy
ZWF0ZV9zeW1saW5rcyB8IGNvcHlfb3B0aW9uczo6c2tpcF9zeW1saW5rcykpOwotCi0gIGNvbnN0
IGJvb2wgc3ltX3N0YXR1czIgPSBib29sKG9wdGlvbnMgJiBjb3B5X29wdGlvbnM6OmNvcHlfc3lt
bGlua3MpOwotCi0gIGVycm9yX2NvZGUgbV9lYzE7Ci0gIFN0YXRUIGZfc3QgPSB7fTsKLSAgY29u
c3QgZmlsZV9zdGF0dXMgZiA9IHN5bV9zdGF0dXMgfHwgc3ltX3N0YXR1czIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IGRldGFpbDo6cG9zaXhfbHN0YXQoZnJvbSwgZl9zdCwgJm1fZWMx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9zdGF0KGZyb20s
IGZfc3QsICZtX2VjMSk7Ci0gIGlmIChtX2VjMSkKLSAgICByZXR1cm4gZXJyLnJlcG9ydChtX2Vj
MSk7Ci0KLSAgU3RhdFQgdF9zdCA9IHt9OwotICBjb25zdCBmaWxlX3N0YXR1cyB0ID0gc3ltX3N0
YXR1cyA/IGRldGFpbDo6cG9zaXhfbHN0YXQodG8sIHRfc3QsICZtX2VjMSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X3N0YXQodG8sIHRfc3QsICZt
X2VjMSk7Ci0KLSAgaWYgKG5vdCBzdGF0dXNfa25vd24odCkpCi0gICAgcmV0dXJuIGVyci5yZXBv
cnQobV9lYzEpOwotCi0gIGlmICghZXhpc3RzKGYpIHx8IGlzX290aGVyKGYpIHx8IGlzX290aGVy
KHQpIHx8Ci0gICAgICAoaXNfZGlyZWN0b3J5KGYpICYmIGlzX3JlZ3VsYXJfZmlsZSh0KSkgfHwK
LSAgICAgIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KGZfc3QsIHRfc3QpKSB7Ci0gICAgcmV0dXJu
IGVyci5yZXBvcnQoZXJyYzo6ZnVuY3Rpb25fbm90X3N1cHBvcnRlZCk7Ci0gIH0KLQotICBpZiAo
ZWMpCi0gICAgZWMtPmNsZWFyKCk7Ci0KLSAgaWYgKGlzX3N5bWxpbmsoZikpIHsKLSAgICBpZiAo
Ym9vbChjb3B5X29wdGlvbnM6OnNraXBfc3ltbGlua3MgJiBvcHRpb25zKSkgewotICAgICAgLy8g
ZG8gbm90aGluZwotICAgIH0gZWxzZSBpZiAobm90IGV4aXN0cyh0KSkgewotICAgICAgX19jb3B5
X3N5bWxpbmsoZnJvbSwgdG8sIGVjKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGVyci5y
ZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0gZWxzZSBp
ZiAoaXNfcmVndWxhcl9maWxlKGYpKSB7Ci0gICAgaWYgKGJvb2woY29weV9vcHRpb25zOjpkaXJl
Y3Rvcmllc19vbmx5ICYgb3B0aW9ucykpIHsKLSAgICAgIC8vIGRvIG5vdGhpbmcKLSAgICB9IGVs
c2UgaWYgKGJvb2woY29weV9vcHRpb25zOjpjcmVhdGVfc3ltbGlua3MgJiBvcHRpb25zKSkgewot
ICAgICAgX19jcmVhdGVfc3ltbGluayhmcm9tLCB0bywgZWMpOwotICAgIH0gZWxzZSBpZiAoYm9v
bChjb3B5X29wdGlvbnM6OmNyZWF0ZV9oYXJkX2xpbmtzICYgb3B0aW9ucykpIHsKLSAgICAgIF9f
Y3JlYXRlX2hhcmRfbGluayhmcm9tLCB0bywgZWMpOwotICAgIH0gZWxzZSBpZiAoaXNfZGlyZWN0
b3J5KHQpKSB7Ci0gICAgICBfX2NvcHlfZmlsZShmcm9tLCB0byAvIGZyb20uZmlsZW5hbWUoKSwg
b3B0aW9ucywgZWMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBfX2NvcHlfZmlsZShmcm9tLCB0bywg
b3B0aW9ucywgZWMpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0gZWxzZSBpZiAoaXNfZGlyZWN0
b3J5KGYpICYmIGJvb2woY29weV9vcHRpb25zOjpjcmVhdGVfc3ltbGlua3MgJiBvcHRpb25zKSkg
ewotICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmlzX2FfZGlyZWN0b3J5KTsKLSAgfSBlbHNl
IGlmIChpc19kaXJlY3RvcnkoZikgJiYgKGJvb2woY29weV9vcHRpb25zOjpyZWN1cnNpdmUgJiBv
cHRpb25zKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25z
Ojpub25lID09IG9wdGlvbnMpKSB7Ci0KLSAgICBpZiAoIWV4aXN0cyh0KSkgewotICAgICAgLy8g
Y3JlYXRlIGRpcmVjdG9yeSB0byB3aXRoIGF0dHJpYnV0ZXMgZnJvbSAnZnJvbScuCi0gICAgICBf
X2NyZWF0ZV9kaXJlY3RvcnkodG8sIGZyb20sIGVjKTsKLSAgICAgIGlmIChlYyAmJiAqZWMpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBkaXJlY3RvcnlfaXRlcmF0b3Ig
aXQgPQotICAgICAgICBlYyA/IGRpcmVjdG9yeV9pdGVyYXRvcihmcm9tLCAqZWMpIDogZGlyZWN0
b3J5X2l0ZXJhdG9yKGZyb20pOwotICAgIGlmIChlYyAmJiAqZWMpIHsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgZXJyb3JfY29kZSBtX2VjMjsKLSAgICBmb3IgKDsgaXQgIT0gZGlyZWN0b3J5
X2l0ZXJhdG9yKCk7IGl0LmluY3JlbWVudChtX2VjMikpIHsKLSAgICAgIGlmIChtX2VjMikgewot
ICAgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjMik7Ci0gICAgICB9Ci0gICAgICBfX2NvcHko
aXQtPnBhdGgoKSwgdG8gLyBpdC0+cGF0aCgpLmZpbGVuYW1lKCksCi0gICAgICAgICAgICAgb3B0
aW9ucyB8IGNvcHlfb3B0aW9uczo6X19pbl9yZWN1cnNpdmVfY29weSwgZWMpOwotICAgICAgaWYg
KGVjICYmICplYykgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0K
LW5hbWVzcGFjZSBkZXRhaWwgewotbmFtZXNwYWNlIHsKLQotI2lmZGVmIF9MSUJDUFBfVVNFX1NF
TkRGSUxFCi1ib29sIGNvcHlfZmlsZV9pbXBsX3NlbmRmaWxlKEZpbGVEZXNjcmlwdG9yJiByZWFk
X2ZkLCBGaWxlRGVzY3JpcHRvciYgd3JpdGVfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIGVjKSB7Ci0KLSAgc2l6ZV90IGNvdW50ID0gcmVhZF9mZC5nZXRfc3Rh
dCgpLnN0X3NpemU7Ci0gIGRvIHsKLSAgICBzc2l6ZV90IHJlczsKLSAgICBpZiAoKHJlcyA9IDo6
c2VuZGZpbGUod3JpdGVfZmQuZmQsIHJlYWRfZmQuZmQsIG51bGxwdHIsIGNvdW50KSkgPT0gLTEp
IHsKLSAgICAgIGVjID0gY2FwdHVyZV9lcnJubygpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBjb3VudCAtPSByZXM7Ci0gIH0gd2hpbGUgKGNvdW50ID4gMCk7Ci0KLSAgZWMuY2xl
YXIoKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLSNlbGlmIGRlZmluZWQoX0xJQkNQUF9VU0VfQ09Q
WUZJTEUpCi1ib29sIGNvcHlfZmlsZV9pbXBsX2NvcHlmaWxlKEZpbGVEZXNjcmlwdG9yJiByZWFk
X2ZkLCBGaWxlRGVzY3JpcHRvciYgd3JpdGVfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIGVjKSB7Ci0gIHN0cnVjdCBDb3B5RmlsZVN0YXRlIHsKLSAgICBjb3B5
ZmlsZV9zdGF0ZV90IHN0YXRlOwotICAgIENvcHlGaWxlU3RhdGUoKSB7IHN0YXRlID0gY29weWZp
bGVfc3RhdGVfYWxsb2MoKTsgfQotICAgIH5Db3B5RmlsZVN0YXRlKCkgeyBjb3B5ZmlsZV9zdGF0
ZV9mcmVlKHN0YXRlKTsgfQotCi0gIHByaXZhdGU6Ci0gICAgQ29weUZpbGVTdGF0ZShDb3B5Rmls
ZVN0YXRlIGNvbnN0JikgPSBkZWxldGU7Ci0gICAgQ29weUZpbGVTdGF0ZSYgb3BlcmF0b3I9KENv
cHlGaWxlU3RhdGUgY29uc3QmKSA9IGRlbGV0ZTsKLSAgfTsKLQotICBDb3B5RmlsZVN0YXRlIGNm
czsKLSAgaWYgKGZjb3B5ZmlsZShyZWFkX2ZkLmZkLCB3cml0ZV9mZC5mZCwgY2ZzLnN0YXRlLCBD
T1BZRklMRV9EQVRBKSA8IDApIHsKLSAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLQotICBlYy5jbGVhcigpOwotICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRp
ZgotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgaWZkZWYncyBpbiBKdW5pcGVyIGR1
ZSB0byB0aGUgY3VycmVudAotLy8gY2xhbmcgbm90IHN1cHBvcnRpbmcgYW4gX19vcGVuIGZ1bmN0
aW9uIG9uIGlmc3RyZWFtIGFuZCBvZnN0cmVhbS4KLSNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9T
RU5ERklMRSkgJiYgIWRlZmluZWQoX0xJQkNQUF9VU0VfQ09QWUZJTEUpCi0vLyBOb3RlOiBUaGlz
IGZ1bmN0aW9uIGlzbid0IGd1YXJkZWQgYnkgaWZkZWYncyBldmVuIHRob3VnaCBpdCBtYXkgYmUg
dW51c2VkCi0vLyBpbiBvcmRlciB0byBhc3N1cmUgaXQgc3RpbGwgY29tcGlsZXMuCi1fX2F0dHJp
YnV0ZV9fKCh1bnVzZWQpKSBib29sIGNvcHlfZmlsZV9pbXBsX2RlZmF1bHQoRmlsZURlc2NyaXB0
b3ImIHJlYWRfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmlsZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7Ci0gIGlmc3Ry
ZWFtIGluOwotICBpbi5fX29wZW4ocmVhZF9mZC5mZCwgaW9zOjpiaW5hcnkpOwotICBpZiAoIWlu
LmlzX29wZW4oKSkgewotICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IF9fb3BlbiBkaWRuJ3QgcmVz
ZXQgdGhlIGVycm9yIGNvZGUuCi0gICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0gIG9mc3RyZWFtIG91dDsKLSAgb3V0Ll9fb3Blbih3cml0ZV9mZC5mZCwg
aW9zOjpiaW5hcnkpOwotICBpZiAoIW91dC5pc19vcGVuKCkpIHsKLSAgICBlYyA9IGNhcHR1cmVf
ZXJybm8oKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoaW4uZ29vZCgpICYmIG91
dC5nb29kKCkpIHsKLSAgICB1c2luZyBJbkl0ID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPjsK
LSAgICB1c2luZyBPdXRJdCA9IG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj47Ci0gICAgSW5JdCBi
aW4oaW4pOwotICAgIEluSXQgZWluOwotICAgIE91dEl0IGJvdXQob3V0KTsKLSAgICBjb3B5KGJp
biwgZWluLCBib3V0KTsKLSAgfQotICBpZiAob3V0LmZhaWwoKSB8fCBpbi5mYWlsKCkpIHsKLSAg
ICBlYyA9IG1ha2VfZXJyb3JfY29kZShlcnJjOjppb19lcnJvcik7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgZWMuY2xlYXIoKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotYm9v
bCBjb3B5X2ZpbGVfaW1wbChGaWxlRGVzY3JpcHRvciYgZnJvbSwgRmlsZURlc2NyaXB0b3ImIHRv
LCBlcnJvcl9jb2RlJiBlYykgewotI2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfU0VOREZJTEUpCi0g
IHJldHVybiBjb3B5X2ZpbGVfaW1wbF9zZW5kZmlsZShmcm9tLCB0bywgZWMpOwotI2VsaWYgZGVm
aW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkKLSAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX2NvcHlm
aWxlKGZyb20sIHRvLCBlYyk7Ci0jZWxzZQotICByZXR1cm4gY29weV9maWxlX2ltcGxfZGVmYXVs
dChmcm9tLCB0bywgZWMpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlCi19IC8vIG5hbWVz
cGFjZSBkZXRhaWwKLQotYm9vbCBfX2NvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBw
YXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUqIGVjKSB7Ci0gIHVzaW5nIGRldGFpbDo6RmlsZURlc2NyaXB0b3I7Ci0gIEVycm9ySGFuZGxl
cjxib29sPiBlcnIoImNvcHlfZmlsZSIsIGVjLCAmdG8sICZmcm9tKTsKLQotICBlcnJvcl9jb2Rl
IG1fZWM7Ci0gIEZpbGVEZXNjcmlwdG9yIGZyb21fZmQgPQotICAgICAgRmlsZURlc2NyaXB0b3I6
OmNyZWF0ZV93aXRoX3N0YXR1cygmZnJvbSwgbV9lYywgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsK
LSAgaWYgKG1fZWMpCi0gICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7Ci0KLSAgYXV0byBmcm9t
X3N0ID0gZnJvbV9mZC5nZXRfc3RhdHVzKCk7Ci0gIFN0YXRUIGNvbnN0JiBmcm9tX3N0YXQgPSBm
cm9tX2ZkLmdldF9zdGF0KCk7Ci0gIGlmICghaXNfcmVndWxhcl9maWxlKGZyb21fc3QpKSB7Ci0g
ICAgaWYgKG5vdCBtX2VjKQotICAgICAgbV9lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJjOjpub3Rf
c3VwcG9ydGVkKTsKLSAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKLSAgfQotCi0gIGNvbnN0
IGJvb2wgc2tpcF9leGlzdGluZyA9IGJvb2woY29weV9vcHRpb25zOjpza2lwX2V4aXN0aW5nICYg
b3B0aW9ucyk7Ci0gIGNvbnN0IGJvb2wgdXBkYXRlX2V4aXN0aW5nID0gYm9vbChjb3B5X29wdGlv
bnM6OnVwZGF0ZV9leGlzdGluZyAmIG9wdGlvbnMpOwotICBjb25zdCBib29sIG92ZXJ3cml0ZV9l
eGlzdGluZyA9Ci0gICAgICBib29sKGNvcHlfb3B0aW9uczo6b3ZlcndyaXRlX2V4aXN0aW5nICYg
b3B0aW9ucyk7Ci0KLSAgU3RhdFQgdG9fc3RhdF9wYXRoOwotICBmaWxlX3N0YXR1cyB0b19zdCA9
IGRldGFpbDo6cG9zaXhfc3RhdCh0bywgdG9fc3RhdF9wYXRoLCAmbV9lYyk7Ci0gIGlmICghc3Rh
dHVzX2tub3duKHRvX3N0KSkKLSAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKLQotICBjb25z
dCBib29sIHRvX2V4aXN0cyA9IGV4aXN0cyh0b19zdCk7Ci0gIGlmICh0b19leGlzdHMgJiYgIWlz
X3JlZ3VsYXJfZmlsZSh0b19zdCkpCi0gICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1
cHBvcnRlZCk7Ci0KLSAgaWYgKHRvX2V4aXN0cyAmJiBkZXRhaWw6OnN0YXRfZXF1aXZhbGVudChm
cm9tX3N0YXQsIHRvX3N0YXRfcGF0aCkpCi0gICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6Zmls
ZV9leGlzdHMpOwotCi0gIGlmICh0b19leGlzdHMgJiYgc2tpcF9leGlzdGluZykKLSAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgYm9vbCBTaG91bGRDb3B5ID0gWyZdKCkgewotICAgIGlmICh0b19leGlz
dHMgJiYgdXBkYXRlX2V4aXN0aW5nKSB7Ci0gICAgICBhdXRvIGZyb21fdGltZSA9IGRldGFpbDo6
ZXh0cmFjdF9tdGltZShmcm9tX3N0YXQpOwotICAgICAgYXV0byB0b190aW1lID0gZGV0YWlsOjpl
eHRyYWN0X210aW1lKHRvX3N0YXRfcGF0aCk7Ci0gICAgICBpZiAoZnJvbV90aW1lLnR2X3NlYyA8
IHRvX3RpbWUudHZfc2VjKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAoZnJvbV90
aW1lLnR2X3NlYyA9PSB0b190aW1lLnR2X3NlYyAmJgotICAgICAgICAgIGZyb21fdGltZS50dl9u
c2VjIDw9IHRvX3RpbWUudHZfbnNlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICghdG9fZXhpc3RzIHx8IG92ZXJ3cml0ZV9leGlzdGlu
ZykKLSAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmZpbGVf
ZXhpc3RzKTsKLSAgfSgpOwotICBpZiAoIVNob3VsZENvcHkpCi0gICAgcmV0dXJuIGZhbHNlOwot
Ci0gIC8vIERvbid0IHRydW5jYXRlIHJpZ2h0IGF3YXkuIFdlIG1heSBub3QgYmUgb3BlbmluZyB0
aGUgZmlsZSB3ZSBvcmlnaW5hbGx5Ci0gIC8vIGxvb2tlZCBhdDsgd2UnbGwgY2hlY2sgdGhpcyBs
YXRlci4KLSAgaW50IHRvX29wZW5fZmxhZ3MgPSBPX1dST05MWTsKLSAgaWYgKCF0b19leGlzdHMp
Ci0gICAgdG9fb3Blbl9mbGFncyB8PSBPX0NSRUFUOwotICBGaWxlRGVzY3JpcHRvciB0b19mZCA9
IEZpbGVEZXNjcmlwdG9yOjpjcmVhdGVfd2l0aF9zdGF0dXMoCi0gICAgICAmdG8sIG1fZWMsIHRv
X29wZW5fZmxhZ3MsIGZyb21fc3RhdC5zdF9tb2RlKTsKLSAgaWYgKG1fZWMpCi0gICAgcmV0dXJu
IGVyci5yZXBvcnQobV9lYyk7Ci0KLSAgaWYgKHRvX2V4aXN0cykgewotICAgIC8vIENoZWNrIHRo
YXQgdGhlIGZpbGUgd2UgaW5pdGlhbGx5IHN0YXQnZWQgaXMgZXF1aXZhbGVudCB0byB0aGUgb25l
Ci0gICAgLy8gd2Ugb3BlbmVkLgotICAgIC8vIEZJWE1FOiByZXBvcnQgdGhpcyBiZXR0ZXIuCi0g
ICAgaWYgKCFkZXRhaWw6OnN0YXRfZXF1aXZhbGVudCh0b19zdGF0X3BhdGgsIHRvX2ZkLmdldF9z
dGF0KCkpKQotICAgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6YmFkX2ZpbGVfZGVzY3JpcHRv
cik7Ci0KLSAgICAvLyBTZXQgdGhlIHBlcm1pc3Npb25zIGFuZCB0cnVuY2F0ZSB0aGUgZmlsZSB3
ZSBvcGVuZWQuCi0gICAgaWYgKGRldGFpbDo6cG9zaXhfZmNobW9kKHRvX2ZkLCBmcm9tX3N0YXQs
IG1fZWMpKQotICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7Ci0gICAgaWYgKGRldGFpbDo6
cG9zaXhfZnRydW5jYXRlKHRvX2ZkLCAwLCBtX2VjKSkKLSAgICAgIHJldHVybiBlcnIucmVwb3J0
KG1fZWMpOwotICB9Ci0KLSAgaWYgKCFjb3B5X2ZpbGVfaW1wbChmcm9tX2ZkLCB0b19mZCwgbV9l
YykpIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBkZXN0IGZpbGUgaWYgd2UgZmFpbGVkLCBh
bmQgaXQgZGlkbid0IGV4aXN0IHByZXZpb3VzbHkuCi0gICAgcmV0dXJuIGVyci5yZXBvcnQobV9l
Yyk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBfX2NvcHlfc3ltbGluayhjb25z
dCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKLSAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKLSAgY29uc3QgcGF0aCByZWFsX3BhdGgo
X19yZWFkX3N5bWxpbmsoZXhpc3Rpbmdfc3ltbGluaywgZWMpKTsKLSAgaWYgKGVjICYmICplYykg
ewotICAgIHJldHVybjsKLSAgfQotICAvLyBOT1RFOiBwcm9wb3NhbCBzYXlzIHlvdSBzaG91bGQg
ZGV0ZWN0IGlmIHlvdSBzaG91bGQgY2FsbAotICAvLyBjcmVhdGVfc3ltbGluayBvciBjcmVhdGVf
ZGlyZWN0b3J5X3N5bWxpbmsuIEkgZG9uJ3QgdGhpbmsgdGhpcwotICAvLyBpcyBuZWVkZWQgd2l0
aCBQT1NJWAotICBfX2NyZWF0ZV9zeW1saW5rKHJlYWxfcGF0aCwgbmV3X3N5bWxpbmssIGVjKTsK
LX0KLQotYm9vbCBfX2NyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
KiBlYykgewotICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGlyZWN0b3JpZXMiLCBl
YywgJnApOwotCi0gIGVycm9yX2NvZGUgbV9lYzsKLSAgYXV0byBjb25zdCBzdCA9IGRldGFpbDo6
cG9zaXhfc3RhdChwLCAmbV9lYyk7Ci0gIGlmICghc3RhdHVzX2tub3duKHN0KSkKLSAgICByZXR1
cm4gZXJyLnJlcG9ydChtX2VjKTsKLSAgZWxzZSBpZiAoaXNfZGlyZWN0b3J5KHN0KSkKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIGVsc2UgaWYgKGV4aXN0cyhzdCkpCi0gICAgcmV0dXJuIGVyci5yZXBv
cnQoZXJyYzo6ZmlsZV9leGlzdHMpOwotCi0gIGNvbnN0IHBhdGggcGFyZW50ID0gcC5wYXJlbnRf
cGF0aCgpOwotICBpZiAoIXBhcmVudC5lbXB0eSgpKSB7Ci0gICAgY29uc3QgZmlsZV9zdGF0dXMg
cGFyZW50X3N0ID0gc3RhdHVzKHBhcmVudCwgbV9lYyk7Ci0gICAgaWYgKG5vdCBzdGF0dXNfa25v
d24ocGFyZW50X3N0KSkKLSAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOwotICAgIGlmIChu
b3QgZXhpc3RzKHBhcmVudF9zdCkpIHsKLSAgICAgIF9fY3JlYXRlX2RpcmVjdG9yaWVzKHBhcmVu
dCwgZWMpOwotICAgICAgaWYgKGVjICYmICplYykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkocCwgZWMpOwot
fQotCi1ib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBl
YykgewotICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGlyZWN0b3J5IiwgZWMsICZw
KTsKLQotICBpZiAoOjpta2RpcihwLmNfc3RyKCksIHN0YXRpY19jYXN0PGludD4ocGVybXM6OmFs
bCkpID09IDApCi0gICAgcmV0dXJuIHRydWU7Ci0gIGlmIChlcnJubyAhPSBFRVhJU1QpCi0gICAg
ZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
X19jcmVhdGVfZGlyZWN0b3J5KHBhdGggY29uc3QmIHAsIHBhdGggY29uc3QmIGF0dHJpYnV0ZXMs
IGVycm9yX2NvZGUqIGVjKSB7Ci0gIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNyZWF0ZV9kaXJl
Y3RvcnkiLCBlYywgJnAsICZhdHRyaWJ1dGVzKTsKLQotICBTdGF0VCBhdHRyX3N0YXQ7Ci0gIGVy
cm9yX2NvZGUgbWVjOwotICBhdXRvIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KGF0dHJpYnV0ZXMs
IGF0dHJfc3RhdCwgJm1lYyk7Ci0gIGlmICghc3RhdHVzX2tub3duKHN0KSkKLSAgICByZXR1cm4g
ZXJyLnJlcG9ydChtZWMpOwotICBpZiAoIWlzX2RpcmVjdG9yeShzdCkpCi0gICAgcmV0dXJuIGVy
ci5yZXBvcnQoZXJyYzo6bm90X2FfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICJ0
aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBwYXRoIGlzIGludmFsaWQiKTsKLQotICBpZiAoOjpta2Rp
cihwLmNfc3RyKCksIGF0dHJfc3RhdC5zdF9tb2RlKSA9PSAwKQotICAgIHJldHVybiB0cnVlOwot
ICBpZiAoZXJybm8gIT0gRUVYSVNUKQotICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsK
LSAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKHBh
dGggY29uc3QmIGZyb20sIHBhdGggY29uc3QmIHRvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlKiBlYykgewotICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjcmVh
dGVfZGlyZWN0b3J5X3N5bWxpbmsiLCBlYywgJmZyb20sICZ0byk7Ci0gIGlmICg6OnN5bWxpbmso
ZnJvbS5jX3N0cigpLCB0by5jX3N0cigpKSAhPSAwKQotICAgIHJldHVybiBlcnIucmVwb3J0KGNh
cHR1cmVfZXJybm8oKSk7Ci19Ci0KLXZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgm
IGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYykgewotICBFcnJvckhhbmRsZXI8
dm9pZD4gZXJyKCJjcmVhdGVfaGFyZF9saW5rIiwgZWMsICZmcm9tLCAmdG8pOwotICBpZiAoOjps
aW5rKGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCi0gICAgcmV0dXJuIGVyci5yZXBv
cnQoY2FwdHVyZV9lcnJubygpKTsKLX0KLQotdm9pZCBfX2NyZWF0ZV9zeW1saW5rKHBhdGggY29u
c3QmIGZyb20sIHBhdGggY29uc3QmIHRvLCBlcnJvcl9jb2RlKiBlYykgewotICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJjcmVhdGVfc3ltbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKLSAgaWYgKDo6
c3ltbGluayhmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQotICAgIHJldHVybiBlcnIu
cmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Ci19Ci0KLXBhdGggX19jdXJyZW50X3BhdGgoZXJyb3Jf
Y29kZSogZWMpIHsKLSAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigiY3VycmVudF9wYXRoIiwgZWMp
OwotCi0gIGF1dG8gc2l6ZSA9IDo6cGF0aGNvbmYoIi4iLCBfUENfUEFUSF9NQVgpOwotICBfTElC
Q1BQX0FTU0VSVChzaXplID49IDAsICJwYXRoY29uZiByZXR1cm5lZCBhIDAgYXMgbWF4IHNpemUi
KTsKLQotICBhdXRvIGJ1ZmYgPSB1bmlxdWVfcHRyPGNoYXJbXT4obmV3IGNoYXJbc2l6ZSArIDFd
KTsKLSAgY2hhciogcmV0OwotICBpZiAoKHJldCA9IDo6Z2V0Y3dkKGJ1ZmYuZ2V0KCksIHN0YXRp
Y19jYXN0PHNpemVfdD4oc2l6ZSkpKSA9PSBudWxscHRyKQotICAgIHJldHVybiBlcnIucmVwb3J0
KGNhcHR1cmVfZXJybm8oKSwgImNhbGwgdG8gZ2V0Y3dkIGZhaWxlZCIpOwotCi0gIHJldHVybiB7
YnVmZi5nZXQoKX07Ci19Ci0KLXZvaWQgX19jdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCwgZXJy
b3JfY29kZSogZWMpIHsKLSAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiY3VycmVudF9wYXRoIiwg
ZWMsICZwKTsKLSAgaWYgKDo6Y2hkaXIocC5jX3N0cigpKSA9PSAtMSkKLSAgICBlcnIucmVwb3J0
KGNhcHR1cmVfZXJybm8oKSk7Ci19Ci0KLWJvb2wgX19lcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAx
LCBjb25zdCBwYXRoJiBwMiwgZXJyb3JfY29kZSogZWMpIHsKLSAgRXJyb3JIYW5kbGVyPGJvb2w+
IGVycigiZXF1aXZhbGVudCIsIGVjLCAmcDEsICZwMik7Ci0KLSAgZXJyb3JfY29kZSBlYzEsIGVj
MjsKLSAgU3RhdFQgc3QxID0ge30sIHN0MiA9IHt9OwotICBhdXRvIHMxID0gZGV0YWlsOjpwb3Np
eF9zdGF0KHAxLm5hdGl2ZSgpLCBzdDEsICZlYzEpOwotICBpZiAoIWV4aXN0cyhzMSkpCi0gICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7Ci0gIGF1dG8gczIgPSBkZXRh
aWw6OnBvc2l4X3N0YXQocDIubmF0aXZlKCksIHN0MiwgJmVjMik7Ci0gIGlmICghZXhpc3RzKHMy
KSkKLSAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKLQotICByZXR1
cm4gZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQoc3QxLCBzdDIpOwotfQotCi11aW50bWF4X3QgX19m
aWxlX3NpemUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKLSAgRXJyb3JIYW5kbGVy
PHVpbnRtYXhfdD4gZXJyKCJmaWxlX3NpemUiLCBlYywgJnApOwotCi0gIGVycm9yX2NvZGUgbV9l
YzsKLSAgU3RhdFQgc3Q7Ci0gIGZpbGVfc3RhdHVzIGZzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChw
LCBzdCwgJm1fZWMpOwotICBpZiAoIWV4aXN0cyhmc3QpIHx8ICFpc19yZWd1bGFyX2ZpbGUoZnN0
KSkgewotICAgIGVycmMgZXJyb3Jfa2luZCA9Ci0gICAgICAgIGlzX2RpcmVjdG9yeShmc3QpID8g
ZXJyYzo6aXNfYV9kaXJlY3RvcnkgOiBlcnJjOjpub3Rfc3VwcG9ydGVkOwotICAgIGlmICghbV9l
YykKLSAgICAgIG1fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyb3Jfa2luZCk7Ci0gICAgcmV0dXJu
IGVyci5yZXBvcnQobV9lYyk7Ci0gIH0KLSAgLy8gaXNfcmVndWxhcl9maWxlKHApID09IHRydWUK
LSAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oc3Quc3Rfc2l6ZSk7Ci19Ci0KLXVpbnRt
YXhfdCBfX2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgewot
ICBFcnJvckhhbmRsZXI8dWludG1heF90PiBlcnIoImhhcmRfbGlua19jb3VudCIsIGVjLCAmcCk7
Ci0KLSAgZXJyb3JfY29kZSBtX2VjOwotICBTdGF0VCBzdDsKLSAgZGV0YWlsOjpwb3NpeF9zdGF0
KHAsIHN0LCAmbV9lYyk7Ci0gIGlmIChtX2VjKQotICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMp
OwotICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1heF90PihzdC5zdF9ubGluayk7Ci19Ci0KLWJv
b2wgX19mc19pc19lbXB0eShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgewotICBFcnJv
ckhhbmRsZXI8Ym9vbD4gZXJyKCJpc19lbXB0eSIsIGVjLCAmcCk7Ci0KLSAgZXJyb3JfY29kZSBt
X2VjOwotICBTdGF0VCBwc3Q7Ci0gIGF1dG8gc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwgcHN0
LCAmbV9lYyk7Ci0gIGlmIChtX2VjKQotICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOwotICBl
bHNlIGlmICghaXNfZGlyZWN0b3J5KHN0KSAmJiAhaXNfcmVndWxhcl9maWxlKHN0KSkKLSAgICBy
ZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKLSAgZWxzZSBpZiAoaXNfZGly
ZWN0b3J5KHN0KSkgewotICAgIGF1dG8gaXQgPSBlYyA/IGRpcmVjdG9yeV9pdGVyYXRvcihwLCAq
ZWMpIDogZGlyZWN0b3J5X2l0ZXJhdG9yKHApOwotICAgIGlmIChlYyAmJiAqZWMpCi0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGl0ID09IGRpcmVjdG9yeV9pdGVyYXRvcnt9OwotICB9
IGVsc2UgaWYgKGlzX3JlZ3VsYXJfZmlsZShzdCkpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnRtYXhfdD4ocHN0LnN0X3NpemUpID09IDA7Ci0KLSAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOwot
fQotCi1zdGF0aWMgZmlsZV90aW1lX3R5cGUgX19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShjb25z
dCBwYXRoJiBwLCBjb25zdCBTdGF0VCYgc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYykgewotICB1c2luZyBkZXRhaWw6OmZz
X3RpbWU7Ci0gIEVycm9ySGFuZGxlcjxmaWxlX3RpbWVfdHlwZT4gZXJyKCJsYXN0X3dyaXRlX3Rp
bWUiLCBlYywgJnApOwotCi0gIGF1dG8gdHMgPSBkZXRhaWw6OmV4dHJhY3RfbXRpbWUoc3QpOwot
ICBpZiAoIWZzX3RpbWU6OmlzX3JlcHJlc2VudGFibGUodHMpKQotICAgIHJldHVybiBlcnIucmVw
b3J0KGVycmM6OnZhbHVlX3Rvb19sYXJnZSk7Ci0KLSAgcmV0dXJuIGZzX3RpbWU6OmNvbnZlcnRf
ZnJvbV90aW1lc3BlYyh0cyk7Ci19Ci0KLWZpbGVfdGltZV90eXBlIF9fbGFzdF93cml0ZV90aW1l
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7Ci0gIHVzaW5nIG5hbWVzcGFjZSBjaHJv
bm87Ci0gIEVycm9ySGFuZGxlcjxmaWxlX3RpbWVfdHlwZT4gZXJyKCJsYXN0X3dyaXRlX3RpbWUi
LCBlYywgJnApOwotCi0gIGVycm9yX2NvZGUgbV9lYzsKLSAgU3RhdFQgc3Q7Ci0gIGRldGFpbDo6
cG9zaXhfc3RhdChwLCBzdCwgJm1fZWMpOwotICBpZiAobV9lYykKLSAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKLSAgcmV0dXJuIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUocCwgc3QsIGVj
KTsKLX0KLQotdm9pZCBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVf
dHlwZSBuZXdfdGltZSwgZXJyb3JfY29kZSogZWMpIHsKLSAgdXNpbmcgZGV0YWlsOjpmc190aW1l
OwotICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJsYXN0X3dyaXRlX3RpbWUiLCBlYywgJnApOwot
Ci0gIGVycm9yX2NvZGUgbV9lYzsKLSAgYXJyYXk8VGltZVNwZWMsIDI+IHRidWY7Ci0jaWYgIWRl
ZmluZWQoX0xJQkNQUF9VU0VfVVRJTUVOU0FUKQotICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGhh
cyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gZGV0ZXJtaW5pbmcgdGhlCi0gIC8vIGxhc3QgYWNj
ZXNzIHRpbWUgYW5kIGF0dGVtcHRpbmcgdG8gc2V0IGl0IHRvIHRoZSBzYW1lIHZhbHVlIHVzaW5n
Ci0gIC8vIDo6dXRpbWVzCi0gIFN0YXRUIHN0OwotICBmaWxlX3N0YXR1cyBmc3QgPSBkZXRhaWw6
OnBvc2l4X3N0YXQocCwgc3QsICZtX2VjKTsKLSAgaWYgKG1fZWMpCi0gICAgcmV0dXJuIGVyci5y
ZXBvcnQobV9lYyk7Ci0gIHRidWZbMF0gPSBkZXRhaWw6OmV4dHJhY3RfYXRpbWUoc3QpOwotI2Vs
c2UKLSAgdGJ1ZlswXS50dl9zZWMgPSAwOwotICB0YnVmWzBdLnR2X25zZWMgPSBVVElNRV9PTUlU
OwotI2VuZGlmCi0gIGlmICghZnNfdGltZTo6Y29udmVydF90b190aW1lc3BlYyh0YnVmWzFdLCBu
ZXdfdGltZSkpCi0gICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6dmFsdWVfdG9vX2xhcmdlKTsK
LQotICBkZXRhaWw6OnNldF9maWxlX3RpbWVzKHAsIHRidWYsIG1fZWMpOwotICBpZiAobV9lYykK
LSAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKLX0KLQotdm9pZCBfX3Blcm1pc3Npb25zKGNv
bnN0IHBhdGgmIHAsIHBlcm1zIHBybXMsIHBlcm1fb3B0aW9ucyBvcHRzLAotICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUqIGVjKSB7Ci0gIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInBlcm1p
c3Npb25zIiwgZWMsICZwKTsKLQotICBhdXRvIGhhc19vcHQgPSBbJl0ocGVybV9vcHRpb25zIG8p
IHsgcmV0dXJuIGJvb2wobyAmIG9wdHMpOyB9OwotICBjb25zdCBib29sIHJlc29sdmVfc3ltbGlu
a3MgPSAhaGFzX29wdChwZXJtX29wdGlvbnM6Om5vZm9sbG93KTsKLSAgY29uc3QgYm9vbCBhZGRf
cGVybXMgPSBoYXNfb3B0KHBlcm1fb3B0aW9uczo6YWRkKTsKLSAgY29uc3QgYm9vbCByZW1vdmVf
cGVybXMgPSBoYXNfb3B0KHBlcm1fb3B0aW9uczo6cmVtb3ZlKTsKLSAgX0xJQkNQUF9BU1NFUlQo
Ci0gICAgICAoYWRkX3Blcm1zICsgcmVtb3ZlX3Blcm1zICsgaGFzX29wdChwZXJtX29wdGlvbnM6
OnJlcGxhY2UpKSA9PSAxLAotICAgICAgIk9uZSBhbmQgb25seSBvbmUgb2YgdGhlIHBlcm1fb3B0
aW9ucyBjb25zdGFudHMgcmVwbGFjZSwgYWRkLCBvciByZW1vdmUgIgotICAgICAgImlzIHByZXNl
bnQgaW4gb3B0cyIpOwotCi0gIGJvb2wgc2V0X3N5bV9wZXJtcyA9IGZhbHNlOwotICBwcm1zICY9
IHBlcm1zOjptYXNrOwotICBpZiAoIXJlc29sdmVfc3ltbGlua3MgfHwgKGFkZF9wZXJtcyB8fCBy
ZW1vdmVfcGVybXMpKSB7Ci0gICAgZXJyb3JfY29kZSBtX2VjOwotICAgIGZpbGVfc3RhdHVzIHN0
ID0gcmVzb2x2ZV9zeW1saW5rcyA/IGRldGFpbDo6cG9zaXhfc3RhdChwLCAmbV9lYykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X2xzdGF0KHAs
ICZtX2VjKTsKLSAgICBzZXRfc3ltX3Blcm1zID0gaXNfc3ltbGluayhzdCk7Ci0gICAgaWYgKG1f
ZWMpCi0gICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKLSAgICBfTElCQ1BQX0FTU0VSVChz
dC5wZXJtaXNzaW9ucygpICE9IHBlcm1zOjp1bmtub3duLAotICAgICAgICAgICAgICAgICAgICJQ
ZXJtaXNzaW9ucyB1bmV4cGVjdGVkbHkgdW5rbm93biIpOwotICAgIGlmIChhZGRfcGVybXMpCi0g
ICAgICBwcm1zIHw9IHN0LnBlcm1pc3Npb25zKCk7Ci0gICAgZWxzZSBpZiAocmVtb3ZlX3Blcm1z
KQotICAgICAgcHJtcyA9IHN0LnBlcm1pc3Npb25zKCkgJiB+cHJtczsKLSAgfQotICBjb25zdCBh
dXRvIHJlYWxfcGVybXMgPSBkZXRhaWw6OnBvc2l4X2NvbnZlcnRfcGVybXMocHJtcyk7Ci0KLSNp
ZiBkZWZpbmVkKEFUX1NZTUxJTktfTk9GT0xMT1cpICYmIGRlZmluZWQoQVRfRkRDV0QpCi0gIGNv
bnN0IGludCBmbGFncyA9IHNldF9zeW1fcGVybXMgPyBBVF9TWU1MSU5LX05PRk9MTE9XIDogMDsK
LSAgaWYgKDo6ZmNobW9kYXQoQVRfRkRDV0QsIHAuY19zdHIoKSwgcmVhbF9wZXJtcywgZmxhZ3Mp
ID09IC0xKSB7Ci0gICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKLSAgfQot
I2Vsc2UKLSAgaWYgKHNldF9zeW1fcGVybXMpCi0gICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6
b3BlcmF0aW9uX25vdF9zdXBwb3J0ZWQpOwotICBpZiAoOjpjaG1vZChwLmNfc3RyKCksIHJlYWxf
cGVybXMpID09IC0xKSB7Ci0gICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsK
LSAgfQotI2VuZGlmCi19Ci0KLXBhdGggX19yZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJy
b3JfY29kZSogZWMpIHsKLSAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigicmVhZF9zeW1saW5rIiwg
ZWMsICZwKTsKLQotICBjaGFyIGJ1ZmZbUEFUSF9NQVggKyAxXTsKLSAgZXJyb3JfY29kZSBtX2Vj
OwotICA6OnNzaXplX3QgcmV0OwotICBpZiAoKHJldCA9IDo6cmVhZGxpbmsocC5jX3N0cigpLCBi
dWZmLCBQQVRIX01BWCkpID09IC0xKSB7Ci0gICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9l
cnJubygpKTsKLSAgfQotICBfTElCQ1BQX0FTU0VSVChyZXQgPD0gUEFUSF9NQVgsICJUT0RPIik7
Ci0gIF9MSUJDUFBfQVNTRVJUKHJldCA+IDAsICJUT0RPIik7Ci0gIGJ1ZmZbcmV0XSA9IDA7Ci0g
IHJldHVybiB7YnVmZn07Ci19Ci0KLWJvb2wgX19yZW1vdmUoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMpIHsKLSAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigicmVtb3ZlIiwgZWMsICZwKTsK
LSAgaWYgKDo6cmVtb3ZlKHAuY19zdHIoKSkgPT0gLTEpIHsKLSAgICBpZiAoZXJybm8gIT0gRU5P
RU5UKQotICAgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotbmFtZXNwYWNlIHsKLQotdWludG1heF90IHJl
bW92ZV9hbGxfaW1wbChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlJiBlYykgewotICBjb25zdCBh
dXRvIG5wb3MgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKLSAgY29uc3QgZmlsZV9zdGF0
dXMgc3QgPSBfX3N5bWxpbmtfc3RhdHVzKHAsICZlYyk7Ci0gIGlmIChlYykKLSAgICByZXR1cm4g
bnBvczsKLSAgdWludG1heF90IGNvdW50ID0gMTsKLSAgaWYgKGlzX2RpcmVjdG9yeShzdCkpIHsK
LSAgICBmb3IgKGRpcmVjdG9yeV9pdGVyYXRvciBpdChwLCBlYyk7ICFlYyAmJiBpdCAhPSBkaXJl
Y3RvcnlfaXRlcmF0b3IoKTsKLSAgICAgICAgIGl0LmluY3JlbWVudChlYykpIHsKLSAgICAgIGF1
dG8gb3RoZXJfY291bnQgPSByZW1vdmVfYWxsX2ltcGwoaXQtPnBhdGgoKSwgZWMpOwotICAgICAg
aWYgKGVjKQotICAgICAgICByZXR1cm4gbnBvczsKLSAgICAgIGNvdW50ICs9IG90aGVyX2NvdW50
OwotICAgIH0KLSAgICBpZiAoZWMpCi0gICAgICByZXR1cm4gbnBvczsKLSAgfQotICBpZiAoIV9f
cmVtb3ZlKHAsICZlYykpCi0gICAgcmV0dXJuIG5wb3M7Ci0gIHJldHVybiBjb3VudDsKLX0KLQot
fSAvLyBlbmQgbmFtZXNwYWNlCi0KLXVpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0aCYg
cCwgZXJyb3JfY29kZSogZWMpIHsKLSAgRXJyb3JIYW5kbGVyPHVpbnRtYXhfdD4gZXJyKCJyZW1v
dmVfYWxsIiwgZWMsICZwKTsKLQotICBlcnJvcl9jb2RlIG1lYzsKLSAgYXV0byBjb3VudCA9IHJl
bW92ZV9hbGxfaW1wbChwLCBtZWMpOwotICBpZiAobWVjKSB7Ci0gICAgaWYgKG1lYyA9PSBlcnJj
Ojpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KQotICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGVyci5yZXBvcnQobWVjKTsKLSAgfQotICByZXR1cm4gY291bnQ7Ci19Ci0KLXZvaWQgX19yZW5h
bWUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjKSB7Ci0g
IEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlbmFtZSIsIGVjLCAmZnJvbSwgJnRvKTsKLSAgaWYg
KDo6cmVuYW1lKGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCi0gICAgZXJyLnJlcG9y
dChjYXB0dXJlX2Vycm5vKCkpOwotfQotCi12b2lkIF9fcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYg
cCwgdWludG1heF90IHNpemUsIGVycm9yX2NvZGUqIGVjKSB7Ci0gIEVycm9ySGFuZGxlcjx2b2lk
PiBlcnIoInJlc2l6ZV9maWxlIiwgZWMsICZwKTsKLSAgaWYgKDo6dHJ1bmNhdGUocC5jX3N0cigp
LCBzdGF0aWNfY2FzdDwgOjpvZmZfdD4oc2l6ZSkpID09IC0xKQotICAgIHJldHVybiBlcnIucmVw
b3J0KGNhcHR1cmVfZXJybm8oKSk7Ci19Ci0KLXNwYWNlX2luZm8gX19zcGFjZShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlKiBlYykgewotICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJzcGFjZSIs
IGVjLCAmcCk7Ci0gIHNwYWNlX2luZm8gc2k7Ci0gIHN0cnVjdCBzdGF0dmZzIG1fc3ZmcyA9IHt9
OwotICBpZiAoOjpzdGF0dmZzKHAuY19zdHIoKSwgJm1fc3ZmcykgPT0gLTEpIHsKLSAgICBlcnIu
cmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Ci0gICAgc2kuY2FwYWNpdHkgPSBzaS5mcmVlID0gc2ku
YXZhaWxhYmxlID0gc3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7Ci0gICAgcmV0dXJuIHNpOwot
ICB9Ci0gIC8vIE11bHRpcGx5IHdpdGggb3ZlcmZsb3cgY2hlY2tpbmcuCi0gIGF1dG8gZG9fbXVs
dCA9IFsmXSh1aW50bWF4X3QmIG91dCwgdWludG1heF90IG90aGVyKSB7Ci0gICAgb3V0ID0gb3Ro
ZXIgKiBtX3N2ZnMuZl9mcnNpemU7Ci0gICAgaWYgKG90aGVyID09IDAgfHwgb3V0IC8gb3RoZXIg
IT0gbV9zdmZzLmZfZnJzaXplKQotICAgICAgb3V0ID0gc3RhdGljX2Nhc3Q8dWludG1heF90Pigt
MSk7Ci0gIH07Ci0gIGRvX211bHQoc2kuY2FwYWNpdHksIG1fc3Zmcy5mX2Jsb2Nrcyk7Ci0gIGRv
X211bHQoc2kuZnJlZSwgbV9zdmZzLmZfYmZyZWUpOwotICBkb19tdWx0KHNpLmF2YWlsYWJsZSwg
bV9zdmZzLmZfYmF2YWlsKTsKLSAgcmV0dXJuIHNpOwotfQotCi1maWxlX3N0YXR1cyBfX3N0YXR1
cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgewotICByZXR1cm4gZGV0YWlsOjpwb3Np
eF9zdGF0KHAsIGVjKTsKLX0KLQotZmlsZV9zdGF0dXMgX19zeW1saW5rX3N0YXR1cyhjb25zdCBw
YXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgewotICByZXR1cm4gZGV0YWlsOjpwb3NpeF9sc3RhdChw
LCBlYyk7Ci19Ci0KLXBhdGggX190ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUqIGVjKSB7
Ci0gIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoInRlbXBfZGlyZWN0b3J5X3BhdGgiLCBlYyk7Ci0K
LSAgY29uc3QgY2hhciogZW52X3BhdGhzW10gPSB7IlRNUERJUiIsICJUTVAiLCAiVEVNUCIsICJU
RU1QRElSIn07Ci0gIGNvbnN0IGNoYXIqIHJldCA9IG51bGxwdHI7Ci0KLSAgZm9yIChhdXRvJiBl
cCA6IGVudl9wYXRocykKLSAgICBpZiAoKHJldCA9IGdldGVudihlcCkpKQotICAgICAgYnJlYWs7
Ci0gIGlmIChyZXQgPT0gbnVsbHB0cikKLSAgICByZXQgPSAiL3RtcCI7Ci0KLSAgcGF0aCBwKHJl
dCk7Ci0gIGVycm9yX2NvZGUgbV9lYzsKLSAgZmlsZV9zdGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4
X3N0YXQocCwgJm1fZWMpOwotICBpZiAoIXN0YXR1c19rbm93bihzdCkpCi0gICAgcmV0dXJuIGVy
ci5yZXBvcnQobV9lYywgImNhbm5vdCBhY2Nlc3MgcGF0aCBcIiVzXCIiLCBwKTsKLQotICBpZiAo
IWV4aXN0cyhzdCkgfHwgIWlzX2RpcmVjdG9yeShzdCkpCi0gICAgcmV0dXJuIGVyci5yZXBvcnQo
ZXJyYzo6bm90X2FfZGlyZWN0b3J5LCAicGF0aCBcIiVzXCIgaXMgbm90IGEgZGlyZWN0b3J5IiwK
LSAgICAgICAgICAgICAgICAgICAgICBwKTsKLQotICByZXR1cm4gcDsKLX0KLQotcGF0aCBfX3dl
YWtseV9jYW5vbmljYWwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKLSAgRXJyb3JI
YW5kbGVyPHBhdGg+IGVycigid2Vha2x5X2Nhbm9uaWNhbCIsIGVjLCAmcCk7Ci0KLSAgaWYgKHAu
ZW1wdHkoKSkKLSAgICByZXR1cm4gX19jYW5vbmljYWwoIiIsIGVjKTsKLQotICBwYXRoIHJlc3Vs
dDsKLSAgcGF0aCB0bXA7Ci0gIHRtcC5fX3Jlc2VydmUocC5uYXRpdmUoKS5zaXplKCkpOwotICBh
dXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlRW5kKHAubmF0aXZlKCkpOwotICAtLVBQOwotICB2
ZWN0b3I8c3RyaW5nX3ZpZXdfdD4gRE5FUGFydHM7Ci0KLSAgd2hpbGUgKFBQLlN0YXRlICE9IFBh
dGhQYXJzZXI6OlBTX0JlZm9yZUJlZ2luKSB7Ci0gICAgdG1wLmFzc2lnbihjcmVhdGVWaWV3KHAu
bmF0aXZlKCkuZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFjaygpKSk7Ci0gICAgZXJyb3JfY29kZSBt
X2VjOwotICAgIGZpbGVfc3RhdHVzIHN0ID0gX19zdGF0dXModG1wLCAmbV9lYyk7Ci0gICAgaWYg
KCFzdGF0dXNfa25vd24oc3QpKSB7Ci0gICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKLSAg
ICB9IGVsc2UgaWYgKGV4aXN0cyhzdCkpIHsKLSAgICAgIHJlc3VsdCA9IF9fY2Fub25pY2FsKHRt
cCwgZWMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIERORVBhcnRzLnB1c2hfYmFjaygqUFAp
OwotICAgIC0tUFA7Ci0gIH0KLSAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0JlZm9y
ZUJlZ2luKQotICAgIHJlc3VsdCA9IF9fY2Fub25pY2FsKCIiLCBlYyk7Ci0gIGlmIChlYykKLSAg
ICBlYy0+Y2xlYXIoKTsKLSAgaWYgKERORVBhcnRzLmVtcHR5KCkpCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLSAgZm9yIChhdXRvIEl0ID0gRE5FUGFydHMucmJlZ2luKCk7IEl0ICE9IERORVBhcnRzLnJl
bmQoKTsgKytJdCkKLSAgICByZXN1bHQgLz0gKkl0OwotICByZXR1cm4gcmVzdWx0LmxleGljYWxs
eV9ub3JtYWwoKTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0aCBkZWZpbml0aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ci0vKiBjb25zdGV4cHIgcGF0aDo6dmFsdWVfdHlwZSBwYXRoOjpwcmVmZXJyZWRfc2VwYXJhdG9y
OyAqLwotCi1wYXRoJiBwYXRoOjpyZXBsYWNlX2V4dGVuc2lvbihwYXRoIGNvbnN0JiByZXBsYWNl
bWVudCkgewotICBwYXRoIHAgPSBleHRlbnNpb24oKTsKLSAgaWYgKG5vdCBwLmVtcHR5KCkpIHsK
LSAgICBfX3BuXy5lcmFzZShfX3BuXy5zaXplKCkgLSBwLm5hdGl2ZSgpLnNpemUoKSk7Ci0gIH0K
LSAgaWYgKCFyZXBsYWNlbWVudC5lbXB0eSgpKSB7Ci0gICAgaWYgKHJlcGxhY2VtZW50Lm5hdGl2
ZSgpWzBdICE9ICcuJykgewotICAgICAgX19wbl8gKz0gIi4iOwotICAgIH0KLSAgICBfX3BuXy5h
cHBlbmQocmVwbGFjZW1lbnQuX19wbl8pOwotICB9Ci0gIHJldHVybiAqdGhpczsKLX0KLQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8gcGF0aC5kZWNvbXBvc2UKLQotc3RyaW5nX3ZpZXdfdCBw
YXRoOjpfX3Jvb3RfbmFtZSgpIGNvbnN0IHsKLSAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0
ZUJlZ2luKF9fcG5fKTsKLSAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5h
bWUpCi0gICAgcmV0dXJuICpQUDsKLSAgcmV0dXJuIHt9OwotfQotCi1zdHJpbmdfdmlld190IHBh
dGg6Ol9fcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7Ci0gIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpD
cmVhdGVCZWdpbihfX3BuXyk7Ci0gIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJv
b3ROYW1lKQotICAgICsrUFA7Ci0gIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJv
b3REaXIpCi0gICAgcmV0dXJuICpQUDsKLSAgcmV0dXJuIHt9OwotfQotCi1zdHJpbmdfdmlld190
IHBhdGg6Ol9fcm9vdF9wYXRoX3JhdygpIGNvbnN0IHsKLSAgYXV0byBQUCA9IFBhdGhQYXJzZXI6
OkNyZWF0ZUJlZ2luKF9fcG5fKTsKLSAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0lu
Um9vdE5hbWUpIHsKLSAgICBhdXRvIE5leHRDaCA9IFBQLnBlZWsoKTsKLSAgICBpZiAoTmV4dENo
ICYmICpOZXh0Q2ggPT0gJy8nKSB7Ci0gICAgICArK1BQOwotICAgICAgcmV0dXJuIGNyZWF0ZVZp
ZXcoX19wbl8uZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFjaygpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFBQLlJhd0VudHJ5OwotICB9Ci0gIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJv
b3REaXIpCi0gICAgcmV0dXJuICpQUDsKLSAgcmV0dXJuIHt9OwotfQotCi1zdGF0aWMgYm9vbCBD
b25zdW1lUm9vdERpcihQYXRoUGFyc2VyKiBQUCkgewotICB3aGlsZSAoUFAtPlN0YXRlIDw9IFBh
dGhQYXJzZXI6OlBTX0luUm9vdERpcikKLSAgICArKygqUFApOwotICByZXR1cm4gUFAtPlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0F0RW5kOwotfQotCi1zdHJpbmdfdmlld190IHBhdGg6Ol9fcmVs
YXRpdmVfcGF0aCgpIGNvbnN0IHsKLSAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2lu
KF9fcG5fKTsKLSAgaWYgKENvbnN1bWVSb290RGlyKCZQUCkpCi0gICAgcmV0dXJuIHt9OwotICBy
ZXR1cm4gY3JlYXRlVmlldyhQUC5SYXdFbnRyeS5kYXRhKCksICZfX3BuXy5iYWNrKCkpOwotfQot
Ci1zdHJpbmdfdmlld190IHBhdGg6Ol9fcGFyZW50X3BhdGgoKSBjb25zdCB7Ci0gIGlmIChlbXB0
eSgpKQotICAgIHJldHVybiB7fTsKLSAgLy8gRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByb290IHBh
dGggYnV0IG5vdCBhIHJlbGF0aXZlIHBhdGguIEluIHRoYXQgY2FzZQotICAvLyByZXR1cm4gKnRo
aXMuCi0gIHsKLSAgICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOwot
ICAgIGlmIChDb25zdW1lUm9vdERpcigmUFApKQotICAgICAgcmV0dXJuIF9fcG5fOwotICB9Ci0g
IC8vIE90aGVyd2lzZSByZW1vdmUgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBlbmQgb2YgdGhl
IHBhdGgsIGFuZCByZXR1cm4KLSAgLy8gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoYXQgcGF0aAot
ICB7Ci0gICAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUVuZChfX3BuXyk7Ci0gICAgLS1Q
UDsKLSAgICBpZiAoUFAuUmF3RW50cnkuZGF0YSgpID09IF9fcG5fLmRhdGEoKSkKLSAgICAgIHJl
dHVybiB7fTsKLSAgICAtLVBQOwotICAgIHJldHVybiBjcmVhdGVWaWV3KF9fcG5fLmRhdGEoKSwg
JlBQLlJhd0VudHJ5LmJhY2soKSk7Ci0gIH0KLX0KLQotc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX2Zp
bGVuYW1lKCkgY29uc3QgewotICBpZiAoZW1wdHkoKSkKLSAgICByZXR1cm4ge307Ci0gIHsKLSAg
ICBQYXRoUGFyc2VyIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOwotICAgIGlm
IChDb25zdW1lUm9vdERpcigmUFApKQotICAgICAgcmV0dXJuIHt9OwotICB9Ci0gIHJldHVybiAq
KC0tUGF0aFBhcnNlcjo6Q3JlYXRlRW5kKF9fcG5fKSk7Ci19Ci0KLXN0cmluZ192aWV3X3QgcGF0
aDo6X19zdGVtKCkgY29uc3QgewotICByZXR1cm4gcGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShf
X2ZpbGVuYW1lKCkpLmZpcnN0OwotfQotCi1zdHJpbmdfdmlld190IHBhdGg6Ol9fZXh0ZW5zaW9u
KCkgY29uc3QgewotICByZXR1cm4gcGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShfX2ZpbGVuYW1l
KCkpLnNlY29uZDsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gcGF0aC5nZW4KLQotZW51
bSBQYXRoUGFydEtpbmQgOiB1bnNpZ25lZCBjaGFyIHsKLSAgUEtfTm9uZSwKLSAgUEtfUm9vdFNl
cCwKLSAgUEtfRmlsZW5hbWUsCi0gIFBLX0RvdCwKLSAgUEtfRG90RG90LAotICBQS19UcmFpbGlu
Z1NlcAotfTsKLQotc3RhdGljIFBhdGhQYXJ0S2luZCBDbGFzc2lmeVBhdGhQYXJ0KHN0cmluZ192
aWV3X3QgUGFydCkgewotICBpZiAoUGFydC5lbXB0eSgpKQotICAgIHJldHVybiBQS19UcmFpbGlu
Z1NlcDsKLSAgaWYgKFBhcnQgPT0gIi4iKQotICAgIHJldHVybiBQS19Eb3Q7Ci0gIGlmIChQYXJ0
ID09ICIuLiIpCi0gICAgcmV0dXJuIFBLX0RvdERvdDsKLSAgaWYgKFBhcnQgPT0gIi8iKQotICAg
IHJldHVybiBQS19Sb290U2VwOwotICByZXR1cm4gUEtfRmlsZW5hbWU7Ci19Ci0KLXBhdGggcGF0
aDo6bGV4aWNhbGx5X25vcm1hbCgpIGNvbnN0IHsKLSAgaWYgKF9fcG5fLmVtcHR5KCkpCi0gICAg
cmV0dXJuICp0aGlzOwotCi0gIHVzaW5nIFBhcnRLaW5kUGFpciA9IHBhaXI8c3RyaW5nX3ZpZXdf
dCwgUGF0aFBhcnRLaW5kPjsKLSAgdmVjdG9yPFBhcnRLaW5kUGFpcj4gUGFydHM7Ci0gIC8vIEd1
ZXNzIGFzIHRvIGhvdyBtYW55IGVsZW1lbnRzIHRoZSBwYXRoIGhhcyB0byBhdm9pZCByZWFsbG9j
YXRpbmcuCi0gIFBhcnRzLnJlc2VydmUoMzIpOwotCi0gIC8vIFRyYWNrIHRoZSB0b3RhbCBzaXpl
IG9mIHRoZSBwYXJ0cyBhcyB3ZSBjb2xsZWN0IHRoZW0uIFRoaXMgYWxsb3dzIHRoZQotICAvLyBy
ZXN1bHRpbmcgcGF0aCB0byByZXNlcnZlIHRoZSBjb3JyZWN0IGFtb3VudCBvZiBtZW1vcnkuCi0g
IHNpemVfdCBOZXdQYXRoU2l6ZSA9IDA7Ci0gIGF1dG8gQWRkUGFydCA9IFsmXShQYXRoUGFydEtp
bmQgSywgc3RyaW5nX3ZpZXdfdCBQKSB7Ci0gICAgTmV3UGF0aFNpemUgKz0gUC5zaXplKCk7Ci0g
ICAgUGFydHMuZW1wbGFjZV9iYWNrKFAsIEspOwotICB9OwotICBhdXRvIExhc3RQYXJ0S2luZCA9
IFsmXSgpIHsKLSAgICBpZiAoUGFydHMuZW1wdHkoKSkKLSAgICAgIHJldHVybiBQS19Ob25lOwot
ICAgIHJldHVybiBQYXJ0cy5iYWNrKCkuc2Vjb25kOwotICB9OwotCi0gIGJvb2wgTWF5YmVOZWVk
VHJhaWxpbmdTZXAgPSBmYWxzZTsKLSAgLy8gQnVpbGQgYSBzdGFjayBjb250YWluaW5nIHRoZSBy
ZW1haW5pbmcgZWxlbWVudHMgb2YgdGhlIHBhdGgsIHBvcHBpbmcgb2ZmCi0gIC8vIGVsZW1lbnRz
IHdoaWNoIG9jY3VyIGJlZm9yZSBhICcuLicgZW50cnkuCi0gIGZvciAoYXV0byBQUCA9IFBhdGhQ
YXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsgUFA7ICsrUFApIHsKLSAgICBhdXRvIFBhcnQgPSAq
UFA7Ci0gICAgUGF0aFBhcnRLaW5kIEtpbmQgPSBDbGFzc2lmeVBhdGhQYXJ0KFBhcnQpOwotICAg
IHN3aXRjaCAoS2luZCkgewotICAgIGNhc2UgUEtfRmlsZW5hbWU6Ci0gICAgY2FzZSBQS19Sb290
U2VwOiB7Ci0gICAgICAvLyBBZGQgYWxsIG5vbi1kb3QgYW5kIG5vbi1kb3QtZG90IGVsZW1lbnRz
IHRvIHRoZSBzdGFjayBvZiBlbGVtZW50cy4KLSAgICAgIEFkZFBhcnQoS2luZCwgUGFydCk7Ci0g
ICAgICBNYXliZU5lZWRUcmFpbGluZ1NlcCA9IGZhbHNlOwotICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgUEtfRG90RG90OiB7Ci0gICAgICAvLyBPbmx5IHB1c2ggYSAiLi4iIGVsZW1lbnQg
aWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHByZWNlZGluZyB0aGUgIi4uIiwKLSAgICAgIC8vIG9y
IGlmIHRoZSBwcmVjZWRpbmcgZWxlbWVudCBpcyBpdHNlbGYgIi4uIi4KLSAgICAgIGF1dG8gTGFz
dEtpbmQgPSBMYXN0UGFydEtpbmQoKTsKLSAgICAgIGlmIChMYXN0S2luZCA9PSBQS19GaWxlbmFt
ZSkgewotICAgICAgICBOZXdQYXRoU2l6ZSAtPSBQYXJ0cy5iYWNrKCkuZmlyc3Quc2l6ZSgpOwot
ICAgICAgICBQYXJ0cy5wb3BfYmFjaygpOwotICAgICAgfSBlbHNlIGlmIChMYXN0S2luZCAhPSBQ
S19Sb290U2VwKQotICAgICAgICBBZGRQYXJ0KFBLX0RvdERvdCwgIi4uIik7Ci0gICAgICBNYXli
ZU5lZWRUcmFpbGluZ1NlcCA9IExhc3RLaW5kID09IFBLX0ZpbGVuYW1lOwotICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUEtfRG90OgotICAgIGNhc2UgUEtfVHJhaWxpbmdTZXA6IHsKLSAg
ICAgIE1heWJlTmVlZFRyYWlsaW5nU2VwID0gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFBLX05vbmU6Ci0gICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICB9
Ci0gIC8vIFtmcy5wYXRoLmdlbmVyaWNdcDYuODogSWYgdGhlIHBhdGggaXMgZW1wdHksIGFkZCBh
IGRvdC4KLSAgaWYgKFBhcnRzLmVtcHR5KCkpCi0gICAgcmV0dXJuICIuIjsKLQotICAvLyBbZnMu
cGF0aC5nZW5lcmljXXA2Ljc6IElmIHRoZSBsYXN0IGZpbGVuYW1lIGlzIGRvdC1kb3QsIHJlbW92
ZSBhbnkKLSAgLy8gdHJhaWxpbmcgZGlyZWN0b3J5LXNlcGFyYXRvci4KLSAgYm9vbCBOZWVkVHJh
aWxpbmdTZXAgPSBNYXliZU5lZWRUcmFpbGluZ1NlcCAmJiBMYXN0UGFydEtpbmQoKSA9PSBQS19G
aWxlbmFtZTsKLQotICBwYXRoIFJlc3VsdDsKLSAgUmVzdWx0Ll9fcG5fLnJlc2VydmUoUGFydHMu
c2l6ZSgpICsgTmV3UGF0aFNpemUgKyBOZWVkVHJhaWxpbmdTZXApOwotICBmb3IgKGF1dG8mIFBL
IDogUGFydHMpCi0gICAgUmVzdWx0IC89IFBLLmZpcnN0OwotCi0gIGlmIChOZWVkVHJhaWxpbmdT
ZXApCi0gICAgUmVzdWx0IC89ICIiOwotCi0gIHJldHVybiBSZXN1bHQ7Ci19Ci0KLXN0YXRpYyBp
bnQgRGV0ZXJtaW5lTGV4aWNhbEVsZW1lbnRDb3VudChQYXRoUGFyc2VyIFBQKSB7Ci0gIGludCBD
b3VudCA9IDA7Ci0gIGZvciAoOyBQUDsgKytQUCkgewotICAgIGF1dG8gRWxlbSA9ICpQUDsKLSAg
ICBpZiAoRWxlbSA9PSAiLi4iKQotICAgICAgLS1Db3VudDsKLSAgICBlbHNlIGlmIChFbGVtICE9
ICIuIikKLSAgICAgICsrQ291bnQ7Ci0gIH0KLSAgcmV0dXJuIENvdW50OwotfQotCi1wYXRoIHBh
dGg6OmxleGljYWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBiYXNlKSBjb25zdCB7Ci0gIHsgLy8g
cGVyZm9ybSByb290LW5hbWUvcm9vdC1kaXJlY3RvcnkgbWlzbWF0Y2ggY2hlY2tzCi0gICAgYXV0
byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKLSAgICBhdXRvIFBQQmFzZSA9
IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKGJhc2UuX19wbl8pOwotICAgIGF1dG8gQ2hlY2tJdGVy
TWlzbWF0Y2hBdEJhc2UgPSBbJl0oKSB7Ci0gICAgICByZXR1cm4gUFAuU3RhdGUgIT0gUFBCYXNl
LlN0YXRlICYmCi0gICAgICAgICAgICAgKFBQLmluUm9vdFBhdGgoKSB8fCBQUEJhc2UuaW5Sb290
UGF0aCgpKTsKLSAgICB9OwotICAgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJv
b3ROYW1lICYmCi0gICAgICAgIFBQQmFzZS5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3RO
YW1lKSB7Ci0gICAgICBpZiAoKlBQICE9ICpQUEJhc2UpCi0gICAgICAgIHJldHVybiB7fTsKLSAg
ICB9IGVsc2UgaWYgKENoZWNrSXRlck1pc21hdGNoQXRCYXNlKCkpCi0gICAgICByZXR1cm4ge307
Ci0KLSAgICBpZiAoUFAuaW5Sb290UGF0aCgpKQotICAgICAgKytQUDsKLSAgICBpZiAoUFBCYXNl
LmluUm9vdFBhdGgoKSkKLSAgICAgICsrUFBCYXNlOwotICAgIGlmIChDaGVja0l0ZXJNaXNtYXRj
aEF0QmFzZSgpKQotICAgICAgcmV0dXJuIHt9OwotICB9Ci0KLSAgLy8gRmluZCB0aGUgZmlyc3Qg
bWlzbWF0Y2hpbmcgZWxlbWVudAotICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4o
X19wbl8pOwotICBhdXRvIFBQQmFzZSA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKGJhc2UuX19w
bl8pOwotICB3aGlsZSAoUFAgJiYgUFBCYXNlICYmIFBQLlN0YXRlID09IFBQQmFzZS5TdGF0ZSAm
JiAqUFAgPT0gKlBQQmFzZSkgewotICAgICsrUFA7Ci0gICAgKytQUEJhc2U7Ci0gIH0KLQotICAv
LyBJZiB0aGVyZSBpcyBubyBtaXNtYXRjaCwgcmV0dXJuICIuIi4KLSAgaWYgKCFQUCAmJiAhUFBC
YXNlKQotICAgIHJldHVybiAiLiI7Ci0KLSAgLy8gT3RoZXJ3aXNlLCBkZXRlcm1pbmUgdGhlIG51
bWJlciBvZiBlbGVtZW50cywgJ24nLCB3aGljaCBhcmUgbm90IGRvdCBvcgotICAvLyBkb3QtZG90
IG1pbnVzIHRoZSBudW1iZXIgb2YgZG90LWRvdCBlbGVtZW50cy4KLSAgaW50IEVsZW1Db3VudCA9
IERldGVybWluZUxleGljYWxFbGVtZW50Q291bnQoUFBCYXNlKTsKLSAgaWYgKEVsZW1Db3VudCA8
IDApCi0gICAgcmV0dXJuIHt9OwotCi0gIC8vIHJldHVybiBhIHBhdGggY29uc3RydWN0ZWQgd2l0
aCAnbicgZG90LWRvdCBlbGVtZW50cywgZm9sbG93ZWQgYnkgdGhlIHRoZQotICAvLyBlbGVtZW50
cyBvZiAnKnRoaXMnIGFmdGVyIHRoZSBtaXNtYXRjaC4KLSAgcGF0aCBSZXN1bHQ7Ci0gIC8vIEZJ
WE1FOiBSZXNlcnZlIGVub3VnaCByb29tIGluIFJlc3VsdCB0aGF0IGl0IHdvbid0IGhhdmUgdG8g
cmUtYWxsb2NhdGUuCi0gIHdoaWxlIChFbGVtQ291bnQtLSkKLSAgICBSZXN1bHQgLz0gIi4uIjsK
LSAgZm9yICg7IFBQOyArK1BQKQotICAgIFJlc3VsdCAvPSAqUFA7Ci0gIHJldHVybiBSZXN1bHQ7
Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIHBhdGguY29tcGFyaXNvbnMKLWludCBwYXRo
OjpfX2NvbXBhcmUoc3RyaW5nX3ZpZXdfdCBfX3MpIGNvbnN0IHsKLSAgYXV0byBQUCA9IFBhdGhQ
YXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKLSAgYXV0byBQUDIgPSBQYXRoUGFyc2VyOjpDcmVh
dGVCZWdpbihfX3MpOwotICB3aGlsZSAoUFAgJiYgUFAyKSB7Ci0gICAgaW50IHJlcyA9ICgqUFAp
LmNvbXBhcmUoKlBQMik7Ci0gICAgaWYgKHJlcyAhPSAwKQotICAgICAgcmV0dXJuIHJlczsKLSAg
ICArK1BQOwotICAgICsrUFAyOwotICB9Ci0gIGlmIChQUC5TdGF0ZSA9PSBQUDIuU3RhdGUgJiYg
IVBQKQotICAgIHJldHVybiAwOwotICBpZiAoIVBQKQotICAgIHJldHVybiAtMTsKLSAgcmV0dXJu
IDE7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIHBhdGgubm9ubWVtYmVycwotc2l6ZV90
IGhhc2hfdmFsdWUoY29uc3QgcGF0aCYgX19wKSBub2V4Y2VwdCB7Ci0gIGF1dG8gUFAgPSBQYXRo
UGFyc2VyOjpDcmVhdGVCZWdpbihfX3AubmF0aXZlKCkpOwotICBzaXplX3QgaGFzaF92YWx1ZSA9
IDA7Ci0gIGhhc2g8c3RyaW5nX3ZpZXdfdD4gaGFzaGVyOwotICB3aGlsZSAoUFApIHsKLSAgICBo
YXNoX3ZhbHVlID0gX19oYXNoX2NvbWJpbmUoaGFzaF92YWx1ZSwgaGFzaGVyKCpQUCkpOwotICAg
ICsrUFA7Ci0gIH0KLSAgcmV0dXJuIGhhc2hfdmFsdWU7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLS8vIHBhdGguaXRyCi1wYXRoOjppdGVyYXRvciBwYXRoOjpiZWdpbigpIGNvbnN0IHsKLSAg
YXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKLSAgaXRlcmF0b3IgaXQ7
Ci0gIGl0Ll9fcGF0aF9wdHJfID0gdGhpczsKLSAgaXQuX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxw
YXRoOjppdGVyYXRvcjo6X1BhcnNlclN0YXRlPihQUC5TdGF0ZSk7Ci0gIGl0Ll9fZW50cnlfID0g
UFAuUmF3RW50cnk7Ci0gIGl0Ll9fc3Rhc2hlZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7Ci0g
IHJldHVybiBpdDsKLX0KLQotcGF0aDo6aXRlcmF0b3IgcGF0aDo6ZW5kKCkgY29uc3QgewotICBp
dGVyYXRvciBpdHt9OwotICBpdC5fX3N0YXRlXyA9IHBhdGg6Oml0ZXJhdG9yOjpfQXRFbmQ7Ci0g
IGl0Ll9fcGF0aF9wdHJfID0gdGhpczsKLSAgcmV0dXJuIGl0OwotfQotCi1wYXRoOjppdGVyYXRv
ciYgcGF0aDo6aXRlcmF0b3I6Ol9faW5jcmVtZW50KCkgewotICBQYXRoUGFyc2VyIFBQKF9fcGF0
aF9wdHJfLT5uYXRpdmUoKSwgX19lbnRyeV8sIF9fc3RhdGVfKTsKLSAgKytQUDsKLSAgX19zdGF0
ZV8gPSBzdGF0aWNfY2FzdDxfUGFyc2VyU3RhdGU+KFBQLlN0YXRlKTsKLSAgX19lbnRyeV8gPSBQ
UC5SYXdFbnRyeTsKLSAgX19zdGFzaGVkX2VsZW1fLl9fYXNzaWduX3ZpZXcoKlBQKTsKLSAgcmV0
dXJuICp0aGlzOwotfQotCi1wYXRoOjppdGVyYXRvciYgcGF0aDo6aXRlcmF0b3I6Ol9fZGVjcmVt
ZW50KCkgewotICBQYXRoUGFyc2VyIFBQKF9fcGF0aF9wdHJfLT5uYXRpdmUoKSwgX19lbnRyeV8s
IF9fc3RhdGVfKTsKLSAgLS1QUDsKLSAgX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxfUGFyc2VyU3Rh
dGU+KFBQLlN0YXRlKTsKLSAgX19lbnRyeV8gPSBQUC5SYXdFbnRyeTsKLSAgX19zdGFzaGVkX2Vs
ZW1fLl9fYXNzaWduX3ZpZXcoKlBQKTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBlbnRy
eSBkZWZpbml0aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIF9MSUJDUFBf
V0lOMzJBUEkKLWVycm9yX2NvZGUgZGlyZWN0b3J5X2VudHJ5OjpfX2RvX3JlZnJlc2goKSBub2V4
Y2VwdCB7Ci0gIF9fZGF0YV8uX19yZXNldCgpOwotICBlcnJvcl9jb2RlIGZhaWx1cmVfZWM7Ci0K
LSAgU3RhdFQgZnVsbF9zdDsKLSAgZmlsZV9zdGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4X2xzdGF0
KF9fcF8sIGZ1bGxfc3QsICZmYWlsdXJlX2VjKTsKLSAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7
Ci0gICAgX19kYXRhXy5fX3Jlc2V0KCk7Ci0gICAgcmV0dXJuIGZhaWx1cmVfZWM7Ci0gIH0KLQot
ICBpZiAoIV9WU1REX0ZTOjpleGlzdHMoc3QpIHx8ICFfVlNURF9GUzo6aXNfc3ltbGluayhzdCkp
IHsKLSAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNo
Tm9uU3ltbGluazsKLSAgICBfX2RhdGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7Ci0gICAgX19kYXRh
Xy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKLSAgfSBlbHNlIHsgLy8gd2Ug
aGF2ZSBhIHN5bWxpbmsKLSAgICBfX2RhdGFfLl9fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25z
KCk7Ci0gICAgLy8gR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGlua2VkIGVudGl0eS4K
LSAgICAvLyBJZ25vcmUgZXJyb3JzIGZyb20gc3RhdCwgc2luY2Ugd2UgZG9uJ3Qgd2FudCBlcnJv
cnMgcmVnYXJkaW5nIHN5bWxpbmsKLSAgICAvLyByZXNvbHV0aW9uIHRvIGJlIHJlcG9ydGVkIHRv
IHRoZSB1c2VyLgotICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsKLSAgICBzdCA9IGRldGFpbDo6
cG9zaXhfc3RhdChfX3BfLCBmdWxsX3N0LCAmaWdub3JlZF9lYyk7Ci0KLSAgICBfX2RhdGFfLl9f
dHlwZV8gPSBzdC50eXBlKCk7Ci0gICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVy
bWlzc2lvbnMoKTsKLQotICAgIC8vIElmIHdlIGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaW5rLCB0
aGVuIG9ubHkgcGFydGlhbGx5IHBvcHVsYXRlIHRoZQotICAgIC8vIGNhY2hlLgotICAgIGlmICgh
c3RhdHVzX2tub3duKHN0KSkgewotICAgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0
b3J5X2VudHJ5OjpfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOwotICAgICAgcmV0dXJuIGVycm9y
X2NvZGV7fTsKLSAgICB9Ci0gICAgLy8gT3RoZXJ3aXNlLCB3ZSByZXNvbHZlZCB0aGUgbGluaywg
cG90ZW50aWFsbHkgYXMgbm90IGV4aXN0aW5nLgotICAgIC8vIFRoYXQncyBPSy4KLSAgICBfX2Rh
dGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGluazsKLSAg
fQotCi0gIGlmIChfVlNURF9GUzo6aXNfcmVndWxhcl9maWxlKHN0KSkKLSAgICBfX2RhdGFfLl9f
c2l6ZV8gPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KGZ1bGxfc3Quc3Rfc2l6ZSk7Ci0KLSAgaWYg
KF9WU1REX0ZTOjpleGlzdHMoc3QpKSB7Ci0gICAgX19kYXRhXy5fX25saW5rXyA9IHN0YXRpY19j
YXN0PHVpbnRtYXhfdD4oZnVsbF9zdC5zdF9ubGluayk7Ci0KLSAgICAvLyBBdHRlbXB0IHRvIGV4
dHJhY3QgdGhlIG10aW1lLCBhbmQgZmFpbCBpZiBpdCdzIG5vdCByZXByZXNlbnRhYmxlIHVzaW5n
Ci0gICAgLy8gZmlsZV90aW1lX3R5cGUuIEZvciBub3cgd2UgaWdub3JlIHRoZSBlcnJvciwgYXMg
d2UnbGwgcmVwb3J0IGl0IHdoZW4KLSAgICAvLyB0aGUgdmFsdWUgaXMgYWN0dWFsbHkgdXNlZC4K
LSAgICBlcnJvcl9jb2RlIGlnbm9yZWRfZWM7Ci0gICAgX19kYXRhXy5fX3dyaXRlX3RpbWVfID0K
LSAgICAgICAgX19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShfX3BfLCBmdWxsX3N0LCAmaWdub3Jl
ZF9lYyk7Ci0gIH0KLQotICByZXR1cm4gZmFpbHVyZV9lYzsKLX0KLSNlbHNlCi1lcnJvcl9jb2Rl
IGRpcmVjdG9yeV9lbnRyeTo6X19kb19yZWZyZXNoKCkgbm9leGNlcHQgewotICBfX2RhdGFfLl9f
cmVzZXQoKTsKLSAgZXJyb3JfY29kZSBmYWlsdXJlX2VjOwotCi0gIGZpbGVfc3RhdHVzIHN0ID0g
X1ZTVERfRlM6OnN5bWxpbmtfc3RhdHVzKF9fcF8sIGZhaWx1cmVfZWMpOwotICBpZiAoIXN0YXR1
c19rbm93bihzdCkpIHsKLSAgICBfX2RhdGFfLl9fcmVzZXQoKTsKLSAgICByZXR1cm4gZmFpbHVy
ZV9lYzsKLSAgfQotCi0gIGlmICghX1ZTVERfRlM6OmV4aXN0cyhzdCkgfHwgIV9WU1REX0ZTOjpp
c19zeW1saW5rKHN0KSkgewotICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9l
bnRyeTo6X1JlZnJlc2hOb25TeW1saW5rOwotICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUo
KTsKLSAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOwotICB9
IGVsc2UgeyAvLyB3ZSBoYXZlIGEgc3ltbGluawotICAgIF9fZGF0YV8uX19zeW1fcGVybXNfID0g
c3QucGVybWlzc2lvbnMoKTsKLSAgICAvLyBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBs
aW5rZWQgZW50aXR5LgotICAgIC8vIElnbm9yZSBlcnJvcnMgZnJvbSBzdGF0LCBzaW5jZSB3ZSBk
b24ndCB3YW50IGVycm9ycyByZWdhcmRpbmcgc3ltbGluawotICAgIC8vIHJlc29sdXRpb24gdG8g
YmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuCi0gICAgZXJyb3JfY29kZSBpZ25vcmVkX2VjOwotICAg
IHN0ID0gX1ZTVERfRlM6OnN0YXR1cyhfX3BfLCBpZ25vcmVkX2VjKTsKLQotICAgIF9fZGF0YV8u
X190eXBlXyA9IHN0LnR5cGUoKTsKLSAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5w
ZXJtaXNzaW9ucygpOwotCi0gICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlc29sdmUgdGhlIGxpbmss
IHRoZW4gb25seSBwYXJ0aWFsbHkgcG9wdWxhdGUgdGhlCi0gICAgLy8gY2FjaGUuCi0gICAgaWYg
KCFzdGF0dXNfa25vd24oc3QpKSB7Ci0gICAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJl
Y3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ7Ci0gICAgICByZXR1cm4gZXJy
b3JfY29kZXt9OwotICAgIH0KLSAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3Rvcnlf
ZW50cnk6Ol9SZWZyZXNoU3ltbGluazsKLSAgfQotCi0gIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJl
bnRseSBicm9rZW4sIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb25seSBhIHBsYWNlaG9sZGVyLgot
ICAvLyBXZSBuZWVkIHRvIGNhY2hlIGxhc3Rfd3JpdGVfdGltZSwgZmlsZV9zaXplLCBhbmQgaGFy
ZF9saW5rX2NvdW50IGhlcmUgYmVmb3JlCi0gIC8vIHRoZSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxs
eSB3b3Jrcy4KLQotICByZXR1cm4gZmFpbHVyZV9lYzsKLX0KLSNlbmRpZgotCi1fTElCQ1BQX0VO
RF9OQU1FU1BBQ0VfRklMRVNZU1RFTQotCi0vKiAtLSBFTkQgZmlsZXN5c3RlbS9vcGVyYXRpb25z
LmNwcCAtLSAqLwotCi0jZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8
IDEwMTUwMAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1N0ZEZpbGVzeXN0ZW0uaCBiL1NvdXJjZS9XVEYvd3RmL1N0ZEZpbGVzeXN0ZW0uaAppbmRl
eCA0ZDU5YTMzYjdjZGU3MzIxZTBmN2VmMmFiODcwZTdmYmZmOWYxMmZhLi40NzgxMDM4NWNlY2Mz
ZTM1NmYxNzQ0OWJlNjllOWJlNzNjNzE5MmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9T
dGRGaWxlc3lzdGVtLmgKKysrIGIvU291cmNlL1dURi93dGYvU3RkRmlsZXN5c3RlbS5oCkBAIC0x
LDExICsxLDI3IEBACi0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmaWxlc3lzdGVt
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwotLy8KLS8vICAgICAgICAgICAg
ICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKLS8vCi0vLyBUaGlzIGZp
bGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBJ
bGxpbm9pcyBPcGVuCi0vLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLWxpYmMrKy50eHQg
Zm9yIGRldGFpbHMuCi0vLwotLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwogCiAjaWYgX19oYXNfaW5jbHVkZSg8ZmlsZXN5
c3RlbT4pCiAjaW5jbHVkZSA8ZmlsZXN5c3RlbT4KQEAgLTE1LDI2OTQgKzMxLDUgQEAgbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZmlsZXN5c3RlbSA9IHN0ZDo6ZXhwZXJpbWVudGFsOjpmaWxl
c3lzdGVtOwogfQogI2Vsc2UKLQotLyogSW1wb3J0cyBhIGNvcHkgb2YgPGZpbGVzeXN0ZW0+IGZy
b20gcjM0MzgzOCBvZiB0aGUgbGliYysrIHByb2plY3QuIFRoaXMKLSAgIGlzIG9ubHkgbmVlZGVk
IHVudGlsIG1hY09TIDEwLjE0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYXQgd2hpY2ggcG9pbnQg
YWxsCi0gICBwb3J0cyB3aWxsIHN1cHBvcnQgPGZpbGVzeXN0ZW0+IGRpcmVjdGx5LgotKi8KLQot
Ci0jaWZuZGVmIF9MSUJDUFBfRklMRVNZU1RFTQotI2RlZmluZSBfTElCQ1BQX0ZJTEVTWVNURU0K
LS8qCi0gICAgZmlsZXN5c3RlbSBzeW5vcHNpcwotCi0gICAgbmFtZXNwYWNlIHN0ZCB7IG5hbWVz
cGFjZSBmaWxlc3lzdGVtIHsKLQotICAgIGNsYXNzIHBhdGg7Ci0KLSAgICB2b2lkIHN3YXAocGF0
aCYgbGhzLCBwYXRoJiByaHMpIG5vZXhjZXB0OwotICAgIHNpemVfdCBoYXNoX3ZhbHVlKGNvbnN0
IHBhdGgmIHApIG5vZXhjZXB0OwotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhdGgmIGxo
cywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
cGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OwotICAgIGJvb2wgb3BlcmF0b3I8
IChjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7Ci0gICAgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKLSAg
ICBib29sIG9wZXJhdG9yPiAoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhj
ZXB0OwotICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJo
cykgbm9leGNlcHQ7Ci0KLSAgICBwYXRoIG9wZXJhdG9yLyAoY29uc3QgcGF0aCYgbGhzLCBjb25z
dCBwYXRoJiByaHMpOwotCi0gICAgLy8gZnMucGF0aC5pbyBvcGVyYXRvcnMgYXJlIGZyaWVuZHMg
b2YgcGF0aC4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cz4KLSAgICBm
cmllbmQgYmFzaWNfb3N0cmVhbTxjaGFyVCwgdHJhaXRzPiYKLSAgICBvcGVyYXRvcjw8KGJhc2lj
X29zdHJlYW08Y2hhclQsIHRyYWl0cz4mIG9zLCBjb25zdCBwYXRoJiBwKTsKLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzPgotICAgIGZyaWVuZCBiYXNpY19pc3RyZWFt
PGNoYXJULCB0cmFpdHM+JgotICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyVCwgdHJh
aXRzPiYgaXMsIHBhdGgmIHApOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFNvdXJjZT4KLSAgICAg
IHBhdGggdThwYXRoKGNvbnN0IFNvdXJjZSYgc291cmNlKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
SW5wdXRJdGVyYXRvcj4KLSAgICAgIHBhdGggdThwYXRoKElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCk7Ci0KLSAgICBjbGFzcyBmaWxlc3lzdGVtX2Vycm9yOwotICAgIGNs
YXNzIGRpcmVjdG9yeV9lbnRyeTsKLQotICAgIGNsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKLQot
ICAgIC8vIGVuYWJsZSBkaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVu
dHMKLSAgICBkaXJlY3RvcnlfaXRlcmF0b3IgYmVnaW4oZGlyZWN0b3J5X2l0ZXJhdG9yIGl0ZXIp
IG5vZXhjZXB0OwotICAgIGRpcmVjdG9yeV9pdGVyYXRvciBlbmQoY29uc3QgZGlyZWN0b3J5X2l0
ZXJhdG9yJikgbm9leGNlcHQ7Ci0KLSAgICBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOwotCi0gICAgLy8gZW5hYmxlIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2Ut
YmFzZWQgZm9yIHN0YXRlbWVudHMKLSAgICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIGJl
Z2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgaXRlcikgbm9leGNlcHQ7Ci0gICAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBlbmQoY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9p
dGVyYXRvciYpIG5vZXhjZXB0OwotCi0gICAgY2xhc3MgZmlsZV9zdGF0dXM7Ci0KLSAgICBzdHJ1
Y3Qgc3BhY2VfaW5mbwotICAgIHsKLSAgICAgIHVpbnRtYXhfdCBjYXBhY2l0eTsKLSAgICAgIHVp
bnRtYXhfdCBmcmVlOwotICAgICAgdWludG1heF90IGF2YWlsYWJsZTsKLSAgICB9OwotCi0gICAg
ZW51bSBjbGFzcyBmaWxlX3R5cGU7Ci0gICAgZW51bSBjbGFzcyBwZXJtczsKLSAgICBlbnVtIGNs
YXNzIHBlcm1fb3B0aW9uczsKLSAgICBlbnVtIGNsYXNzIGNvcHlfb3B0aW9uczsKLSAgICBlbnVt
IGNsYXNzIGRpcmVjdG9yeV9vcHRpb25zOwotCi0gICAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9p
bnQ8dHJpdmlhbC1jbG9jaz4gIGZpbGVfdGltZV90eXBlOwotCi0gICAgLy8gb3BlcmF0aW9uYWwg
ZnVuY3Rpb25zCi0KLSAgICBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIHApOwotICAgIHBhdGgg
YWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSAmZWMpOwotCi0gICAgcGF0aCBjYW5v
bmljYWwoY29uc3QgcGF0aCYgcCk7Ci0gICAgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpOwotCi0gICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0
IHBhdGgmIHRvKTsKLSAgICB2b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYg
dG8sIGVycm9yX2NvZGUmIGVjKTsKLSAgICB2b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29u
c3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zKTsKLSAgICB2b2lkIGNvcHkoY29uc3Qg
cGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zLAotICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKTsKLQotICAgIGJvb2wgY29weV9maWxlKGNvbnN0
IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvKTsKLSAgICBib29sIGNvcHlfZmlsZShjb25zdCBw
YXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSYgZWMpOwotICAgIGJvb2wgY29w
eV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0
aW9uKTsKLSAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0
bywgY29weV9vcHRpb25zIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIGVjKTsKLQotICAgIHZvaWQgY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIGV4aXN0aW5n
X3N5bWxpbmssIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKLSAgICB2b2lkIGNvcHlfc3ltbGlu
ayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsK
LQotICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHApOwotICAgIGJvb2wg
Y3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKLQotICAg
IGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwKTsKLSAgICBib29sIGNyZWF0ZV9k
aXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OwotCi0gICAg
Ym9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGF0dHJpYnV0
ZXMpOwotICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRo
JiBhdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKLQotICAgIHZvaWQgY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNv
bnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluayk7Ci0gICAgdm9pZCBjcmVhdGVf
ZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5r
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
ZWMpIG5vZXhjZXB0OwotCi0gICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIHRv
LCBjb25zdCBwYXRoJiBuZXdfaGFyZF9saW5rKTsKLSAgICB2b2lkIGNyZWF0ZV9oYXJkX2xpbmso
Y29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19oYXJkX2xpbmssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OwotCi0gICAgdm9p
ZCBjcmVhdGVfc3ltbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmsp
OwotICAgIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5l
d19zeW1saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7Ci0KLSAgICBwYXRoIGN1cnJlbnRfcGF0aCgpOwotICAgIHBhdGggY3VycmVu
dF9wYXRoKGVycm9yX2NvZGUmIGVjKTsKLSAgICB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRo
JiBwKTsKLSAgICB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7Ci0KLSAgICBib29sIGV4aXN0cyhmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsK
LSAgICBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBwKTsKLSAgICBib29sIGV4aXN0cyhjb25zdCBw
YXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7Ci0KLSAgICBib29sIGVxdWl2YWxlbnQo
Y29uc3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyKTsKLSAgICBib29sIGVxdWl2YWxlbnQoY29u
c3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7Ci0K
LSAgICB1aW50bWF4X3QgICAgZmlsZV9zaXplKGNvbnN0IHBhdGgmIHApOwotICAgIHVpbnRtYXhf
dCAgICBmaWxlX3NpemUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0Owot
Ci0gICAgdWludG1heF90ICAgIGhhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBwKTsKLSAgICB1
aW50bWF4X3QgICAgaGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVj
KSBub2V4Y2VwdDsKLQotICAgIGJvb2wgaXNfYmxvY2tfZmlsZShmaWxlX3N0YXR1cyBzKSBub2V4
Y2VwdDsKLSAgICBib29sIGlzX2Jsb2NrX2ZpbGUoY29uc3QgcGF0aCYgcCk7Ci0gICAgYm9vbCBp
c19ibG9ja19maWxlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKLQot
ICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7Ci0gICAg
Ym9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBwKTsKLSAgICBib29sIGlzX2NoYXJh
Y3Rlcl9maWxlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKLQotICAg
IGJvb2wgaXNfZGlyZWN0b3J5KGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OwotICAgIGJvb2wgaXNf
ZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHApOwotICAgIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBh
dGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKLQotICAgIGJvb2wgaXNfZW1wdHkoY29u
c3QgcGF0aCYgcCk7Ci0gICAgYm9vbCBpc19lbXB0eShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
JiBlYykgbm9leGNlcHQ7Ci0KLSAgICBib29sIGlzX2ZpZm8oZmlsZV9zdGF0dXMgcykgbm9leGNl
cHQ7Ci0gICAgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIHApOwotICAgIGJvb2wgaXNfZmlmbyhj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7Ci0KLSAgICBib29sIGlzX290
aGVyKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OwotICAgIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0
aCYgcCk7Ci0gICAgYm9vbCBpc19vdGhlcihjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7Ci0KLSAgICBib29sIGlzX3JlZ3VsYXJfZmlsZShmaWxlX3N0YXR1cyBzKSBub2V4
Y2VwdDsKLSAgICBib29sIGlzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBwKTsKLSAgICBib29s
IGlzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7
Ci0KLSAgICBib29sIGlzX3NvY2tldChmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKLSAgICBib29s
IGlzX3NvY2tldChjb25zdCBwYXRoJiBwKTsKLSAgICBib29sIGlzX3NvY2tldChjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7Ci0KLSAgICBib29sIGlzX3N5bWxpbmsoZmls
ZV9zdGF0dXMgcykgbm9leGNlcHQ7Ci0gICAgYm9vbCBpc19zeW1saW5rKGNvbnN0IHBhdGgmIHAp
OwotICAgIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7Ci0KLSAgICBmaWxlX3RpbWVfdHlwZSAgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgm
IHApOwotICAgIGZpbGVfdGltZV90eXBlICBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OwotICAgIHZvaWQgbGFzdF93cml0ZV90aW1lKGNvbnN0
IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5ld190aW1lKTsKLSAgICB2b2lkIGxhc3Rfd3JpdGVf
dGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKLQotICAgIHZv
aWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywKLSAgICAgICAgICAgICAg
ICAgICAgIHBlcm1fb3B0aW9ucyBvcHRzPXBlcm1fb3B0aW9uczo6cmVwbGFjZSk7Ci0gICAgdm9p
ZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBwLCBwZXJtcyBwcm1zLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7Ci0gICAgdm9pZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBwLCBwZXJtcyBwcm1z
LCBwZXJtX29wdGlvbnMgb3B0cywKLSAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVj
KTsKLQotICAgIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsK
LSAgICBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlID0gY3Vy
cmVudF9wYXRoKCkpOwotICAgIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBh
dGgmIGJhc2UsIGVycm9yX2NvZGUgJmVjKTsKLQotICAgIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0
IHBhdGgmIHApOwotICAgIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHAsIGVycm9yX2Nv
ZGUmIGVjKTsKLQotICAgIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYg
ZWMpOwotICAgIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZT1j
dXJyZW50X3BhdGgoKSk7Ci0gICAgcGF0aCByZWxhdGl2ZShjb25zdCBwYXRoJiBwLCBjb25zdCBw
YXRoJiBiYXNlLCBlcnJvcl9jb2RlJiBlYyk7Ci0KLSAgICBib29sIHJlbW92ZShjb25zdCBwYXRo
JiBwKTsKLSAgICBib29sIHJlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7Ci0KLSAgICB1aW50bWF4X3QgICAgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwKTsKLSAg
ICB1aW50bWF4X3QgICAgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7
Ci0KLSAgICB2b2lkIHJlbmFtZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7Ci0g
ICAgdm9pZCByZW5hbWUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKLQotICAgIHZvaWQgcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwg
dWludG1heF90IHNpemUpOwotICAgIHZvaWQgcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWlu
dG1heF90IHNpemUsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKLQotICAgIHNwYWNlX2luZm8g
ICBzcGFjZShjb25zdCBwYXRoJiBwKTsKLSAgICBzcGFjZV9pbmZvICAgc3BhY2UoY29uc3QgcGF0
aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OwotCi0gICAgZmlsZV9zdGF0dXMgIHN0YXR1
cyhjb25zdCBwYXRoJiBwKTsKLSAgICBmaWxlX3N0YXR1cyAgc3RhdHVzKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKLQotICAgIGJvb2wgc3RhdHVzX2tub3duKGZpbGVf
c3RhdHVzIHMpIG5vZXhjZXB0OwotCi0gICAgZmlsZV9zdGF0dXMgIHN5bWxpbmtfc3RhdHVzKGNv
bnN0IHBhdGgmIHApOwotICAgIGZpbGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7Ci0KLSAgICBwYXRoIHRlbXBfZGlyZWN0b3J5
X3BhdGgoKTsKLSAgICBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSYgZWMpOwot
Ci0gICAgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIHApOwotICAgIHBhdGggd2Vh
a2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlJiBlYyk7Ci0KLQotfSB9ICAv
LyBuYW1lc3BhY2VzIHN0ZDo6ZmlsZXN5c3RlbQotCi0qLwotCi0jaW5jbHVkZSA8X19jb25maWc+
Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPGNocm9u
bz4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8bG9j
YWxlPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdGFjaz4KLSNpbmNsdWRlIDxzdHJp
bmc+Ci0jaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVk
ZSA8aW9tYW5pcD4gLy8gZm9yIHF1b3RlZAotI2luY2x1ZGUgPHN0cmluZ192aWV3PgotLyogI2lu
Y2x1ZGUgPHZlcnNpb24+ICovCi0KLSNpbmNsdWRlIDxfX2RlYnVnPgotCi0jaWYgX0xJQkNQUF9T
VERfVkVSID49IDE3Ci0jZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0g
XAotICBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9TVEQgaW5saW5lIG5hbWVzcGFjZSBfX2ZzIHsg
bmFtZXNwYWNlIGZpbGVzeXN0ZW0gewotI2Vsc2UKLSNkZWZpbmUgX0xJQkNQUF9CRUdJTl9OQU1F
U1BBQ0VfRklMRVNZU1RFTSBcCi0gIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURCBuYW1lc3Bh
Y2UgX19mcyB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKLSNlbmRpZgotCi0jZGVmaW5lIF9MSUJD
UFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKLSAgX0xJQkNQUF9FTkRfTkFNRVNQQUNFX1NU
RCB9IH0KLQotI2RlZmluZSBfVlNURF9GUyBfVlNURDo6X19mczo6ZmlsZXN5c3RlbQotCi0jaWYg
IWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fUFJBR01BX1NZU1RFTV9IRUFERVIpCi0jcHJhZ21hIEdD
QyBzeXN0ZW1faGVhZGVyCi0jZW5kaWYKLQotX0xJQkNQUF9QVVNIX01BQ1JPUwotI2luY2x1ZGUg
PF9fdW5kZWZfbWFjcm9zPgotCi0jaWZuZGVmIF9MSUJDUFBfQ1hYMDNfTEFORwotCi1fTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCi0KLXN0cnVjdCBfRmlsZXN5c3RlbUNsb2NrIHsK
LSNpZiAhZGVmaW5lZChfTElCQ1BQX0hBU19OT19JTlQxMjgpCi0gIHR5cGVkZWYgX19pbnQxMjhf
dCByZXA7Ci0gIHR5cGVkZWYgbmFubyBwZXJpb2Q7Ci0jZWxzZQotICB0eXBlZGVmIGxvbmcgbG9u
ZyByZXA7Ci0gIHR5cGVkZWYgbmFubyBwZXJpb2Q7Ci0jZW5kaWYKLQotICB0eXBlZGVmIGNocm9u
bzo6ZHVyYXRpb248cmVwLCBwZXJpb2Q+IGR1cmF0aW9uOwotICB0eXBlZGVmIGNocm9ubzo6dGlt
ZV9wb2ludDxfRmlsZXN5c3RlbUNsb2NrPiB0aW1lX3BvaW50OwotCi0gIHN0YXRpYyBfTElCQ1BQ
X0NPTlNURVhQUl9BRlRFUl9DWFgxMSBjb25zdCBib29sIGlzX3N0ZWFkeSA9IGZhbHNlOwotCi0g
IF9MSUJDUFBfRlVOQ19WSVMgc3RhdGljIHRpbWVfcG9pbnQgbm93KCkgbm9leGNlcHQ7Ci0KLSAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBzdGF0aWMgdGltZV90IHRvX3RpbWVfdChjb25z
dCB0aW1lX3BvaW50JiBfX3QpIG5vZXhjZXB0IHsKLSAgICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRp
b248cmVwPiBfX3NlY3M7Ci0gICAgcmV0dXJuIHRpbWVfdCgKLSAgICAgICAgY2hyb25vOjpkdXJh
dGlvbl9jYXN0PF9fc2Vjcz4oX190LnRpbWVfc2luY2VfZXBvY2goKSkuY291bnQoKSk7Ci0gIH0K
LQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHN0YXRpYyB0aW1lX3BvaW50IGZyb21f
dGltZV90KHRpbWVfdCBfX3QpIG5vZXhjZXB0IHsKLSAgICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRp
b248cmVwPiBfX3NlY3M7Ci0gICAgcmV0dXJuIHRpbWVfcG9pbnQoX19zZWNzKF9fdCkpOwotICB9
Ci19OwotCi10eXBlZGVmIGNocm9ubzo6dGltZV9wb2ludDxfRmlsZXN5c3RlbUNsb2NrPiBmaWxl
X3RpbWVfdHlwZTsKLQotc3RydWN0IF9MSUJDUFBfVFlQRV9WSVMgc3BhY2VfaW5mbyB7Ci0gIHVp
bnRtYXhfdCBjYXBhY2l0eTsKLSAgdWludG1heF90IGZyZWU7Ci0gIHVpbnRtYXhfdCBhdmFpbGFi
bGU7Ci19OwotCi1lbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZmlsZV90eXBlIDogc2lnbmVk
IGNoYXIgewotICBub25lID0gMCwKLSAgbm90X2ZvdW5kID0gLTEsCi0gIHJlZ3VsYXIgPSAxLAot
ICBkaXJlY3RvcnkgPSAyLAotICBzeW1saW5rID0gMywKLSAgYmxvY2sgPSA0LAotICBjaGFyYWN0
ZXIgPSA1LAotICBmaWZvID0gNiwKLSAgc29ja2V0ID0gNywKLSAgdW5rbm93biA9IDgKLX07Ci0K
LWVudW0gY2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBwZXJtcyA6IHVuc2lnbmVkIHsKLSAgbm9uZSA9
IDAsCi0KLSAgb3duZXJfcmVhZCA9IDA0MDAsCi0gIG93bmVyX3dyaXRlID0gMDIwMCwKLSAgb3du
ZXJfZXhlYyA9IDAxMDAsCi0gIG93bmVyX2FsbCA9IDA3MDAsCi0KLSAgZ3JvdXBfcmVhZCA9IDA0
MCwKLSAgZ3JvdXBfd3JpdGUgPSAwMjAsCi0gIGdyb3VwX2V4ZWMgPSAwMTAsCi0gIGdyb3VwX2Fs
bCA9IDA3MCwKLQotICBvdGhlcnNfcmVhZCA9IDA0LAotICBvdGhlcnNfd3JpdGUgPSAwMiwKLSAg
b3RoZXJzX2V4ZWMgPSAwMSwKLSAgb3RoZXJzX2FsbCA9IDA3LAotCi0gIGFsbCA9IDA3NzcsCi0K
LSAgc2V0X3VpZCA9IDA0MDAwLAotICBzZXRfZ2lkID0gMDIwMDAsCi0gIHN0aWNreV9iaXQgPSAw
MTAwMCwKLSAgbWFzayA9IDA3Nzc3LAotICB1bmtub3duID0gMHhGRkZGLAotfTsKLQotX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvciYocGVy
bXMgX0xIUywgcGVybXMgX1JIUykgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihfTEhTKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKLX0KLQotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQotaW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcnwocGVybXMgX0xIUywgcGVybXMgX1JI
UykgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihf
TEhTKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KF9SSFMpKTsKLX0KLQotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIGNvbnN0ZXhw
ciBwZXJtcyBvcGVyYXRvcl4ocGVybXMgX0xIUywgcGVybXMgX1JIUykgewotICByZXR1cm4gc3Rh
dGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSBeCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKLX0KLQotX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcn4o
cGVybXMgX0xIUykgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KH5zdGF0aWNfY2FzdDx1
bnNpZ25lZD4oX0xIUykpOwotfQotCi1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi1pbmxpbmUg
cGVybXMmIG9wZXJhdG9yJj0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMg
PSBfTEhTICYgX1JIUzsgfQotCi1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi1pbmxpbmUgcGVy
bXMmIG9wZXJhdG9yfD0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBf
TEhTIHwgX1JIUzsgfQotCi1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi1pbmxpbmUgcGVybXMm
IG9wZXJhdG9yXj0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhT
IF4gX1JIUzsgfQotCi1lbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgcGVybV9vcHRpb25zIDog
dW5zaWduZWQgY2hhciB7Ci0gIHJlcGxhY2UgPSAxLAotICBhZGQgPSAyLAotICByZW1vdmUgPSA0
LAotICBub2ZvbGxvdyA9IDgKLX07Ci0KLV9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLWlubGlu
ZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yJihwZXJtX29wdGlvbnMgX0xIUywgcGVy
bV9vcHRpb25zIF9SSFMpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKLX0KLQotX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQotaW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0b3J8KHBlcm1f
b3B0aW9ucyBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8
cGVybV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgfAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOwotfQot
Ci1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi1pbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9u
cyBvcGVyYXRvcl4ocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7Ci0gIHJl
dHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhT
KSBeCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihfUkhTKSk7Ci19Ci0KLV9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLWlubGluZSBjb25z
dGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yfihwZXJtX29wdGlvbnMgX0xIUykgewotICByZXR1
cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMp
KTsKLX0KLQotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIHBlcm1fb3B0aW9ucyYg
b3BlcmF0b3ImPShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7Ci0gIHJl
dHVybiBfTEhTID0gX0xIUyAmIF9SSFM7Ci19Ci0KLV9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
LWlubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yfD0ocGVybV9vcHRpb25zJiBfTEhTLCBwZXJt
X29wdGlvbnMgX1JIUykgewotICByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOwotfQotCi1fTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCi1pbmxpbmUgcGVybV9vcHRpb25zJiBvcGVyYXRvcl49KHBl
cm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKLSAgcmV0dXJuIF9MSFMgPSBf
TEhTIF4gX1JIUzsKLX0KLQotZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGNvcHlfb3B0aW9u
cyA6IHVuc2lnbmVkIHNob3J0IHsKLSAgbm9uZSA9IDAsCi0gIHNraXBfZXhpc3RpbmcgPSAxLAot
ICBvdmVyd3JpdGVfZXhpc3RpbmcgPSAyLAotICB1cGRhdGVfZXhpc3RpbmcgPSA0LAotICByZWN1
cnNpdmUgPSA4LAotICBjb3B5X3N5bWxpbmtzID0gMTYsCi0gIHNraXBfc3ltbGlua3MgPSAzMiwK
LSAgZGlyZWN0b3JpZXNfb25seSA9IDY0LAotICBjcmVhdGVfc3ltbGlua3MgPSAxMjgsCi0gIGNy
ZWF0ZV9oYXJkX2xpbmtzID0gMjU2LAotICBfX2luX3JlY3Vyc2l2ZV9jb3B5ID0gNTEyLAotfTsK
LQotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlv
bnMgb3BlcmF0b3ImKGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgewotICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oX0xIUykgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOwotfQotCi1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
Ci1pbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVyYXRvcnwoY29weV9vcHRpb25zIF9M
SFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlv
bnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSB8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhTKSk7Ci19
Ci0KLV9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLWlubGluZSBjb25zdGV4cHIgY29weV9vcHRp
b25zIG9wZXJhdG9yXihjb3B5X29wdGlvbnMgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKLSAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KF9MSFMpIF4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKLX0KLQotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQotaW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3BlcmF0b3J+KGNvcHlfb3B0aW9ucyBf
TEhTKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oX0xIUykpOwotfQotCi1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi1p
bmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvciY9KGNvcHlfb3B0aW9ucyYgX0xIUywgY29weV9v
cHRpb25zIF9SSFMpIHsKLSAgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsKLX0KLQotX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIGNvcHlfb3B0aW9ucyYgb3BlcmF0b3J8PShjb3B5
X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7Ci0gIHJldHVybiBfTEhTID0gX0xI
UyB8IF9SSFM7Ci19Ci0KLV9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLWlubGluZSBjb3B5X29w
dGlvbnMmIG9wZXJhdG9yXj0oY29weV9vcHRpb25zJiBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykg
ewotICByZXR1cm4gX0xIUyA9IF9MSFMgXiBfUkhTOwotfQotCi1lbnVtIGNsYXNzIF9MSUJDUFBf
RU5VTV9WSVMgZGlyZWN0b3J5X29wdGlvbnMgOiB1bnNpZ25lZCBjaGFyIHsKLSAgbm9uZSA9IDAs
Ci0gIGZvbGxvd19kaXJlY3Rvcnlfc3ltbGluayA9IDEsCi0gIHNraXBfcGVybWlzc2lvbl9kZW5p
ZWQgPSAyCi19OwotCi1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi1pbmxpbmUgY29uc3RleHBy
IGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yJihkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlv
bnMgX1JIUykgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29wdGlvbnM+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfUkhTKSk7Ci19Ci0KLV9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLWlubGluZSBjb25zdGV4cHIgZGlyZWN0b3J5X29wdGlv
bnMgb3BlcmF0b3J8KGRpcmVjdG9yeV9vcHRpb25zIF9MSFMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7Ci0gIHJl
dHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oX0xIUykgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKLX0KLQotX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQotaW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvcl4oZGly
ZWN0b3J5X29wdGlvbnMgX0xIUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0
PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSBeCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oX1JIUykpOwotfQotCi1fTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi1pbmxpbmUg
Y29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yfihkaXJlY3Rvcnlfb3B0aW9ucyBf
TEhTKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4ofnN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpKTsKLX0KLQotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQotaW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvciY9KGRpcmVjdG9yeV9vcHRpb25z
JiBfTEhTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9v
cHRpb25zIF9SSFMpIHsKLSAgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsKLX0KLQotX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvcnw9
KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKLSAgcmV0dXJuIF9MSFMgPSBfTEhTIHwg
X1JIUzsKLX0KLQotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotaW5saW5lIGRpcmVjdG9yeV9v
cHRpb25zJiBvcGVyYXRvcl49KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKLSAgcmV0
dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKLX0KLQotY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBmaWxl
X3N0YXR1cyB7Ci1wdWJsaWM6Ci0gIC8vIGNvbnN0cnVjdG9ycwotICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCi0gIGZpbGVfc3RhdHVzKCkgbm9leGNlcHQgOiBmaWxlX3N0YXR1cyhmaWxlX3R5
cGU6Om5vbmUpIHt9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgZXhwbGljaXQgZmls
ZV9zdGF0dXMoZmlsZV90eXBlIF9fZnQsIHBlcm1zIF9fcHJtcyA9IHBlcm1zOjp1bmtub3duKSBu
b2V4Y2VwdAotICAgICAgOiBfX2Z0XyhfX2Z0KSwKLSAgICAgICAgX19wcm1zXyhfX3BybXMpIHt9
Ci0KLSAgZmlsZV9zdGF0dXMoY29uc3QgZmlsZV9zdGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7
Ci0gIGZpbGVfc3RhdHVzKGZpbGVfc3RhdHVzJiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLQotICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIH5maWxlX3N0YXR1cygpIHt9Ci0KLSAgZmlsZV9z
dGF0dXMmIG9wZXJhdG9yPShjb25zdCBmaWxlX3N0YXR1cyYpIG5vZXhjZXB0ID0gZGVmYXVsdDsK
LSAgZmlsZV9zdGF0dXMmIG9wZXJhdG9yPShmaWxlX3N0YXR1cyYmKSBub2V4Y2VwdCA9IGRlZmF1
bHQ7Ci0KLSAgLy8gb2JzZXJ2ZXJzCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgZmls
ZV90eXBlIHR5cGUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX2Z0XzsgfQotCi0gIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgcGVybXMgcGVybWlzc2lvbnMoKSBjb25zdCBub2V4Y2Vw
dCB7IHJldHVybiBfX3BybXNfOyB9Ci0KLSAgLy8gbW9kaWZpZXJzCi0gIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKLSAgdm9pZCB0eXBlKGZpbGVfdHlwZSBfX2Z0KSBub2V4Y2VwdCB7IF9fZnRf
ID0gX19mdDsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgdm9pZCBwZXJtaXNz
aW9ucyhwZXJtcyBfX3ApIG5vZXhjZXB0IHsgX19wcm1zXyA9IF9fcDsgfQotCi1wcml2YXRlOgot
ICBmaWxlX3R5cGUgX19mdF87Ci0gIHBlcm1zIF9fcHJtc187Ci19OwotCi1jbGFzcyBfTElCQ1BQ
X1RZUEVfVklTIGRpcmVjdG9yeV9lbnRyeTsKLQotdGVtcGxhdGUgPGNsYXNzIF9UcD4KLXN0cnVj
dCBfX2Nhbl9jb252ZXJ0X2NoYXIgewotICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNl
OwotfTsKLXRlbXBsYXRlIDxjbGFzcyBfVHA+Ci1zdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPGNv
bnN0IF9UcD4gOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9UcD4ge307Ci10ZW1wbGF0ZSA8
Pgotc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyPiB7Ci0gIHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsKLSAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyOwotfTsKLXRlbXBsYXRl
IDw+Ci1zdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPHdjaGFyX3Q+IHsKLSAgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSB0cnVlOwotICB1c2luZyBfX2NoYXJfdHlwZSA9IHdjaGFyX3Q7Ci19Owot
dGVtcGxhdGUgPD4KLXN0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8Y2hhcjE2X3Q+IHsKLSAgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOwotICB1c2luZyBfX2NoYXJfdHlwZSA9IGNoYXIx
Nl90OwotfTsKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPGNoYXIzMl90
PiB7Ci0gIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKLSAgdXNpbmcgX19jaGFyX3R5
cGUgPSBjaGFyMzJfdDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgotdHlwZW5hbWUg
ZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6dmFsdWUsIGJvb2w+Ojp0eXBl
Ci1fX2lzX3NlcGFyYXRvcihfRUNoYXJUIF9fZSkgewotICByZXR1cm4gX19lID09IF9FQ2hhclQo
Jy8nKTsKLX0KLQotc3RydWN0IF9OdWxsU2VudGluYWwge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBf
VHA+Ci11c2luZyBfVm9pZCA9IHZvaWQ7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzID0g
dm9pZD4KLXN0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZyA6IHB1YmxpYyBmYWxzZV90eXBlIHt9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9j
Pgotc3RydWN0IF9faXNfcGF0aGFibGVfc3RyaW5nPAotICAgIGJhc2ljX3N0cmluZzxfRUNoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+LAotICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hh
cjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+ID4KLSAgICA6IHB1YmxpYyBfX2Nhbl9jb252ZXJ0X2No
YXI8X0VDaGFyVD4gewotICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz47Ci0gIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+
OwotICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9iZWdpbihfU3RyIGNvbnN0JiBfX3Mp
IHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0KLSAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2Vf
ZW5kKF9TdHIgY29uc3QmIF9fcykgewotICAgIHJldHVybiBfX3MuZGF0YSgpICsgX19zLmxlbmd0
aCgpOwotICB9Ci0gIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfU3RyIGNvbnN0JiBf
X3MpIHsKLSAgICByZXR1cm4gX19zLmVtcHR5KCkgPyBfRUNoYXJUe30gOiBfX3NbMF07Ci0gIH0K
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFzcyBfVHJhaXRzPgotc3RydWN0IF9f
aXNfcGF0aGFibGVfc3RyaW5nPAotICAgIGJhc2ljX3N0cmluZ192aWV3PF9FQ2hhclQsIF9UcmFp
dHM+LAotICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6X19j
aGFyX3R5cGU+ID4KLSAgICA6IHB1YmxpYyBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD4gewot
ICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nX3ZpZXc8X0VDaGFyVCwgX1RyYWl0cz47Ci0gIHVz
aW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OwotICBzdGF0aWMgX0VDaGFy
VCBjb25zdCogX19yYW5nZV9iZWdpbihfU3RyIGNvbnN0JiBfX3MpIHsgcmV0dXJuIF9fcy5kYXRh
KCk7IH0KLSAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKF9TdHIgY29uc3QmIF9f
cykgewotICAgIHJldHVybiBfX3MuZGF0YSgpICsgX19zLmxlbmd0aCgpOwotICB9Ci0gIHN0YXRp
YyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfU3RyIGNvbnN0JiBfX3MpIHsKLSAgICByZXR1cm4g
X19zLmVtcHR5KCkgPyBfRUNoYXJUe30gOiBfX3NbMF07Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxj
bGFzcyBfU291cmNlLCBjbGFzcyBfRFMgPSB0eXBlbmFtZSBkZWNheTxfU291cmNlPjo6dHlwZSwK
LSAgICAgICAgICBjbGFzcyBfVW5xdWFsUHRyVHlwZSA9Ci0gICAgICAgICAgICAgIHR5cGVuYW1l
IHJlbW92ZV9jb25zdDx0eXBlbmFtZSByZW1vdmVfcG9pbnRlcjxfRFM+Ojp0eXBlPjo6dHlwZSwK
LSAgICAgICAgICBib29sIF9Jc0NoYXJQdHIgPSBpc19wb2ludGVyPF9EUz46OnZhbHVlJiYKLSAg
ICAgICAgICAgICAgX19jYW5fY29udmVydF9jaGFyPF9VbnF1YWxQdHJUeXBlPjo6dmFsdWU+Ci1z
dHJ1Y3QgX19pc19wYXRoYWJsZV9jaGFyX2FycmF5IDogZmFsc2VfdHlwZSB7fTsKLQotdGVtcGxh
dGUgPGNsYXNzIF9Tb3VyY2UsIGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9VUHRyPgotc3RydWN0IF9f
aXNfcGF0aGFibGVfY2hhcl9hcnJheTxfU291cmNlLCBfRUNoYXJUKiwgX1VQdHIsIHRydWU+Ci0g
ICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgcmVtb3ZlX2NvbnN0PF9FQ2hhclQ+Ojp0
eXBlPiB7Ci0gIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPHR5cGVuYW1lIHJlbW92
ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT47Ci0KLSAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFu
Z2VfYmVnaW4oY29uc3QgX0VDaGFyVCogX19iKSB7IHJldHVybiBfX2I7IH0KLSAgc3RhdGljIF9F
Q2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKGNvbnN0IF9FQ2hhclQqIF9fYikgewotICAgIHVzaW5n
IF9JdGVyID0gY29uc3QgX0VDaGFyVCo7Ci0gICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0g
X0VDaGFyVHt9OwotICAgIF9JdGVyIF9fZSA9IF9fYjsKLSAgICBmb3IgKDsgKl9fZSAhPSBfX3Nl
bnRpbmFsOyArK19fZSkKLSAgICAgIDsKLSAgICByZXR1cm4gX19lOwotICB9Ci0KLSAgc3RhdGlj
IF9FQ2hhclQgX19maXJzdF9vcl9udWxsKGNvbnN0IF9FQ2hhclQqIF9fYikgeyByZXR1cm4gKl9f
YjsgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIF9JdGVyLCBib29sIF9Jc0l0ID0gX19pc19pbnB1
dF9pdGVyYXRvcjxfSXRlcj46OnZhbHVlLAotICAgICAgICAgIGNsYXNzID0gdm9pZD4KLXN0cnVj
dCBfX2lzX3BhdGhhYmxlX2l0ZXIgOiBmYWxzZV90eXBlIHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+Ci1zdHJ1Y3QgX19pc19wYXRoYWJsZV9pdGVyPAotICAgIF9JdGVyLCB0cnVlLAotICAg
IF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hhcjwKLSAgICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZT46Ol9fY2hhcl90eXBlPiA+Ci0gICAgOiBf
X2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVf
dHlwZT4gewotICB1c2luZyBfRUNoYXJUID0gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6dmFsdWVfdHlwZTsKLSAgdXNpbmcgX0Jhc2UgPSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFy
VD47Ci0KLSAgc3RhdGljIF9JdGVyIF9fcmFuZ2VfYmVnaW4oX0l0ZXIgX19iKSB7IHJldHVybiBf
X2I7IH0KLSAgc3RhdGljIF9OdWxsU2VudGluYWwgX19yYW5nZV9lbmQoX0l0ZXIpIHsgcmV0dXJu
IF9OdWxsU2VudGluYWx7fTsgfQotCi0gIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChf
SXRlciBfX2IpIHsgcmV0dXJuICpfX2I7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVHAsIGJv
b2wgX0lzU3RyaW5nVCA9IF9faXNfcGF0aGFibGVfc3RyaW5nPF9UcD46OnZhbHVlLAotICAgICAg
ICAgIGJvb2wgX0lzQ2hhckl0ZXJUID0gX19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9UcD46OnZh
bHVlLAotICAgICAgICAgIGJvb2wgX0lzSXRlclQgPSAhX0lzQ2hhckl0ZXJUICYmIF9faXNfcGF0
aGFibGVfaXRlcjxfVHA+Ojp2YWx1ZT4KLXN0cnVjdCBfX2lzX3BhdGhhYmxlIDogZmFsc2VfdHlw
ZSB7Ci0gIHN0YXRpY19hc3NlcnQoIV9Jc1N0cmluZ1QgJiYgIV9Jc0NoYXJJdGVyVCAmJiAhX0lz
SXRlclQsICJNdXN0IGFsbCBiZSBmYWxzZSIpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIF9UcD4K
LXN0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgdHJ1ZSwgZmFsc2UsIGZhbHNlPiA6IF9faXNfcGF0
aGFibGVfc3RyaW5nPF9UcD4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVHA+Ci1zdHJ1Y3QgX19p
c19wYXRoYWJsZTxfVHAsIGZhbHNlLCB0cnVlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxlX2NoYXJf
YXJyYXk8X1RwPiB7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1RwPgotc3RydWN0IF9faXNfcGF0
aGFibGU8X1RwLCBmYWxzZSwgZmFsc2UsIHRydWU+IDogX19pc19wYXRoYWJsZV9pdGVyPF9UcD4g
e307Ci0KLXRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgotc3RydWN0IF9QYXRoQ1ZUIHsKLSAgc3Rh
dGljX2Fzc2VydChfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46OnZhbHVlLAotICAgICAgICAg
ICAgICAgICJDaGFyIHR5cGUgbm90IGNvbnZlcnRpYmxlIik7Ci0KLSAgdHlwZWRlZiBfX25hcnJv
d190b191dGY4PHNpemVvZihfRUNoYXJUKSAqIF9fQ0hBUl9CSVRfXz4gX05hcnJvd2VyOwotCi0g
IHN0YXRpYyB2b2lkIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfRUNoYXJUIGNvbnN0
KiBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FQ2hhclQgY29uc3QqIF9fZSkg
ewotICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0KSwgX19iLCBfX2UpOwotICB9
Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgotICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5n
ZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBfSXRlciBfX2UpIHsKLSAgICBzdGF0aWNfYXNz
ZXJ0KCFpc19zYW1lPF9JdGVyLCBfRUNoYXJUKj46OnZhbHVlLCAiQ2FsbCBjb25zdCBvdmVybG9h
ZCIpOwotICAgIGlmIChfX2IgPT0gX19lKQotICAgICAgcmV0dXJuOwotICAgIGJhc2ljX3N0cmlu
ZzxfRUNoYXJUPiBfX3RtcChfX2IsIF9fZSk7Ci0gICAgX05hcnJvd2VyKCkoYmFja19pbnNlcnRl
cihfX2Rlc3QpLCBfX3RtcC5kYXRhKCksCi0gICAgICAgICAgICAgICAgX190bXAuZGF0YSgpICsg
X190bXAubGVuZ3RoKCkpOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgotICBzdGF0
aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBfTnVsbFNl
bnRpbmFsKSB7Ci0gICAgc3RhdGljX2Fzc2VydCghaXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+Ojp2
YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsKLSAgICBjb25zdCBfRUNoYXJUIF9fc2VudGlu
YWwgPSBfRUNoYXJUe307Ci0gICAgaWYgKCpfX2IgPT0gX19zZW50aW5hbCkKLSAgICAgIHJldHVy
bjsKLSAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXA7Ci0gICAgZm9yICg7ICpfX2IgIT0g
X19zZW50aW5hbDsgKytfX2IpCi0gICAgICBfX3RtcC5wdXNoX2JhY2soKl9fYik7Ci0gICAgX05h
cnJvd2VyKCkoYmFja19pbnNlcnRlcihfX2Rlc3QpLCBfX3RtcC5kYXRhKCksCi0gICAgICAgICAg
ICAgICAgX190bXAuZGF0YSgpICsgX190bXAubGVuZ3RoKCkpOwotICB9Ci0KLSAgdGVtcGxhdGUg
PGNsYXNzIF9Tb3VyY2U+Ci0gIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3NvdXJjZShzdHJpbmcmIF9f
ZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7Ci0gICAgdXNpbmcgX1RyYWl0cyA9IF9faXNfcGF0
aGFibGU8X1NvdXJjZT47Ci0gICAgX19hcHBlbmRfcmFuZ2UoX19kZXN0LCBfVHJhaXRzOjpfX3Jh
bmdlX2JlZ2luKF9fcyksCi0gICAgICAgICAgICAgICAgICAgX1RyYWl0czo6X19yYW5nZV9lbmQo
X19zKSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgX1BhdGhDVlQ8Y2hhcj4gewot
Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KLSAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjxf
X2lzX2V4YWN0bHlfaW5wdXRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKLSAgX19hcHBl
bmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7Ci0gICAgZm9y
ICg7IF9fYiAhPSBfX2U7ICsrX19iKQotICAgICAgX19kZXN0LnB1c2hfYmFjaygqX19iKTsKLSAg
fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KLSAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9p
ZjxfX2lzX2ZvcndhcmRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKLSAgX19hcHBlbmRf
cmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7Ci0gICAgX19kZXN0
Ll9fYXBwZW5kX2ZvcndhcmRfdW5zYWZlKF9fYiwgX19lKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxj
bGFzcyBfSXRlcj4KLSAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3Qs
IF9JdGVyIF9fYiwgX051bGxTZW50aW5hbCkgewotICAgIGNvbnN0IGNoYXIgX19zZW50aW5hbCA9
IGNoYXJ7fTsKLSAgICBmb3IgKDsgKl9fYiAhPSBfX3NlbnRpbmFsOyArK19fYikKLSAgICAgIF9f
ZGVzdC5wdXNoX2JhY2soKl9fYik7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4K
LSAgc3RhdGljIHZvaWQgX19hcHBlbmRfc291cmNlKHN0cmluZyYgX19kZXN0LCBfU291cmNlIGNv
bnN0JiBfX3MpIHsKLSAgICB1c2luZyBfVHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsK
LSAgICBfX2FwcGVuZF9yYW5nZShfX2Rlc3QsIF9UcmFpdHM6Ol9fcmFuZ2VfYmVnaW4oX19zKSwK
LSAgICAgICAgICAgICAgICAgICBfVHJhaXRzOjpfX3JhbmdlX2VuZChfX3MpKTsKLSAgfQotfTsK
LQotY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBwYXRoIHsKLSAgdGVtcGxhdGUgPGNsYXNzIF9Tb3Vy
Y2VPckl0ZXIsIGNsYXNzIF9UcCA9IHBhdGgmPgotICB1c2luZyBfRW5hYmxlSWZQYXRoYWJsZSA9
Ci0gICAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19wYXRoYWJsZTxfU291cmNlT3JJdGVyPjo6
dmFsdWUsIF9UcD46OnR5cGU7Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KLSAgdXNpbmcgX1Nv
dXJjZUNoYXIgPSB0eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9UcD46Ol9fY2hhcl90eXBlOwotCi0g
IHRlbXBsYXRlIDxjbGFzcyBfVHA+Ci0gIHVzaW5nIF9Tb3VyY2VDVlQgPSBfUGF0aENWVDxfU291
cmNlQ2hhcjxfVHA+ID47Ci0KLXB1YmxpYzoKLSAgdHlwZWRlZiBjaGFyIHZhbHVlX3R5cGU7Ci0g
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPHZhbHVlX3R5cGU+IHN0cmluZ190eXBlOwotICB0eXBlZGVm
IF9WU1REOjpzdHJpbmdfdmlldyBfX3N0cmluZ192aWV3OwotICBzdGF0aWMgY29uc3RleHByIHZh
bHVlX3R5cGUgcHJlZmVycmVkX3NlcGFyYXRvciA9ICcvJzsKLQotICBlbnVtIGNsYXNzIF9MSUJD
UFBfRU5VTV9WSVMgZm9ybWF0IDogdW5zaWduZWQgY2hhciB7Ci0gICAgYXV0b19mb3JtYXQsCi0g
ICAgbmF0aXZlX2Zvcm1hdCwKLSAgICBnZW5lcmljX2Zvcm1hdAotICB9OwotCi0gIC8vIGNvbnN0
cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcgotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgo
KSBub2V4Y2VwdCB7fQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgoY29uc3QgcGF0
aCYgX19wKSA6IF9fcG5fKF9fcC5fX3BuXykge30KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoKHBhdGgmJiBfX3ApIG5vZXhjZXB0Ci0gICAgICA6IF9fcG5fKF9WU1REOjptb3ZlKF9f
cC5fX3BuXykpIHt9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBwYXRoKHN0cmlu
Z190eXBlJiYgX19zLCBmb3JtYXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KSBub2V4Y2VwdAotICAg
ICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3MpKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBfU291
cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2UsIHZvaWQ+ID4KLSAgcGF0aChj
b25zdCBfU291cmNlJiBfX3NyYywgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgewotICAg
IF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX19zcmMpOwotICB9
Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgotICBwYXRoKF9JbnB1dEl0IF9fZmlyc3Qs
IF9JbnB1dEl0IF9fbGFzdCwgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0Pjo6dmFsdWVfdHlwZSBfSXRW
YWw7Ci0gICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3Qs
IF9fbGFzdCk7Ci0gIH0KLQotICAvLyBUT0RPIEltcGxlbWVudCBsb2NhbGUgY29udmVyc2lvbnMu
Ci0gIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBhdGhhYmxlPF9T
b3VyY2UsIHZvaWQ+ID4KLSAgcGF0aChjb25zdCBfU291cmNlJiBfX3NyYywgY29uc3QgbG9jYWxl
JiBfX2xvYywgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCk7Ci0gIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdD4KLSAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfbGFzdCwgY29u
c3QgbG9jYWxlJiBfX2xvYywKLSAgICAgICBmb3JtYXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KTsK
LQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIH5wYXRoKCkgPSBkZWZhdWx0OwotCi0g
IC8vIGFzc2lnbm1lbnRzCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgcGF0aCYgb3Bl
cmF0b3I9KGNvbnN0IHBhdGgmIF9fcCkgewotICAgIF9fcG5fID0gX19wLl9fcG5fOwotICAgIHJl
dHVybiAqdGhpczsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgcGF0aCYg
b3BlcmF0b3I9KHBhdGgmJiBfX3ApIG5vZXhjZXB0IHsKLSAgICBfX3BuXyA9IF9WU1REOjptb3Zl
KF9fcC5fX3BuXyk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNz
ID0gdm9pZD4KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJiBvcGVyYXRvcj0oc3Ry
aW5nX3R5cGUmJiBfX3MpIG5vZXhjZXB0IHsKLSAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcyk7
Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQot
ICBwYXRoJiBhc3NpZ24oc3RyaW5nX3R5cGUmJiBfX3MpIG5vZXhjZXB0IHsKLSAgICBfX3BuXyA9
IF9WU1REOjptb3ZlKF9fcyk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgdGVtcGxhdGUg
PGNsYXNzIF9Tb3VyY2U+Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgX0VuYWJsZUlmUGF0
aGFibGU8X1NvdXJjZT4KLSAgb3BlcmF0b3I9KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7Ci0gICAg
cmV0dXJuIHRoaXMtPmFzc2lnbihfX3NyYyk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX1Nv
dXJjZT4KLSAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gYXNzaWduKGNvbnN0IF9Tb3VyY2Um
IF9fc3JjKSB7Ci0gICAgX19wbl8uY2xlYXIoKTsKLSAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+Ojpf
X2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+Ci0gIHBhdGgmIGFzc2lnbihfSW5wdXRJdCBfX2Zp
cnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOwotICAgIF9fcG5fLmNsZWFyKCk7Ci0g
ICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFz
dCk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLXByaXZhdGU6Ci0gIHRlbXBsYXRlIDxjbGFz
cyBfRUNoYXJUPgotICBzdGF0aWMgYm9vbCBfX3NvdXJjZV9pc19hYnNvbHV0ZShfRUNoYXJUIF9f
Zmlyc3Rfb3JfbnVsbCkgewotICAgIHJldHVybiBfX2lzX3NlcGFyYXRvcihfX2ZpcnN0X29yX251
bGwpOwotICB9Ci0KLXB1YmxpYzoKLSAgLy8gYXBwZW5kcwotICBwYXRoJiBvcGVyYXRvci89KGNv
bnN0IHBhdGgmIF9fcCkgewotICAgIGlmIChfX3AuaXNfYWJzb2x1dGUoKSkgewotICAgICAgX19w
bl8gPSBfX3AuX19wbl87Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGlmIChoYXNf
ZmlsZW5hbWUoKSkKLSAgICAgIF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7Ci0gICAgX19w
bl8gKz0gX19wLm5hdGl2ZSgpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIC8vIEZJWE1F
OiBVc2UgX0xJQkNQUF9ESUFHTk9TRV9XQVJOSU5HIHRvIHByb2R1Y2UgYSBkaWFnbm9zdGljIHdo
ZW4gX19zcmMKLSAgLy8gaXMga25vd24gYXQgY29tcGlsZSB0aW1lIHRvIGJlICIvJyBzaW5jZSB0
aGUgdXNlciBhbG1vc3QgY2VydGFpbmx5IGludGVuZGVkCi0gIC8vIHRvIGFwcGVuZCBhIHNlcGFy
YXRvciBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZSBwYXRoIHdpdGggIi8iCi0gIHRlbXBsYXRl
IDxjbGFzcyBfU291cmNlPgotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBh
dGhhYmxlPF9Tb3VyY2U+Ci0gIG9wZXJhdG9yLz0oY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKLSAg
ICByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3JjKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBf
U291cmNlPgotICBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlPiBhcHBlbmQoY29uc3QgX1NvdXJj
ZSYgX19zcmMpIHsKLSAgICB1c2luZyBfVHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsK
LSAgICB1c2luZyBfQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNoYXI8X1NvdXJjZT4gPjsKLSAgICBp
ZiAoX19zb3VyY2VfaXNfYWJzb2x1dGUoX1RyYWl0czo6X19maXJzdF9vcl9udWxsKF9fc3JjKSkp
Ci0gICAgICBfX3BuXy5jbGVhcigpOwotICAgIGVsc2UgaWYgKGhhc19maWxlbmFtZSgpKQotICAg
ICAgX19wbl8gKz0gcHJlZmVycmVkX3NlcGFyYXRvcjsKLSAgICBfQ1ZUOjpfX2FwcGVuZF9zb3Vy
Y2UoX19wbl8sIF9fc3JjKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXQ+Ci0gIHBhdGgmIGFwcGVuZChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJ
dCBfX2xhc3QpIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dD46OnZhbHVlX3R5cGUgX0l0VmFsOwotICAgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVydF9j
aGFyPF9JdFZhbD46OnZhbHVlLCAiTXVzdCBjb252ZXJ0aWJsZSIpOwotICAgIHVzaW5nIF9DVlQg
PSBfUGF0aENWVDxfSXRWYWw+OwotICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3NvdXJj
ZV9pc19hYnNvbHV0ZSgqX19maXJzdCkpCi0gICAgICBfX3BuXy5jbGVhcigpOwotICAgIGVsc2Ug
aWYgKGhhc19maWxlbmFtZSgpKQotICAgICAgX19wbl8gKz0gcHJlZmVycmVkX3NlcGFyYXRvcjsK
LSAgICBfQ1ZUOjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsKLSAgICBy
ZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAvLyBjb25jYXRlbmF0aW9uCi0gIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKLSAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCBwYXRoJiBfX3gpIHsKLSAgICBf
X3BuXyArPSBfX3guX19wbl87Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQotICBwYXRoJiBvcGVyYXRvcis9KGNvbnN0IHN0cmluZ190eXBlJiBf
X3gpIHsKLSAgICBfX3BuXyArPSBfX3g7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBwYXRoJiBvcGVyYXRvcis9KF9fc3RyaW5nX3ZpZXcg
X194KSB7Ci0gICAgX19wbl8gKz0gX194OwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCB2YWx1ZV90
eXBlKiBfX3gpIHsKLSAgICBfX3BuXyArPSBfX3g7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0K
LSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBwYXRoJiBvcGVyYXRvcis9KHZhbHVlX3R5
cGUgX194KSB7Ci0gICAgX19wbl8gKz0gX194OwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0g
IHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgotICB0eXBlbmFtZSBlbmFibGVfaWY8X19jYW5fY29u
dmVydF9jaGFyPF9FQ2hhclQ+Ojp2YWx1ZSwgcGF0aCY+Ojp0eXBlCi0gIG9wZXJhdG9yKz0oX0VD
aGFyVCBfX3gpIHsKLSAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXA7Ci0gICAgX190bXAg
Kz0gX194OwotICAgIF9QYXRoQ1ZUPF9FQ2hhclQ+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9f
dG1wKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJj
ZT4KLSAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gb3BlcmF0b3IrPShjb25zdCBfU291cmNl
JiBfX3gpIHsKLSAgICByZXR1cm4gdGhpcy0+Y29uY2F0KF9feCk7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgX1NvdXJjZT4KLSAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gY29uY2F0KGNv
bnN0IF9Tb3VyY2UmIF9feCkgewotICAgIF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3Nv
dXJjZShfX3BuXywgX194KTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXQ+Ci0gIHBhdGgmIGNvbmNhdChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJ
dCBfX2xhc3QpIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dD46OnZhbHVlX3R5cGUgX0l0VmFsOwotICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5kX3Jh
bmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0g
IC8vIG1vZGlmaWVycwotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHZvaWQgY2xlYXIo
KSBub2V4Y2VwdCB7IF9fcG5fLmNsZWFyKCk7IH0KLQotICBwYXRoJiBtYWtlX3ByZWZlcnJlZCgp
IHsgcmV0dXJuICp0aGlzOyB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBwYXRo
JiByZW1vdmVfZmlsZW5hbWUoKSB7Ci0gICAgYXV0byBfX2ZuYW1lID0gX19maWxlbmFtZSgpOwot
ICAgIGlmICghX19mbmFtZS5lbXB0eSgpKQotICAgICAgX19wbl8uZXJhc2UoX19mbmFtZS5kYXRh
KCkgLSBfX3BuXy5kYXRhKCkpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIHBhdGgmIHJl
cGxhY2VfZmlsZW5hbWUoY29uc3QgcGF0aCYgX19yZXBsYWNlbWVudCkgewotICAgIHJlbW92ZV9m
aWxlbmFtZSgpOwotICAgIHJldHVybiAoKnRoaXMgLz0gX19yZXBsYWNlbWVudCk7Ci0gIH0KLQot
ICBwYXRoJiByZXBsYWNlX2V4dGVuc2lvbihjb25zdCBwYXRoJiBfX3JlcGxhY2VtZW50ID0gcGF0
aCgpKTsKLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHZvaWQgc3dhcChwYXRoJiBf
X3Jocykgbm9leGNlcHQgeyBfX3BuXy5zd2FwKF9fcmhzLl9fcG5fKTsgfQotCi0gIC8vIHByaXZh
dGUgaGVscGVyIHRvIGFsbG93IHJlc2VydmluZyBtZW1vcnkgaW4gdGhlIHBhdGgKLSAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQotICB2b2lkIF9fcmVzZXJ2ZShzaXplX3QgX19zKSB7IF9fcG5f
LnJlc2VydmUoX19zKTsgfQotCi0gIC8vIG5hdGl2ZSBmb3JtYXQgb2JzZXJ2ZXJzCi0gIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgY29uc3Qgc3RyaW5nX3R5cGUmIG5hdGl2ZSgpIGNvbnN0
IG5vZXhjZXB0IHsgcmV0dXJuIF9fcG5fOyB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQotICBjb25zdCB2YWx1ZV90eXBlKiBjX3N0cigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9f
cG5fLmNfc3RyKCk7IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIG9wZXJhdG9yIHN0
cmluZ190eXBlKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0VDaGFyVCwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9FQ2hhclQ+LAotICAgICAgICAg
ICAgY2xhc3MgX0FsbG9jYXRvciA9IGFsbG9jYXRvcjxfRUNoYXJUPiA+Ci0gIGJhc2ljX3N0cmlu
ZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPgotICBzdHJpbmcoY29uc3QgX0FsbG9jYXRv
ciYgX19hID0gX0FsbG9jYXRvcigpKSBjb25zdCB7Ci0gICAgdXNpbmcgX0NWVCA9IF9fd2lkZW5f
ZnJvbV91dGY4PHNpemVvZihfRUNoYXJUKSAqIF9fQ0hBUl9CSVRfXz47Ci0gICAgdXNpbmcgX1N0
ciA9IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPjsKLSAgICBfU3Ry
IF9fcyhfX2EpOwotICAgIF9fcy5yZXNlcnZlKF9fcG5fLnNpemUoKSk7Ci0gICAgX0NWVCgpKGJh
Y2tfaW5zZXJ0ZXIoX19zKSwgX19wbl8uZGF0YSgpLCBfX3BuXy5kYXRhKCkgKyBfX3BuXy5zaXpl
KCkpOwotICAgIHJldHVybiBfX3M7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHN0ZDo6c3RyaW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9Ci0gIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp3c3RyaW5nIHdzdHJpbmcoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIHN0cmluZzx3Y2hhcl90PigpOwotICB9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
c3RkOjpzdHJpbmcgdThzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQotICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHN0ZDo6dTE2c3RyaW5nIHUxNnN0cmluZygpIGNvbnN0IHsKLSAg
ICByZXR1cm4gc3RyaW5nPGNoYXIxNl90PigpOwotICB9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgc3RkOjp1MzJzdHJpbmcgdTMyc3RyaW5nKCkgY29uc3QgewotICAgIHJldHVybiBzdHJp
bmc8Y2hhcjMyX3Q+KCk7Ci0gIH0KLQotICAvLyBnZW5lcmljIGZvcm1hdCBvYnNlcnZlcnMKLSAg
dGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfRUNo
YXJUPiwKLSAgICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0b3I8X0VDaGFyVD4g
PgotICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj4KLSAgZ2VuZXJp
Y19zdHJpbmcoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIHN0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPihfX2EpOwotICB9
Ci0KLSAgc3RkOjpzdHJpbmcgZ2VuZXJpY19zdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsg
fQotICBzdGQ6OndzdHJpbmcgZ2VuZXJpY193c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
PHdjaGFyX3Q+KCk7IH0KLSAgc3RkOjpzdHJpbmcgZ2VuZXJpY191OHN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIF9fcG5fOyB9Ci0gIHN0ZDo6dTE2c3RyaW5nIGdlbmVyaWNfdTE2c3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gc3RyaW5nPGNoYXIxNl90PigpOyB9Ci0gIHN0ZDo6dTMyc3RyaW5nIGdlbmVy
aWNfdTMyc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOyB9Ci0KLXBy
aXZhdGU6Ci0gIGludCBfX2NvbXBhcmUoX19zdHJpbmdfdmlldykgY29uc3Q7Ci0gIF9fc3RyaW5n
X3ZpZXcgX19yb290X25hbWUoKSBjb25zdDsKLSAgX19zdHJpbmdfdmlldyBfX3Jvb3RfZGlyZWN0
b3J5KCkgY29uc3Q7Ci0gIF9fc3RyaW5nX3ZpZXcgX19yb290X3BhdGhfcmF3KCkgY29uc3Q7Ci0g
IF9fc3RyaW5nX3ZpZXcgX19yZWxhdGl2ZV9wYXRoKCkgY29uc3Q7Ci0gIF9fc3RyaW5nX3ZpZXcg
X19wYXJlbnRfcGF0aCgpIGNvbnN0OwotICBfX3N0cmluZ192aWV3IF9fZmlsZW5hbWUoKSBjb25z
dDsKLSAgX19zdHJpbmdfdmlldyBfX3N0ZW0oKSBjb25zdDsKLSAgX19zdHJpbmdfdmlldyBfX2V4
dGVuc2lvbigpIGNvbnN0OwotCi1wdWJsaWM6Ci0gIC8vIGNvbXBhcmUKLSAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCBwYXRoJiBfX3ApIGNvbnN0IG5vZXhjZXB0
IHsKLSAgICByZXR1cm4gX19jb21wYXJlKF9fcC5fX3BuXyk7Ci0gIH0KLSAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdCB7
Ci0gICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOwotICB9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgaW50IGNvbXBhcmUoX19zdHJpbmdfdmlldyBfX3MpIGNvbnN0IHsKLSAgICByZXR1cm4g
X19jb21wYXJlKF9fcyk7Ci0gIH0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29t
cGFyZShjb25zdCB2YWx1ZV90eXBlKiBfX3MpIGNvbnN0IHsKLSAgICByZXR1cm4gX19jb21wYXJl
KF9fcyk7Ci0gIH0KLQotICAvLyBkZWNvbXBvc2l0aW9uCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcGF0aCByb290X25hbWUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0cmluZ190eXBlKF9f
cm9vdF9uYW1lKCkpOwotICB9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290
X2RpcmVjdG9yeSgpIGNvbnN0IHsKLSAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19yb290X2RpcmVj
dG9yeSgpKTsKLSAgfQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9wYXRo
KCkgY29uc3QgewotICAgIHJldHVybiByb290X25hbWUoKS5hcHBlbmQoc3RyaW5nX3R5cGUoX19y
b290X2RpcmVjdG9yeSgpKSk7Ci0gIH0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IHJlbGF0aXZlX3BhdGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcmVsYXRp
dmVfcGF0aCgpKTsKLSAgfQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcGFyZW50
X3BhdGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcGFyZW50X3BhdGgoKSk7
Ci0gIH0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGZpbGVuYW1lKCkgY29uc3Qg
ewotICAgIHJldHVybiBzdHJpbmdfdHlwZShfX2ZpbGVuYW1lKCkpOwotICB9Ci0gIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBzdGVtKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nX3R5cGUo
X19zdGVtKCkpOyB9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBleHRlbnNpb24o
KSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0cmluZ190eXBlKF9fZXh0ZW5zaW9uKCkpOwotICB9Ci0K
LSAgLy8gcXVlcnkKLSAgX0xJQkNQUF9OT0RJU0NBUkRfQUZURVJfQ1hYMTcgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sCi0gIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVy
biBfX3BuXy5lbXB0eSgpOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGhhc19yb290X25hbWUoKSBjb25zdCB7Ci0gICAgcmV0dXJuICFfX3Jvb3RfbmFtZSgpLmVtcHR5
KCk7Ci0gIH0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19yb290X2RpcmVj
dG9yeSgpIGNvbnN0IHsKLSAgICByZXR1cm4gIV9fcm9vdF9kaXJlY3RvcnkoKS5lbXB0eSgpOwot
ICB9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9wYXRoKCkgY29u
c3QgewotICAgIHJldHVybiAhX19yb290X3BhdGhfcmF3KCkuZW1wdHkoKTsKLSAgfQotICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3JlbGF0aXZlX3BhdGgoKSBjb25zdCB7Ci0g
ICAgcmV0dXJuICFfX3JlbGF0aXZlX3BhdGgoKS5lbXB0eSgpOwotICB9Ci0gIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcGFyZW50X3BhdGgoKSBjb25zdCB7Ci0gICAgcmV0dXJu
ICFfX3BhcmVudF9wYXRoKCkuZW1wdHkoKTsKLSAgfQotICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaGFzX2ZpbGVuYW1lKCkgY29uc3QgewotICAgIHJldHVybiAhX19maWxlbmFtZSgp
LmVtcHR5KCk7Ci0gIH0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19zdGVt
KCkgY29uc3QgeyByZXR1cm4gIV9fc3RlbSgpLmVtcHR5KCk7IH0KLSAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGhhc19leHRlbnNpb24oKSBjb25zdCB7Ci0gICAgcmV0dXJuICFfX2V4
dGVuc2lvbigpLmVtcHR5KCk7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgaXNfYWJzb2x1dGUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGhhc19yb290X2RpcmVjdG9yeSgp
OwotICB9Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19yZWxhdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuICFpc19hYnNvbHV0ZSgpOyB9Ci0KLSAgLy8gcmVsYXRpdmUgcGF0aHMKLSAg
cGF0aCBsZXhpY2FsbHlfbm9ybWFsKCkgY29uc3Q7Ci0gIHBhdGggbGV4aWNhbGx5X3JlbGF0aXZl
KGNvbnN0IHBhdGgmIF9fYmFzZSkgY29uc3Q7Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoIGxleGljYWxseV9wcm94aW1hdGUoY29uc3QgcGF0aCYgX19iYXNlKSBjb25zdCB7Ci0g
ICAgcGF0aCBfX3Jlc3VsdCA9IHRoaXMtPmxleGljYWxseV9yZWxhdGl2ZShfX2Jhc2UpOwotICAg
IGlmIChfX3Jlc3VsdC5uYXRpdmUoKS5lbXB0eSgpKQotICAgICAgcmV0dXJuICp0aGlzOwotICAg
IHJldHVybiBfX3Jlc3VsdDsKLSAgfQotCi0gIC8vIGl0ZXJhdG9ycwotICBjbGFzcyBfTElCQ1BQ
X1RZUEVfVklTIGl0ZXJhdG9yOwotICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwot
Ci0gIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gIGl0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0g
IHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+Ci0gIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgZnJpZW5kCi0gICAgICB0eXBlbmFtZSBlbmFibGVfaWY8aXNfc2FtZTxfQ2hh
clQsIGNoYXI+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19zYW1l
PF9UcmFpdHMsIGNoYXJfdHJhaXRzPGNoYXI+ID46OnZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiY+Ojp0eXBlCi0gICAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgcGF0aCYg
X19wKSB7Ci0gICAgX19vcyA8PCBzdGQ6Ol9fcXVvdGVkKF9fcC5uYXRpdmUoKSk7Ci0gICAgcmV0
dXJuIF9fb3M7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz
PgotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZAotICAgICAgdHlwZW5hbWUgZW5h
YmxlX2lmPCFpc19zYW1lPF9DaGFyVCwgY2hhcj46OnZhbHVlIHx8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICFpc19zYW1lPF9UcmFpdHMsIGNoYXJfdHJhaXRzPGNoYXI+ID46OnZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiY+Ojp0eXBlCi0gICAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vcywgY29uc3QgcGF0aCYgX19wKSB7Ci0gICAgX19vcyA8PCBzdGQ6Ol9fcXVvdGVkKF9f
cC5zdHJpbmc8X0NoYXJULCBfVHJhaXRzPigpKTsKLSAgICByZXR1cm4gX19vczsKLSAgfQotCi0g
IHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+Ci0gIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKLSAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIHBhdGgmIF9fcCkg
ewotICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHM+IF9fdG1wOwotICAgIF9faXMgPj4g
X19xdW90ZWQoX190bXApOwotICAgIF9fcCA9IF9fdG1wOwotICAgIHJldHVybiBfX2lzOwotICB9
Ci0KLXByaXZhdGU6Ci0gIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgmCi0g
IF9fYXNzaWduX3ZpZXcoX19zdHJpbmdfdmlldyBjb25zdCYgX19zKSBub2V4Y2VwdCB7Ci0gICAg
X19wbl8gPSBzdHJpbmdfdHlwZShfX3MpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotICBzdHJp
bmdfdHlwZSBfX3BuXzsKLX07Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQgc3dhcChwYXRoJiBfX2xocywgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKLSAgX19saHMuc3dh
cChfX3Jocyk7Ci19Ci0KLV9MSUJDUFBfRlVOQ19WSVMKLXNpemVfdCBoYXNoX3ZhbHVlKGNvbnN0
IHBhdGgmIF9fcCkgbm9leGNlcHQ7Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBfX2xocywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQg
ewotICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsKLX0KLQotaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgmIF9fbGhzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBh
dGgmIF9fcmhzKSBub2V4Y2VwdCB7Ci0gIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAw
OwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPChj
b25zdCBwYXRoJiBfX2xocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7Ci0gIHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSA8IDA7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBfX2xocywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQg
ewotICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsKLX0KLQotaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGF0aCYgX19saHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRo
JiBfX3Jocykgbm9leGNlcHQgewotICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOwot
fQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPj0oY29u
c3QgcGF0aCYgX19saHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9fbGhzLmNv
bXBhcmUoX19yaHMpID49IDA7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggb3BlcmF0b3IvKGNvbnN0IHBhdGgmIF9fbGhzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIHsKLSAgcGF0aCBf
X3Jlc3VsdChfX2xocyk7Ci0gIF9fcmVzdWx0IC89IF9fcmhzOwotICByZXR1cm4gX19yZXN1bHQ7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgotX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQotICAgIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+Ojp2YWx1ZSwg
cGF0aD46OnR5cGUKLSAgICB1OHBhdGgoY29uc3QgX1NvdXJjZSYgX19zKSB7Ci0gIHN0YXRpY19h
c3NlcnQoCi0gICAgICBpc19zYW1lPHR5cGVuYW1lIF9faXNfcGF0aGFibGU8X1NvdXJjZT46Ol9f
Y2hhcl90eXBlLCBjaGFyPjo6dmFsdWUsCi0gICAgICAidThwYXRoKFNvdXJjZSBjb25zdCYpIHJl
cXVpcmVzIFNvdXJjZSBoYXZlIGEgY2hhcmFjdGVyIHR5cGUgb2YgdHlwZSAiCi0gICAgICAiJ2No
YXInIik7Ci0gIHJldHVybiBwYXRoKF9fcyk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dD4KLV9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19p
c19wYXRoYWJsZTxfSW5wdXRJdD46OnZhbHVlLCBwYXRoPjo6dHlwZQotICAgIHU4cGF0aChfSW5w
dXRJdCBfX2YsIF9JbnB1dEl0IF9fbCkgewotICBzdGF0aWNfYXNzZXJ0KAotICAgICAgaXNfc2Ft
ZTx0eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9JbnB1dEl0Pjo6X19jaGFyX3R5cGUsIGNoYXI+Ojp2
YWx1ZSwKLSAgICAgICJ1OHBhdGgoSXRlciwgSXRlcikgcmVxdWlyZXMgSXRlciBoYXZlIGEgdmFs
dWVfdHlwZSBvZiB0eXBlICdjaGFyJyIpOwotICByZXR1cm4gcGF0aChfX2YsIF9fbCk7Ci19Ci0K
LWNsYXNzIF9MSUJDUFBfVFlQRV9WSVMgcGF0aDo6aXRlcmF0b3IgewotcHVibGljOgotICBlbnVt
IF9QYXJzZXJTdGF0ZSA6IHVuc2lnbmVkIGNoYXIgewotICAgIF9TaW5ndWxhciwKLSAgICBfQmVm
b3JlQmVnaW4sCi0gICAgX0luUm9vdE5hbWUsCi0gICAgX0luUm9vdERpciwKLSAgICBfSW5GaWxl
bmFtZXMsCi0gICAgX0luVHJhaWxpbmdTZXAsCi0gICAgX0F0RW5kCi0gIH07Ci0KLXB1YmxpYzoK
LSAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
LQotICB0eXBlZGVmIHBhdGggdmFsdWVfdHlwZTsKLSAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCBk
aWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgY29uc3QgcGF0aCogcG9pbnRlcjsKLSAgdHlwZWRl
ZiBjb25zdCBwYXRoJiByZWZlcmVuY2U7Ci0KLSAgdHlwZWRlZiB2b2lkCi0gICAgICBfX3N0YXNo
aW5nX2l0ZXJhdG9yX3RhZzsgLy8gU2VlIHJldmVyc2VfaXRlcmF0b3IgYW5kIF9faXNfc3Rhc2hp
bmdfaXRlcmF0b3IKLQotcHVibGljOgotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGl0
ZXJhdG9yKCkKLSAgICAgIDogX19zdGFzaGVkX2VsZW1fKCksIF9fcGF0aF9wdHJfKG51bGxwdHIp
LCBfX2VudHJ5XygpLAotICAgICAgICBfX3N0YXRlXyhfU2luZ3VsYXIpIHt9Ci0KLSAgaXRlcmF0
b3IoY29uc3QgaXRlcmF0b3ImKSA9IGRlZmF1bHQ7Ci0gIH5pdGVyYXRvcigpID0gZGVmYXVsdDsK
LQotICBpdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGl0ZXJhdG9yJikgPSBkZWZhdWx0OwotCi0g
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIF9fc3Rhc2hlZF9lbGVtXzsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKLSAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJl9fc3Rhc2hlZF9lbGVt
XzsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKSB7Ci0gICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0gX1Npbmd1bGFyLAotICAgICAg
ICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGluY3JlbWVudCBhIHNpbmd1bGFyIGl0ZXJhdG9y
Iik7Ci0gICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0gX0F0RW5kLAotICAgICAgICAgICAg
ICAgICAgICJhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgZW5kIGl0ZXJhdG9yIik7Ci0gICAg
cmV0dXJuIF9faW5jcmVtZW50KCk7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
Ci0gIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7Ci0gICAgaXRlcmF0b3IgX19pdCgqdGhpcyk7
Ci0gICAgdGhpcy0+b3BlcmF0b3IrKygpOwotICAgIHJldHVybiBfX2l0OwotICB9Ci0KLSAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKLSAgICBf
TElCQ1BQX0FTU0VSVChfX3N0YXRlXyAhPSBfU2luZ3VsYXIsCi0gICAgICAgICAgICAgICAgICAg
ImF0dGVtcHRpbmcgdG8gZGVjcmVtZW50IGEgc2luZ3VsYXIgaXRlcmF0b3IiKTsKLSAgICBfTElC
Q1BQX0FTU0VSVChfX2VudHJ5Xy5kYXRhKCkgIT0gX19wYXRoX3B0cl8tPm5hdGl2ZSgpLmRhdGEo
KSwKLSAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBkZWNyZW1lbnQgdGhlIGJlZ2lu
IGl0ZXJhdG9yIik7Ci0gICAgcmV0dXJuIF9fZGVjcmVtZW50KCk7Ci0gIH0KLQotICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCi0gIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7Ci0gICAgaXRl
cmF0b3IgX19pdCgqdGhpcyk7Ci0gICAgdGhpcy0+b3BlcmF0b3ItLSgpOwotICAgIHJldHVybiBf
X2l0OwotICB9Ci0KLXByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBwYXRoOwotCi0gIGlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yJik7Ci0KLSAgaXRlcmF0b3ImIF9faW5jcmVtZW50KCk7
Ci0gIGl0ZXJhdG9yJiBfX2RlY3JlbWVudCgpOwotCi0gIHBhdGggX19zdGFzaGVkX2VsZW1fOwot
ICBjb25zdCBwYXRoKiBfX3BhdGhfcHRyXzsKLSAgcGF0aDo6X19zdHJpbmdfdmlldyBfX2VudHJ5
XzsKLSAgX1BhcnNlclN0YXRlIF9fc3RhdGVfOwotfTsKLQotaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhdGg6Oml0ZXJhdG9yJiBfX2xocywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
YXRoOjppdGVyYXRvciYgX19yaHMpIHsKLSAgcmV0dXJuIF9fbGhzLl9fcGF0aF9wdHJfID09IF9f
cmhzLl9fcGF0aF9wdHJfICYmCi0gICAgICAgICBfX2xocy5fX2VudHJ5Xy5kYXRhKCkgPT0gX19y
aHMuX19lbnRyeV8uZGF0YSgpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fbGhzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6Oml0ZXJh
dG9yJiBfX3JocykgewotICByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7Ci19Ci0KLWNsYXNzIF9M
SUJDUFBfRVhDRVBUSU9OX0FCSSBmaWxlc3lzdGVtX2Vycm9yIDogcHVibGljIHN5c3RlbV9lcnJv
ciB7Ci1wdWJsaWM6Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgZmlsZXN5c3RlbV9l
cnJvcihjb25zdCBzdHJpbmcmIF9fd2hhdCwgZXJyb3JfY29kZSBfX2VjKQotICAgICAgOiBzeXN0
ZW1fZXJyb3IoX19lYywgX193aGF0KSwKLSAgICAgICAgX19zdG9yYWdlXyhtYWtlX3NoYXJlZDxf
U3RvcmFnZT4ocGF0aCgpLCBwYXRoKCkpKSB7Ci0gICAgX19jcmVhdGVfd2hhdCgwKTsKLSAgfQot
Ci0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgZmlsZXN5c3RlbV9lcnJvcihjb25zdCBz
dHJpbmcmIF9fd2hhdCwgY29uc3QgcGF0aCYgX19wMSwgZXJyb3JfY29kZSBfX2VjKQotICAgICAg
OiBzeXN0ZW1fZXJyb3IoX19lYywgX193aGF0KSwKLSAgICAgICAgX19zdG9yYWdlXyhtYWtlX3No
YXJlZDxfU3RvcmFnZT4oX19wMSwgcGF0aCgpKSkgewotICAgIF9fY3JlYXRlX3doYXQoMSk7Ci0g
IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGZpbGVzeXN0ZW1fZXJyb3IoY29u
c3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBhdGgmIF9fcDEsIGNvbnN0IHBhdGgmIF9fcDIsCi0g
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSBfX2VjKQotICAgICAgOiBzeXN0ZW1fZXJyb3Io
X19lYywgX193aGF0KSwKLSAgICAgICAgX19zdG9yYWdlXyhtYWtlX3NoYXJlZDxfU3RvcmFnZT4o
X19wMSwgX19wMikpIHsKLSAgICBfX2NyZWF0ZV93aGF0KDIpOwotICB9Ci0KLSAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQotICBjb25zdCBwYXRoJiBwYXRoMSgpIGNvbnN0IG5vZXhjZXB0IHsg
cmV0dXJuIF9fc3RvcmFnZV8tPl9fcDFfOyB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQotICBjb25zdCBwYXRoJiBwYXRoMigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RvcmFn
ZV8tPl9fcDJfOyB9Ci0KLSAgfmZpbGVzeXN0ZW1fZXJyb3IoKSBvdmVycmlkZTsgLy8ga2V5IGZ1
bmN0aW9uCi0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBjb25zdCBjaGFyKiB3aGF0
KCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJpZGUgewotICAgIHJldHVybiBfX3N0b3JhZ2VfLT5fX3do
YXRfLmNfc3RyKCk7Ci0gIH0KLQotICBfTElCQ1BQX0ZVTkNfVklTCi0gIHZvaWQgX19jcmVhdGVf
d2hhdChpbnQgX19udW1fcGF0aHMpOwotCi1wcml2YXRlOgotICBzdHJ1Y3QgX1N0b3JhZ2Ugewot
ICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgICBfU3RvcmFnZShjb25zdCBwYXRoJiBf
X3AxLCBjb25zdCBwYXRoJiBfX3AyKSA6IF9fcDFfKF9fcDEpLCBfX3AyXyhfX3AyKSB7fQotCi0g
ICAgcGF0aCBfX3AxXzsKLSAgICBwYXRoIF9fcDJfOwotICAgIHN0cmluZyBfX3doYXRfOwotICB9
OwotICBzaGFyZWRfcHRyPF9TdG9yYWdlPiBfX3N0b3JhZ2VfOwotfTsKLQotdGVtcGxhdGUgPGNs
YXNzLi4uIF9BcmdzPgotX0xJQkNQUF9OT1JFVFVSTiBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQotI2lmbmRlZiBfTElCQ1BQX05PX0VYQ0VQVElPTlMKLSAgICB2b2lkCi0gICAgX190
aHJvd19maWxlc3lzdGVtX2Vycm9yKF9BcmdzJiYuLi4gX19hcmdzKSB7Ci0gIHRocm93IGZpbGVz
eXN0ZW1fZXJyb3Ioc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLX0KLSNlbHNlCi0g
ICAgdm9pZAotICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfQXJncyYmLi4uKSB7Ci0gIF9W
U1REOjphYm9ydCgpOwotfQotI2VuZGlmCi0KLS8vIG9wZXJhdGlvbmFsIGZ1bmN0aW9ucwotCi1f
TElCQ1BQX0ZVTkNfVklTCi1wYXRoIF9fYWJzb2x1dGUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMKLXBhdGggX19jYW5vbmljYWwoY29u
c3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMK
LXZvaWQgX19jb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgY29weV9v
cHRpb25zIF9fb3B0LAotICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwot
X0xJQkNQUF9GVU5DX1ZJUwotYm9vbCBfX2NvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sIGNv
bnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCwKLSAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSogX19lYyA9IG51bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJUwotdm9pZCBfX2NvcHlf
c3ltbGluayhjb25zdCBwYXRoJiBfX2V4aXN0aW5nX3N5bWxpbmssIGNvbnN0IHBhdGgmIF9fbmV3
X3N5bWxpbmssCi0gICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRy
KTsKLV9MSUJDUFBfRlVOQ19WSVMKLWJvb2wgX19jcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0
aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMKLWJvb2wg
X19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0
cik7Ci1fTElCQ1BQX0ZVTkNfVklTCi1ib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRo
JiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSogZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMKLXZvaWQgX19jcmVhdGVf
ZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfc3lt
bGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9
IG51bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJUwotdm9pZCBfX2NyZWF0ZV9oYXJkX2xpbmsoY29u
c3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfaGFyZF9saW5rLAotICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJ
Uwotdm9pZCBfX2NyZWF0ZV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9f
bmV3X3N5bWxpbmssCi0gICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51
bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJUwotcGF0aCBfX2N1cnJlbnRfcGF0aChlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7Ci1fTElCQ1BQX0ZVTkNfVklTCi12b2lkIF9fY3VycmVudF9wYXRo
KGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7Ci1fTElCQ1BQX0ZVTkNf
VklTCi1ib29sIF9fZXF1aXZhbGVudChjb25zdCBwYXRoJiwgY29uc3QgcGF0aCYsIGVycm9yX2Nv
ZGUqIF9fZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMKLXVpbnRtYXhfdCBfX2ZpbGVf
c2l6ZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwotX0xJQkNQUF9G
VU5DX1ZJUwotdWludG1heF90IF9faGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmLCBlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cik7Ci1fTElCQ1BQX0ZVTkNfVklTCi1ib29sIF9fZnNfaXNfZW1w
dHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVO
Q19WSVMKLWZpbGVfdGltZV90eXBlIF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjID0gbnVsbHB0cik7Ci1fTElCQ1BQX0ZVTkNfVklTCi12b2lkIF9fbGFzdF93
cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5ld190aW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOwotX0xJQkNQUF9GVU5D
X1ZJUwotdm9pZCBfX3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmLCBwZXJtcywgcGVybV9vcHRpb25z
LCBlcnJvcl9jb2RlKiA9IG51bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJUwotcGF0aCBfX3JlYWRf
c3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOwotX0xJQkNQ
UF9GVU5DX1ZJUwotYm9vbCBfX3JlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9
IG51bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJUwotdWludG1heF90IF9fcmVtb3ZlX2FsbChjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJUwot
dm9pZCBfX3JlbmFtZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29k
ZSogZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMKLXZvaWQgX19yZXNpemVfZmlsZShj
b25zdCBwYXRoJiBwLCB1aW50bWF4X3Qgc2l6ZSwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsK
LV9MSUJDUFBfRlVOQ19WSVMKLXNwYWNlX2luZm8gX19zcGFjZShjb25zdCBwYXRoJiwgZXJyb3Jf
Y29kZSogX19lYyA9IG51bGxwdHIpOwotX0xJQkNQUF9GVU5DX1ZJUwotZmlsZV9zdGF0dXMgX19z
dGF0dXMoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKLV9MSUJDUFBf
RlVOQ19WSVMKLWZpbGVfc3RhdHVzIF9fc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYsIGVycm9y
X2NvZGUqIF9fZWMgPSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMKLXBhdGggX19zeXN0ZW1f
Y29tcGxldGUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKLV9MSUJD
UFBfRlVOQ19WSVMKLXBhdGggX190ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUqIF9fZWMg
PSBudWxscHRyKTsKLV9MSUJDUFBfRlVOQ19WSVMKLXBhdGggX193ZWFrbHlfY2Fub25pY2FsKHBh
dGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwotCi1pbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1cnJlbnRfcGF0aCgpIHsKLSAgcmV0dXJuIF9f
Y3VycmVudF9wYXRoKCk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBh
dGggY3VycmVudF9wYXRoKGVycm9yX2NvZGUmIF9fZWMpIHsKLSAgcmV0dXJuIF9fY3VycmVudF9w
YXRoKCZfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBj
dXJyZW50X3BhdGgoY29uc3QgcGF0aCYgX19wKSB7Ci0gIF9fY3VycmVudF9wYXRoKF9fcCk7Ci19
Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3VycmVudF9wYXRoKGNv
bnN0IHBhdGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgX19jdXJyZW50X3BhdGgo
X19wLCAmX19lYyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
YWJzb2x1dGUoY29uc3QgcGF0aCYgX19wKSB7Ci0gIHJldHVybiBfX2Fic29sdXRlKF9fcCk7Ci19
Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggYWJzb2x1dGUoY29uc3Qg
cGF0aCYgX19wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKSB7Ci0gIHJldHVybiBfX2Fic29sdXRlKF9fcCwgJl9fZWMpOwot
fQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGNhbm9uaWNhbChjb25z
dCBwYXRoJiBfX3ApIHsKLSAgcmV0dXJuIF9fY2Fub25pY2FsKF9fcCk7Ci19Ci0KLWlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIF9fcCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKLSAgcmV0dXJuIF9fY2Fub25pY2FsKF9fcCwgJl9fZWMpOwotfQotCi1pbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9t
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgm
IF9fdG8pIHsKLSAgX19jb3B5KF9fZnJvbSwgX190bywgY29weV9vcHRpb25zOjpub25lKTsKLX0K
LQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBhdGgm
IF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7Ci0gIF9fY29weShfX2Zyb20sIF9fdG8s
IGNvcHlfb3B0aW9uczo6bm9uZSwgJl9fZWMpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3Rv
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9u
cyBfX29wdCkgewotICBfX2NvcHkoX19mcm9tLCBfX3RvLCBfX29wdCk7Ci19Ci0KLWlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNv
bnN0IHBhdGgmIF9fdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29weV9vcHRpb25zIF9fb3B0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKLSAgX19jb3B5KF9fZnJvbSwgX190bywgX19v
cHQsICZfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBj
b3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bykgewotICByZXR1cm4gX19jb3B5
X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUpOwotfQotCi1pbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCi1jb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9t
LCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBfX2VjKSB7Ci0gIHJldHVybiBfX2NvcHlf
ZmlsZShfX2Zyb20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9uZSwgJl9fZWMpOwotfQotCi1pbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCi1jb3B5X2ZpbGUoY29uc3QgcGF0aCYg
X19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlvbnMgX19vcHQpIHsKLSAgcmV0dXJu
IF9fY29weV9maWxlKF9fZnJvbSwgX190bywgX19vcHQpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBf
X3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29w
eV9vcHRpb25zIF9fb3B0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgewotICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9t
LCBfX3RvLCBfX29wdCwgJl9fZWMpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWSB2b2lkIGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBfX2V4aXN0aW5nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19u
ZXcpIHsKLSAgX19jb3B5X3N5bWxpbmsoX19leGlzdGluZywgX19uZXcpOwotfQotCi1pbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCi1jb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYg
X19leHQsIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Ci0g
IF9fY29weV9zeW1saW5rKF9fZXh0LCBfX25ldywgJl9fZWMpOwotfQotCi1pbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBf
X3ApIHsKLSAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yaWVzKF9fcCk7Ci19Ci0KLWlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBh
dGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKLSAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9y
aWVzKF9fcCwgJl9fZWMpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wKSB7Ci0gIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcnkoX19wKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbAotY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMp
IG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShfX3AsICZfX2VjKTsKLX0K
LQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3J5
KGNvbnN0IHBhdGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2F0dHJzKSB7Ci0gIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcnkoX19wLCBfX2F0dHJzKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbAotY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBh
dGgmIF9fYXR0cnMsCi0gICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKLSAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShfX3AsIF9fYXR0cnMsICZfX2VjKTsKLX0K
LQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAotY3JlYXRlX2RpcmVjdG9y
eV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3KSB7Ci0gIF9fY3Jl
YXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8sIF9fbmV3KTsKLX0KLQotaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAotY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBh
dGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LAotICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmso
X190bywgX19uZXcsICZfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19u
ZXcpIHsKLSAgX19jcmVhdGVfaGFyZF9saW5rKF9fdG8sIF9fbmV3KTsKLX0KLQotaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAotY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRo
JiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywKLSAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgewotICBfX2NyZWF0ZV9oYXJkX2xpbmsoX190bywgX19uZXcsICZfX2Vj
KTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjcmVhdGVfc3lt
bGluayhjb25zdCBwYXRoJiBfX3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX25ldykgewotICBfX2NyZWF0ZV9zeW1s
aW5rKF9fdG8sIF9fbmV3KTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZAotY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXcs
IGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9fY3JlYXRlX3N5bWxpbmso
X190bywgX19uZXcsICZfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgYm9vbCBzdGF0dXNfa25vd24oZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7Ci0gIHJldHVy
biBfX3MudHlwZSgpICE9IGZpbGVfdHlwZTo6bm9uZTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7Ci0g
IHJldHVybiBzdGF0dXNfa25vd24oX19zKSAmJiBfX3MudHlwZSgpICE9IGZpbGVfdHlwZTo6bm90
X2ZvdW5kOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGV4aXN0
cyhjb25zdCBwYXRoJiBfX3ApIHsKLSAgcmV0dXJuIGV4aXN0cyhfX3N0YXR1cyhfX3ApKTsKLX0K
LQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29uc3QgcGF0
aCYgX19wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgX19lYykgbm9leGNlcHQgewotICBhdXRvIF9fcyA9IF9fc3RhdHVzKF9fcCwgJl9f
ZWMpOwotICBpZiAoc3RhdHVzX2tub3duKF9fcykpCi0gICAgX19lYy5jbGVhcigpOwotICByZXR1
cm4gZXhpc3RzKF9fcyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgZXF1aXZhbGVudChjb25zdCBwYXRoJiBfX3AxLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcDIpIHsKLSAgcmV0dXJuIF9f
ZXF1aXZhbGVudChfX3AxLCBfX3AyKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbAotZXF1aXZhbGVudChjb25zdCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3Ay
LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Ci0gIHJldHVybiBfX2VxdWl2YWxlbnQoX19w
MSwgX19wMiwgJl9fZWMpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1
aW50bWF4X3QgZmlsZV9zaXplKGNvbnN0IHBhdGgmIF9fcCkgewotICByZXR1cm4gX19maWxlX3Np
emUoX19wKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90
Ci1maWxlX3NpemUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
Ci0gIHJldHVybiBfX2ZpbGVfc2l6ZShfX3AsICZfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IGhhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBf
X3ApIHsKLSAgcmV0dXJuIF9faGFyZF9saW5rX2NvdW50KF9fcCk7Ci19Ci0KLWlubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAotaGFyZF9saW5rX2NvdW50KGNvbnN0IHBh
dGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgewotICByZXR1cm4gX19oYXJkX2xp
bmtfY291bnQoX19wLCAmX19lYyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaXNfYmxvY2tfZmlsZShmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKLSAgcmV0
dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpibG9jazsKLX0KLQotaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIF9fcCkgewot
ICByZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3ApKTsKLX0KLQotaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIF9fcCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Ci0gIHJldHVybiBpc19ibG9ja19maWxlKF9fc3RhdHVz
KF9fcCwgJl9fZWMpKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bAotaXNfY2hhcmFjdGVyX2ZpbGUoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7Ci0gIHJldHVy
biBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6Y2hhcmFjdGVyOwotfQotCi1pbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGNvbnN0IHBhdGgmIF9f
cCkgewotICByZXR1cm4gaXNfY2hhcmFjdGVyX2ZpbGUoX19zdGF0dXMoX19wKSk7Ci19Ci0KLWlu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKLWlzX2NoYXJhY3Rlcl9maWxlKGNv
bnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgewotICByZXR1cm4gaXNf
Y2hhcmFjdGVyX2ZpbGUoX19zdGF0dXMoX19wLCAmX19lYykpOwotfQotCi1pbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1cyBfX3MpIG5v
ZXhjZXB0IHsKLSAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpkaXJlY3Rvcnk7Ci19
Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZGlyZWN0b3J5KGNv
bnN0IHBhdGgmIF9fcCkgewotICByZXR1cm4gaXNfZGlyZWN0b3J5KF9fc3RhdHVzKF9fcCkpOwot
fQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShj
b25zdCBwYXRoJiBfX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Ci0gIHJldHVybiBpc19kaXJl
Y3RvcnkoX19zdGF0dXMoX19wLCAmX19lYykpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIF9fcCkgewotICByZXR1cm4gX19m
c19pc19lbXB0eShfX3ApOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgewotICByZXR1cm4gX19mc19p
c19lbXB0eShfX3AsICZfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgYm9vbCBpc19maWZvKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgewotICByZXR1cm4gX19z
LnR5cGUoKSA9PSBmaWxlX3R5cGU6OmZpZm87Ci19Ci1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgX19wKSB7Ci0gIHJldHVybiBpc19maWZv
KF9fc3RhdHVzKF9fcCkpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgX19wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0dXJu
IGlzX2ZpZm8oX19zdGF0dXMoX19wLCAmX19lYykpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sCi1pc19yZWd1bGFyX2ZpbGUoZmlsZV9zdGF0dXMgX19zKSBub2V4
Y2VwdCB7Ci0gIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6cmVndWxhcjsKLX0KLQot
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29u
c3QgcGF0aCYgX19wKSB7Ci0gIHJldHVybiBpc19yZWd1bGFyX2ZpbGUoX19zdGF0dXMoX19wKSk7
Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKLWlzX3JlZ3VsYXJf
ZmlsZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0
dXJuIGlzX3JlZ3VsYXJfZmlsZShfX3N0YXR1cyhfX3AsICZfX2VjKSk7Ci19Ci0KLWlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc29ja2V0KGZpbGVfc3RhdHVzIF9fcykg
bm9leGNlcHQgewotICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OnNvY2tldDsKLX0K
LQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zb2NrZXQoY29uc3Qg
cGF0aCYgX19wKSB7Ci0gIHJldHVybiBpc19zb2NrZXQoX19zdGF0dXMoX19wKSk7Ci19Ci0KLWlu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgm
IF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIGlzX3NvY2tldChfX3N0YXR1cyhf
X3AsICZfX2VjKSk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
aXNfc3ltbGluayhmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9fcy50eXBl
KCkgPT0gZmlsZV90eXBlOjpzeW1saW5rOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX3N5bWxpbmsoY29uc3QgcGF0aCYgX19wKSB7Ci0gIHJldHVybiBpc19z
eW1saW5rKF9fc3ltbGlua19zdGF0dXMoX19wKSk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBfX3AsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgewotICByZXR1cm4gaXNfc3ltbGluayhfX3N5bWxpbmtfc3RhdHVzKF9fcCwgJl9f
ZWMpKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19vdGhl
cihmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIGV4aXN0cyhfX3MpICYmICFp
c19yZWd1bGFyX2ZpbGUoX19zKSAmJiAhaXNfZGlyZWN0b3J5KF9fcykgJiYKLSAgICAgICAgICFp
c19zeW1saW5rKF9fcyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgX19wKSB7Ci0gIHJldHVybiBpc19vdGhlcihfX3N0YXR1
cyhfX3ApKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19v
dGhlcihjb25zdCBwYXRoJiBfX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIGlzX290
aGVyKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgZmlsZV90aW1lX3R5cGUKLWxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3Ap
IHsKLSAgcmV0dXJuIF9fbGFzdF93cml0ZV90aW1lKF9fcCk7Ci19Ci0KLWlubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGZpbGVfdGltZV90eXBlCi1sYXN0X3dyaXRlX3RpbWUoY29uc3Qg
cGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Ci0gIHJldHVybiBfX2xhc3Rf
d3JpdGVfdGltZShfX3AsICZfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90aW1lX3R5cGUg
X190KSB7Ci0gIF9fbGFzdF93cml0ZV90aW1lKF9fcCwgX190KTsKLX0KLQotaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAotbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9f
cCwgZmlsZV90aW1lX3R5cGUgX190LAotICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMp
IG5vZXhjZXB0IHsKLSAgX19sYXN0X3dyaXRlX3RpbWUoX19wLCBfX3QsICZfX2VjKTsKLX0KLQot
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAotcGVybWlzc2lvbnMoY29uc3Qg
cGF0aCYgX19wLCBwZXJtcyBfX3BybXMsCi0gICAgICAgICAgICBwZXJtX29wdGlvbnMgX19vcHRz
ID0gcGVybV9vcHRpb25zOjpyZXBsYWNlKSB7Ci0gIF9fcGVybWlzc2lvbnMoX19wLCBfX3BybXMs
IF9fb3B0cyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcGVy
bWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3BybXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhj
ZXB0IHsKLSAgX19wZXJtaXNzaW9ucyhfX3AsIF9fcHJtcywgcGVybV9vcHRpb25zOjpyZXBsYWNl
LCAmX19lYyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcGVy
bWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3BybXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1fb3B0aW9ucyBfX29wdHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKLSAgX19wZXJtaXNzaW9ucyhfX3AsIF9fcHJtcywgX19vcHRzLCAmX19lYyk7
Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcHJveGltYXRlKGNv
bnN0IHBhdGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHBhdGgmIF9fYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKLSAgcGF0aCBfX3RtcCA9IF9f
d2Vha2x5X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKLSAgaWYgKF9fZWMpCi0gICAgcmV0dXJuIHt9
OwotICBwYXRoIF9fdG1wX2Jhc2UgPSBfX3dlYWtseV9jYW5vbmljYWwoX19iYXNlLCAmX19lYyk7
Ci0gIGlmIChfX2VjKQotICAgIHJldHVybiB7fTsKLSAgcmV0dXJuIF9fdG1wLmxleGljYWxseV9w
cm94aW1hdGUoX190bXBfYmFzZSk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKLSAgcmV0dXJu
IHByb3hpbWF0ZShfX3AsIGN1cnJlbnRfcGF0aCgpLCBfX2VjKTsKLX0KLQotaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aAotcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwgY29u
c3QgcGF0aCYgX19iYXNlID0gY3VycmVudF9wYXRoKCkpIHsKLSAgcmV0dXJuIF9fd2Vha2x5X2Nh
bm9uaWNhbChfX3ApLmxleGljYWxseV9wcm94aW1hdGUoCi0gICAgICBfX3dlYWtseV9jYW5vbmlj
YWwoX19iYXNlKSk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
cmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCkgewotICByZXR1cm4gX19yZWFkX3N5bWxpbmso
X19wKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWFkX3N5
bWxpbmsoY29uc3QgcGF0aCYgX19wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgewotICByZXR1cm4gX19yZWFkX3N5
bWxpbmsoX19wLCAmX19lYyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2Jhc2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKLSAg
cGF0aCBfX3RtcCA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKLSAgaWYgKF9fZWMp
Ci0gICAgcmV0dXJuIHBhdGgoKTsKLSAgcGF0aCBfX3RtcGJhc2UgPSBfX3dlYWtseV9jYW5vbmlj
YWwoX19iYXNlLCAmX19lYyk7Ci0gIGlmIChfX2VjKQotICAgIHJldHVybiBwYXRoKCk7Ci0gIHJl
dHVybiBfX3RtcC5sZXhpY2FsbHlfcmVsYXRpdmUoX190bXBiYXNlKTsKLX0KLQotaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2ZShjb25zdCBwYXRoJiBfX3AsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIHsKLSAgcmV0dXJuIHJlbGF0aXZlKF9fcCwgY3VycmVudF9wYXRoKCksIF9fZWMpOwot
fQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoCi1yZWxhdGl2ZShjb25z
dCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYmFzZSA9IGN1cnJlbnRfcGF0aCgpKSB7Ci0gIHJl
dHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKS5sZXhpY2FsbHlfcmVsYXRpdmUoX193ZWFrbHlf
Y2Fub25pY2FsKF9fYmFzZSkpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIHJlbW92ZShjb25zdCBwYXRoJiBfX3ApIHsKLSAgcmV0dXJuIF9fcmVtb3ZlKF9fcCk7
Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgcmVtb3ZlKGNvbnN0
IHBhdGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9fcmVtb3ZlKF9fcCwgJl9f
ZWMpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QgcmVt
b3ZlX2FsbChjb25zdCBwYXRoJiBfX3ApIHsKLSAgcmV0dXJuIF9fcmVtb3ZlX2FsbChfX3ApOwot
fQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QgcmVtb3ZlX2Fs
bChjb25zdCBwYXRoJiBfX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7Ci0gIHJldHVybiBfX3JlbW92ZV9h
bGwoX19wLCAmX19lYyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQgcmVuYW1lKGNvbnN0IHBhdGgmIF9fZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8pIHsKLSAgcmV0dXJuIF9fcmVuYW1l
KF9fZnJvbSwgX190byk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQKLXJlbmFtZShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGVycm9yX2Nv
ZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9fcmVuYW1lKF9fZnJvbSwgX190bywgJl9f
ZWMpOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJlc2l6ZV9m
aWxlKGNvbnN0IHBhdGgmIF9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludG1heF90IF9fbnMpIHsKLSAgcmV0dXJuIF9fcmVzaXplX2ZpbGUo
X19wLCBfX25zKTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAot
cmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgX19wLCB1aW50bWF4X3QgX19ucywgZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgewotICByZXR1cm4gX19yZXNpemVfZmlsZShfX3AsIF9fbnMsICZfX2Vj
KTsKLX0KLQotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3BhY2VfaW5mbyBzcGFj
ZShjb25zdCBwYXRoJiBfX3ApIHsKLSAgcmV0dXJuIF9fc3BhY2UoX19wKTsKLX0KLQotaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3BhY2VfaW5mbyBzcGFjZShjb25zdCBwYXRoJiBf
X3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9fc3BhY2UoX19wLCAmX19lYyk7
Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzIHN0YXR1
cyhjb25zdCBwYXRoJiBfX3ApIHsKLSAgcmV0dXJuIF9fc3RhdHVzKF9fcCk7Ci19Ci0KLWlubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzIHN0YXR1cyhjb25zdCBwYXRo
JiBfX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgewotICByZXR1cm4gX19zdGF0dXMoX19wLCAm
X19lYyk7Ci19Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVz
IHN5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIF9fcCkgewotICByZXR1cm4gX19zeW1saW5rX3N0
YXR1cyhfX3ApOwotfQotCi1pbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3N0
YXR1cwotc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBu
b2V4Y2VwdCB7Ci0gIHJldHVybiBfX3N5bWxpbmtfc3RhdHVzKF9fcCwgJl9fZWMpOwotfQotCi1p
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgo
KSB7Ci0gIHJldHVybiBfX3RlbXBfZGlyZWN0b3J5X3BhdGgoKTsKLX0KLQotaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUm
IF9fZWMpIHsKLSAgcmV0dXJuIF9fdGVtcF9kaXJlY3RvcnlfcGF0aCgmX19lYyk7Ci19Ci0KLWlu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRo
IGNvbnN0JiBfX3ApIHsKLSAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9uaWNhbChfX3ApOwotfQotCi1p
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0
aCBjb25zdCYgX19wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKLSAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9u
aWNhbChfX3AsICZfX2VjKTsKLX0KLQotY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9yOwotY2xhc3Mg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKLWNsYXNzIF9fZGlyX3N0cmVhbTsKLQotY2xh
c3MgZGlyZWN0b3J5X2VudHJ5IHsKLSAgdHlwZWRlZiBfVlNURF9GUzo6cGF0aCBfUGF0aDsKLQot
cHVibGljOgotICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzCi0gIGRpcmVjdG9yeV9l
bnRyeSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSAgZGlyZWN0b3J5X2VudHJ5KGRpcmVjdG9yeV9l
bnRyeSBjb25zdCYpID0gZGVmYXVsdDsKLSAgZGlyZWN0b3J5X2VudHJ5KGRpcmVjdG9yeV9lbnRy
eSYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQot
ICBleHBsaWNpdCBkaXJlY3RvcnlfZW50cnkoX1BhdGggY29uc3QmIF9fcCkgOiBfX3BfKF9fcCkg
ewotICAgIGVycm9yX2NvZGUgX19lYzsKLSAgICBfX3JlZnJlc2goJl9fZWMpOwotICB9Ci0KLSAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBkaXJlY3RvcnlfZW50cnkoX1BhdGggY29uc3Qm
IF9fcCwgZXJyb3JfY29kZSYgX19lYykgOiBfX3BfKF9fcCkgewotICAgIF9fcmVmcmVzaCgmX19l
Yyk7Ci0gIH0KLQotICB+ZGlyZWN0b3J5X2VudHJ5KCkge30KLQotICBkaXJlY3RvcnlfZW50cnkm
IG9wZXJhdG9yPShkaXJlY3RvcnlfZW50cnkgY29uc3QmKSA9IGRlZmF1bHQ7Ci0gIGRpcmVjdG9y
eV9lbnRyeSYgb3BlcmF0b3I9KGRpcmVjdG9yeV9lbnRyeSYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7
Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICB2b2lkIGFzc2lnbihfUGF0aCBjb25z
dCYgX19wKSB7Ci0gICAgX19wXyA9IF9fcDsKLSAgICBlcnJvcl9jb2RlIF9fZWM7Ci0gICAgX19y
ZWZyZXNoKCZfX2VjKTsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgdm9p
ZCBhc3NpZ24oX1BhdGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgewotICAgIF9fcF8g
PSBfX3A7Ci0gICAgX19yZWZyZXNoKCZfX2VjKTsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKLSAgdm9pZCByZXBsYWNlX2ZpbGVuYW1lKF9QYXRoIGNvbnN0JiBfX3ApIHsKLSAg
ICBfX3BfLnJlcGxhY2VfZmlsZW5hbWUoX19wKTsKLSAgICBlcnJvcl9jb2RlIF9fZWM7Ci0gICAg
X19yZWZyZXNoKCZfX2VjKTsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAg
dm9pZCByZXBsYWNlX2ZpbGVuYW1lKF9QYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMp
IHsKLSAgICBfX3BfID0gX19wXy5wYXJlbnRfcGF0aCgpIC8gX19wOwotICAgIF9fcmVmcmVzaCgm
X19lYyk7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHZvaWQgcmVmcmVz
aCgpIHsgX19yZWZyZXNoKCk7IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHZv
aWQgcmVmcmVzaChlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7IF9fcmVmcmVzaCgmX19lYyk7
IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIF9QYXRoIGNvbnN0JiBwYXRoKCkg
Y29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wXzsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKLSAgb3BlcmF0b3IgY29uc3QgX1BhdGgmKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4g
X19wXzsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBleGlzdHMoKSBj
b25zdCB7IHJldHVybiBfVlNURF9GUzo6ZXhpc3RzKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsg
fQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBleGlzdHMoZXJyb3JfY29k
ZSYgX19lYykgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBfVlNURF9GUzo6ZXhpc3RzKGZp
bGVfc3RhdHVze19fZ2V0X2Z0KCZfX2VjKX0pOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQotICBib29sIGlzX2Jsb2NrX2ZpbGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgp
ID09IGZpbGVfdHlwZTo6YmxvY2s7IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0g
IGJvb2wgaXNfYmxvY2tfZmlsZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7Ci0g
ICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmJsb2NrOwotICB9Ci0KLSAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKCkgY29u
c3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsgfQotCi0gIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShlcnJvcl9j
b2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9
PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKLSAgYm9vbCBpc19kaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZp
bGVfdHlwZTo6ZGlyZWN0b3J5OyB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBi
b29sIGlzX2RpcmVjdG9yeShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAg
cmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsKLSAgfQotCi0g
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBpc19maWZvKCkgY29uc3QgeyByZXR1
cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmZpZm87IH0KLQotICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCi0gIGJvb2wgaXNfZmlmbyhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2Vw
dCB7Ci0gICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmZpZm87Ci0gIH0K
LQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGJvb2wgaXNfb3RoZXIoKSBjb25zdCB7
IHJldHVybiBfVlNURF9GUzo6aXNfb3RoZXIoZmlsZV9zdGF0dXN7X19nZXRfZnQoKX0pOyB9Ci0K
LSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBib29sIGlzX290aGVyKGVycm9yX2NvZGUm
IF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gX1ZTVERfRlM6OmlzX290aGVyKGZp
bGVfc3RhdHVze19fZ2V0X2Z0KCZfX2VjKX0pOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQotICBib29sIGlzX3JlZ3VsYXJfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0
KCkgPT0gZmlsZV90eXBlOjpyZWd1bGFyOyB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQotICBib29sIGlzX3JlZ3VsYXJfZmlsZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2Vw
dCB7Ci0gICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OnJlZ3VsYXI7Ci0g
IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGJvb2wgaXNfc29ja2V0KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OnNvY2tldDsgfQotCi0gIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBpc19zb2NrZXQoZXJyb3JfY29kZSYgX19lYykg
Y29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBl
Ojpzb2NrZXQ7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGJvb2wgaXNf
c3ltbGluaygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3N5bV9mdCgpID09IGZpbGVfdHlwZTo6c3lt
bGluazsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBpc19zeW1saW5r
KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gX19nZXRfc3lt
X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7Ci0gIH0KLSAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQotICB1aW50bWF4X3QgZmlsZV9zaXplKCkgY29uc3QgeyByZXR1cm4gX19nZXRf
c2l6ZSgpOyB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICB1aW50bWF4X3QgZmls
ZV9zaXplKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gX19n
ZXRfc2l6ZSgmX19lYyk7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHVp
bnRtYXhfdCBoYXJkX2xpbmtfY291bnQoKSBjb25zdCB7IHJldHVybiBfX2dldF9ubGluaygpOyB9
Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICB1aW50bWF4X3QgaGFyZF9saW5rX2Nv
dW50KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gX19nZXRf
bmxpbmsoJl9fZWMpOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBmaWxl
X3RpbWVfdHlwZSBsYXN0X3dyaXRlX3RpbWUoKSBjb25zdCB7IHJldHVybiBfX2dldF93cml0ZV90
aW1lKCk7IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGZpbGVfdGltZV90eXBl
IGxhc3Rfd3JpdGVfdGltZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAg
cmV0dXJuIF9fZ2V0X3dyaXRlX3RpbWUoJl9fZWMpOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQotICBmaWxlX3N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBfX2dldF9z
dGF0dXMoKTsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgZmlsZV9zdGF0dXMg
c3RhdHVzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gX19n
ZXRfc3RhdHVzKCZfX2VjKTsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAg
ZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoKSBjb25zdCB7IHJldHVybiBfX2dldF9zeW1saW5r
X3N0YXR1cygpOyB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBmaWxlX3N0YXR1
cyBzeW1saW5rX3N0YXR1cyhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAg
cmV0dXJuIF9fZ2V0X3N5bWxpbmtfc3RhdHVzKCZfX2VjKTsKLSAgfQotCi0gIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBvcGVyYXRvcjwoZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBf
X3JocykgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBfX3BfIDwgX19yaHMuX19wXzsKLSAg
fQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBvcGVyYXRvcj09KGRpcmVj
dG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gX19w
XyA9PSBfX3Jocy5fX3BfOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBi
b29sIG9wZXJhdG9yIT0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNl
cHQgewotICAgIHJldHVybiBfX3BfICE9IF9fcmhzLl9fcF87Ci0gIH0KLQotICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCi0gIGJvb2wgb3BlcmF0b3I8PShkaXJlY3RvcnlfZW50cnkgY29uc3Qm
IF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIF9fcF8gPD0gX19yaHMuX19wXzsK
LSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9vbCBvcGVyYXRvcj4oZGly
ZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBf
X3BfID4gX19yaHMuX19wXzsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAg
Ym9vbCBvcGVyYXRvcj49KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhj
ZXB0IHsKLSAgICByZXR1cm4gX19wXyA+PSBfX3Jocy5fX3BfOwotICB9Ci0KLXByaXZhdGU6Ci0g
IGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7Ci0gIGZyaWVuZCBjbGFzcyByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOwotICBmcmllbmQgY2xhc3MgX19kaXJfc3RyZWFtOwotCi0g
IGVudW0gX0NhY2hlVHlwZSA6IHVuc2lnbmVkIGNoYXIgewotICAgIF9FbXB0eSwKLSAgICBfSXRl
clN5bWxpbmssCi0gICAgX0l0ZXJOb25TeW1saW5rLAotICAgIF9SZWZyZXNoU3ltbGluaywKLSAg
ICBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkLAotICAgIF9SZWZyZXNoTm9uU3ltbGluawotICB9
OwotCi0gIHN0cnVjdCBfX2NhY2hlZF9kYXRhIHsKLSAgICB1aW50bWF4X3QgX19zaXplXzsKLSAg
ICB1aW50bWF4X3QgX19ubGlua187Ci0gICAgZmlsZV90aW1lX3R5cGUgX193cml0ZV90aW1lXzsK
LSAgICBwZXJtcyBfX3N5bV9wZXJtc187Ci0gICAgcGVybXMgX19ub25fc3ltX3Blcm1zXzsKLSAg
ICBmaWxlX3R5cGUgX190eXBlXzsKLSAgICBfQ2FjaGVUeXBlIF9fY2FjaGVfdHlwZV87Ci0KLSAg
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gICAgX19jYWNoZWRfZGF0YSgpIG5vZXhjZXB0
IHsgX19yZXNldCgpOyB9Ci0KLSAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gICAgdm9p
ZCBfX3Jlc2V0KCkgewotICAgICAgX19jYWNoZV90eXBlXyA9IF9FbXB0eTsKLSAgICAgIF9fdHlw
ZV8gPSBmaWxlX3R5cGU6Om5vbmU7Ci0gICAgICBfX3N5bV9wZXJtc18gPSBfX25vbl9zeW1fcGVy
bXNfID0gcGVybXM6OnVua25vd247Ci0gICAgICBfX3NpemVfID0gX19ubGlua18gPSB1aW50bWF4
X3QoLTEpOwotICAgICAgX193cml0ZV90aW1lXyA9IGZpbGVfdGltZV90eXBlOjptaW4oKTsKLSAg
ICB9Ci0gIH07Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBzdGF0aWMgX19jYWNo
ZWRfZGF0YSBfX2NyZWF0ZV9pdGVyX3Jlc3VsdChmaWxlX3R5cGUgX19mdCkgewotICAgIF9fY2Fj
aGVkX2RhdGEgX19kYXRhOwotICAgIF9fZGF0YS5fX3R5cGVfID0gX19mdDsKLSAgICBfX2RhdGEu
X19jYWNoZV90eXBlXyA9IFsmXSgpIHsKLSAgICAgIHN3aXRjaCAoX19mdCkgewotICAgICAgY2Fz
ZSBmaWxlX3R5cGU6Om5vbmU6Ci0gICAgICAgIHJldHVybiBfRW1wdHk7Ci0gICAgICBjYXNlIGZp
bGVfdHlwZTo6c3ltbGluazoKLSAgICAgICAgcmV0dXJuIF9JdGVyU3ltbGluazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBfSXRlck5vblN5bWxpbms7Ci0gICAgICB9Ci0gICAgfSgp
OwotICAgIHJldHVybiBfX2RhdGE7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
Ci0gIHZvaWQgX19hc3NpZ25faXRlcl9lbnRyeShfUGF0aCYmIF9fcCwgX19jYWNoZWRfZGF0YSBf
X2R0KSB7Ci0gICAgX19wXyA9IHN0ZDo6bW92ZShfX3ApOwotICAgIF9fZGF0YV8gPSBfX2R0Owot
ICB9Ci0KLSAgX0xJQkNQUF9GVU5DX1ZJUwotICBlcnJvcl9jb2RlIF9fZG9fcmVmcmVzaCgpIG5v
ZXhjZXB0OwotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgc3RhdGljIGJvb2wgX19p
c19kbmVfZXJyb3IoZXJyb3JfY29kZSBjb25zdCYgX19lYykgewotICAgIGlmICghX19lYykKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8ZXJyYz4oX19lYy52YWx1
ZSgpKSkgewotICAgIGNhc2UgZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeToKLSAgICBj
YXNlIGVycmM6Om5vdF9hX2RpcmVjdG9yeToKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQotICB2b2lkIF9faGFuZGxlX2Vycm9yKGNvbnN0IGNoYXIqIF9fbXNnLCBlcnJv
cl9jb2RlKiBfX2Rlc3RfZWMsCi0gICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSBjb25z
dCYgX19lYywgYm9vbCBfX2FsbG93X2RuZSA9IGZhbHNlKSBjb25zdCB7Ci0gICAgaWYgKF9fZGVz
dF9lYykgewotICAgICAgKl9fZGVzdF9lYyA9IF9fZWM7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChfX2VjICYmICghX19hbGxvd19kbmUgfHwgIV9faXNfZG5lX2Vycm9yKF9fZWMpKSkK
LSAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfX21zZywgX19wXywgX19lYyk7Ci0gIH0K
LQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHZvaWQgX19yZWZyZXNoKGVycm9yX2Nv
ZGUqIF9fZWMgPSBudWxscHRyKSB7Ci0gICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9l
bnRyeTo6cmVmcmVzaCIsIF9fZWMsIF9fZG9fcmVmcmVzaCgpLAotICAgICAgICAgICAgICAgICAg
IC8qYWxsb3dfZG5lKi8gdHJ1ZSk7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
Ci0gIGZpbGVfdHlwZSBfX2dldF9zeW1fZnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNv
bnN0IHsKLSAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgewotICAgIGNhc2UgX0Vt
cHR5OgotICAgICAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wXywgX19lYykudHlwZSgpOwot
ICAgIGNhc2UgX0l0ZXJTeW1saW5rOgotICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgotICAgIGNh
c2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKLSAgICAgIGlmIChfX2VjKQotICAgICAgICBf
X2VjLT5jbGVhcigpOwotICAgICAgcmV0dXJuIGZpbGVfdHlwZTo6c3ltbGluazsKLSAgICBjYXNl
IF9JdGVyTm9uU3ltbGluazoKLSAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKLSAgICAgIGZp
bGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5cGVfKTsKLSAgICAgIGlmIChfX2VjICYmICFfVlNU
RF9GUzo6ZXhpc3RzKF9fc3QpKQotICAgICAgICAqX19lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJj
Ojpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KTsKLSAgICAgIGVsc2UgaWYgKF9fZWMpCi0gICAg
ICAgIF9fZWMtPmNsZWFyKCk7Ci0gICAgICByZXR1cm4gX19kYXRhXy5fX3R5cGVfOwotICAgIH0K
LSAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCi0gIGZpbGVfdHlwZSBfX2dldF9mdChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikg
Y29uc3QgewotICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7Ci0gICAgY2FzZSBf
RW1wdHk6Ci0gICAgY2FzZSBfSXRlclN5bWxpbms6Ci0gICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtV
bnJlc29sdmVkOgotICAgICAgcmV0dXJuIF9fc3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKLSAg
ICBjYXNlIF9JdGVyTm9uU3ltbGluazoKLSAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKLSAg
ICBjYXNlIF9SZWZyZXNoU3ltbGluazogewotICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2RhdGFf
Ll9fdHlwZV8pOwotICAgICAgaWYgKF9fZWMgJiYgIV9WU1REX0ZTOjpleGlzdHMoX19zdCkpCi0g
ICAgICAgICpfX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJl
Y3RvcnkpOwotICAgICAgZWxzZSBpZiAoX19lYykKLSAgICAgICAgX19lYy0+Y2xlYXIoKTsKLSAg
ICAgIHJldHVybiBfX2RhdGFfLl9fdHlwZV87Ci0gICAgfQotICAgIH0KLSAgICBfTElCQ1BQX1VO
UkVBQ0hBQkxFKCk7Ci0gIH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGZpbGVf
c3RhdHVzIF9fZ2V0X3N0YXR1cyhlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3Qgewot
ICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7Ci0gICAgY2FzZSBfRW1wdHk6Ci0g
ICAgY2FzZSBfSXRlck5vblN5bWxpbms6Ci0gICAgY2FzZSBfSXRlclN5bWxpbms6Ci0gICAgY2Fz
ZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgotICAgICAgcmV0dXJuIF9fc3RhdHVzKF9fcF8s
IF9fZWMpOwotICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOgotICAgIGNhc2UgX1JlZnJlc2hT
eW1saW5rOgotICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X2Z0KF9fZWMpLCBfX2RhdGFf
Ll9fbm9uX3N5bV9wZXJtc18pOwotICAgIH0KLSAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Ci0g
IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGZpbGVfc3RhdHVzIF9fZ2V0X3N5
bWxpbmtfc3RhdHVzKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7Ci0gICAgc3dp
dGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKLSAgICBjYXNlIF9FbXB0eToKLSAgICBjYXNl
IF9JdGVyTm9uU3ltbGluazoKLSAgICBjYXNlIF9JdGVyU3ltbGluazoKLSAgICAgIHJldHVybiBf
X3N5bWxpbmtfc3RhdHVzKF9fcF8sIF9fZWMpOwotICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5r
OgotICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5bV9mdChfX2VjKSwgX19kYXRhXy5f
X25vbl9zeW1fcGVybXNfKTsKLSAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKLSAgICBjYXNlIF9S
ZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6Ci0gICAgICByZXR1cm4gZmlsZV9zdGF0dXMoX19nZXRf
c3ltX2Z0KF9fZWMpLCBfX2RhdGFfLl9fc3ltX3Blcm1zXyk7Ci0gICAgfQotICAgIF9MSUJDUFBf
VU5SRUFDSEFCTEUoKTsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgdWlu
dG1heF90IF9fZ2V0X3NpemUoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKLSAg
ICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgewotICAgIGNhc2UgX0VtcHR5OgotICAg
IGNhc2UgX0l0ZXJOb25TeW1saW5rOgotICAgIGNhc2UgX0l0ZXJTeW1saW5rOgotICAgIGNhc2Ug
X1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKLSAgICAgIHJldHVybiBfVlNURF9GUzo6X19maWxl
X3NpemUoX19wXywgX19lYyk7Ci0gICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6Ci0gICAgY2FzZSBf
UmVmcmVzaE5vblN5bWxpbms6IHsKLSAgICAgIGVycm9yX2NvZGUgX19tX2VjOwotICAgICAgZmls
ZV9zdGF0dXMgX19zdChfX2dldF9mdCgmX19tX2VjKSk7Ci0gICAgICBfX2hhbmRsZV9lcnJvcigi
aW4gZGlyZWN0b3J5X2VudHJ5OjpmaWxlX3NpemUiLCBfX2VjLCBfX21fZWMpOwotICAgICAgaWYg
KF9WU1REX0ZTOjpleGlzdHMoX19zdCkgJiYgIV9WU1REX0ZTOjppc19yZWd1bGFyX2ZpbGUoX19z
dCkpIHsKLSAgICAgICAgZXJyYyBfX2Vycl9raW5kID0gX1ZTVERfRlM6OmlzX2RpcmVjdG9yeShf
X3N0KSA/IGVycmM6OmlzX2FfZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlcnJjOjpub3Rfc3VwcG9ydGVkOwotICAgICAg
ICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpmaWxlX3NpemUiLCBfX2VjLAot
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2Vycm9yX2NvZGUoX19lcnJfa2luZCkpOwotICAg
ICAgfQotICAgICAgcmV0dXJuIF9fZGF0YV8uX19zaXplXzsKLSAgICB9Ci0gICAgfQotICAgIF9M
SUJDUFBfVU5SRUFDSEFCTEUoKTsKLSAgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
LSAgdWludG1heF90IF9fZ2V0X25saW5rKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25z
dCB7Ci0gICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKLSAgICBjYXNlIF9FbXB0
eToKLSAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKLSAgICBjYXNlIF9JdGVyU3ltbGluazoKLSAg
ICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6Ci0gICAgICByZXR1cm4gX1ZTVERfRlM6
Ol9faGFyZF9saW5rX2NvdW50KF9fcF8sIF9fZWMpOwotICAgIGNhc2UgX1JlZnJlc2hTeW1saW5r
OgotICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7Ci0gICAgICBlcnJvcl9jb2RlIF9fbV9l
YzsKLSAgICAgICh2b2lkKV9fZ2V0X2Z0KCZfX21fZWMpOwotICAgICAgX19oYW5kbGVfZXJyb3Io
ImluIGRpcmVjdG9yeV9lbnRyeTo6aGFyZF9saW5rX2NvdW50IiwgX19lYywgX19tX2VjKTsKLSAg
ICAgIHJldHVybiBfX2RhdGFfLl9fbmxpbmtfOwotICAgIH0KLSAgICB9Ci0gICAgX0xJQkNQUF9V
TlJFQUNIQUJMRSgpOwotICB9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBmaWxl
X3RpbWVfdHlwZSBfX2dldF93cml0ZV90aW1lKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBj
b25zdCB7Ci0gICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKLSAgICBjYXNlIF9F
bXB0eToKLSAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKLSAgICBjYXNlIF9JdGVyU3ltbGluazoK
LSAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6Ci0gICAgICByZXR1cm4gX1ZTVERf
RlM6Ol9fbGFzdF93cml0ZV90aW1lKF9fcF8sIF9fZWMpOwotICAgIGNhc2UgX1JlZnJlc2hTeW1s
aW5rOgotICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7Ci0gICAgICBlcnJvcl9jb2RlIF9f
bV9lYzsKLSAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19nZXRfZnQoJl9fbV9lYykpOwotICAgICAg
X19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6bGFzdF93cml0ZV90aW1lIiwgX19l
YywgX19tX2VjKTsKLSAgICAgIGlmIChfVlNURF9GUzo6ZXhpc3RzKF9fc3QpICYmCi0gICAgICAg
ICAgX19kYXRhXy5fX3dyaXRlX3RpbWVfID09IGZpbGVfdGltZV90eXBlOjptaW4oKSkKLSAgICAg
ICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6bGFzdF93cml0ZV90aW1lIiwg
X19lYywKLSAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9lcnJvcl9jb2RlKGVycmM6OnZhbHVl
X3Rvb19sYXJnZSkpOwotICAgICAgcmV0dXJuIF9fZGF0YV8uX193cml0ZV90aW1lXzsKLSAgICB9
Ci0gICAgfQotICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKLSAgfQotCi1wcml2YXRlOgotICBf
UGF0aCBfX3BfOwotICBfX2NhY2hlZF9kYXRhIF9fZGF0YV87Ci19OwotCi1jbGFzcyBfX2Rpcl9l
bGVtZW50X3Byb3h5IHsKLXB1YmxpYzoKLSAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgZGlyZWN0b3J5X2VudHJ5IG9wZXJhdG9yKigpIHsKLSAgICByZXR1cm4gX1ZTVEQ6Om1vdmUo
X19lbGVtXyk7Ci0gIH0KLQotcHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNzIGRpcmVjdG9yeV9pdGVy
YXRvcjsKLSAgZnJpZW5kIGNsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7Ci0gIGV4
cGxpY2l0IF9fZGlyX2VsZW1lbnRfcHJveHkoZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX2UpIDog
X19lbGVtXyhfX2UpIHt9Ci0gIF9fZGlyX2VsZW1lbnRfcHJveHkoX19kaXJfZWxlbWVudF9wcm94
eSYmIF9fbykKLSAgICAgIDogX19lbGVtXyhfVlNURDo6bW92ZShfX28uX19lbGVtXykpIHt9Ci0g
IGRpcmVjdG9yeV9lbnRyeSBfX2VsZW1fOwotfTsKLQotY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9y
IHsKLXB1YmxpYzoKLSAgdHlwZWRlZiBkaXJlY3RvcnlfZW50cnkgdmFsdWVfdHlwZTsKLSAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwotICB0eXBlZGVmIHZhbHVlX3R5cGUgY29u
c3QqIHBvaW50ZXI7Ci0gIHR5cGVkZWYgdmFsdWVfdHlwZSBjb25zdCYgcmVmZXJlbmNlOwotICB0
eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKLQotcHVibGljOgot
ICAvL2N0b3IgJiBkdG9yCi0gIGRpcmVjdG9yeV9pdGVyYXRvcigpIG5vZXhjZXB0IHt9Ci0KLSAg
ZXhwbGljaXQgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCkKLSAgICAgIDogZGly
ZWN0b3J5X2l0ZXJhdG9yKF9fcCwgbnVsbHB0cikge30KLQotICBkaXJlY3RvcnlfaXRlcmF0b3Io
Y29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdHMpCi0gICAgICA6IGRpcmVj
dG9yeV9pdGVyYXRvcihfX3AsIG51bGxwdHIsIF9fb3B0cykge30KLQotICBkaXJlY3RvcnlfaXRl
cmF0b3IoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKQotICAgICAgOiBkaXJlY3Rv
cnlfaXRlcmF0b3IoX19wLCAmX19lYykge30KLQotICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3Qg
cGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdHMsCi0gICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKQotICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCAmX19l
YywgX19vcHRzKSB7fQotCi0gIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBkaXJlY3RvcnlfaXRl
cmF0b3ImKSA9IGRlZmF1bHQ7Ci0gIGRpcmVjdG9yeV9pdGVyYXRvcihkaXJlY3RvcnlfaXRlcmF0
b3ImJikgPSBkZWZhdWx0OwotICBkaXJlY3RvcnlfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBk
aXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7Ci0KLSAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBv
cGVyYXRvcj0oZGlyZWN0b3J5X2l0ZXJhdG9yJiYgX19vKSBub2V4Y2VwdCB7Ci0gICAgLy8gbm9u
LWRlZmF1bHQgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgdG8gc3VwcG9ydCBzZWxmLW1vdmUgYXNz
aWduLgotICAgIGlmICh0aGlzICE9ICZfX28pIHsKLSAgICAgIF9faW1wXyA9IF9WU1REOjptb3Zl
KF9fby5fX2ltcF8pOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB+ZGlyZWN0
b3J5X2l0ZXJhdG9yKCkgPSBkZWZhdWx0OwotCi0gIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgb3Bl
cmF0b3IqKCkgY29uc3QgewotICAgIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIlRoZSBlbmQgaXRl
cmF0b3IgY2Fubm90IGJlIGRlcmVmZXJlbmNlZCIpOwotICAgIHJldHVybiBfX2RlcmVmZXJlbmNl
KCk7Ci0gIH0KLQotICBjb25zdCBkaXJlY3RvcnlfZW50cnkqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmKip0aGlzOyB9Ci0KLSAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkg
eyByZXR1cm4gX19pbmNyZW1lbnQoKTsgfQotCi0gIF9fZGlyX2VsZW1lbnRfcHJveHkgb3BlcmF0
b3IrKyhpbnQpIHsKLSAgICBfX2Rpcl9lbGVtZW50X3Byb3h5IF9fcCgqKnRoaXMpOwotICAgIF9f
aW5jcmVtZW50KCk7Ci0gICAgcmV0dXJuIF9fcDsKLSAgfQotCi0gIGRpcmVjdG9yeV9pdGVyYXRv
ciYgaW5jcmVtZW50KGVycm9yX2NvZGUmIF9fZWMpIHsgcmV0dXJuIF9faW5jcmVtZW50KCZfX2Vj
KTsgfQotCi1wcml2YXRlOgotICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmll
bmQgYm9vbAotICBvcGVyYXRvcj09KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCi0g
ICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQ7Ci0K
LSAgLy8gY29uc3RydWN0IHRoZSBkaXJfc3RyZWFtCi0gIF9MSUJDUFBfRlVOQ19WSVMKLSAgZGly
ZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiwKLSAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdG9yeV9vcHRpb25zID0gZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUpOwotCi0g
IF9MSUJDUFBfRlVOQ19WSVMKLSAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2luY3JlbWVudChlcnJv
cl9jb2RlKiBfX2VjID0gbnVsbHB0cik7Ci0KLSAgX0xJQkNQUF9GVU5DX1ZJUwotICBjb25zdCBk
aXJlY3RvcnlfZW50cnkmIF9fZGVyZWZlcmVuY2UoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgc2hh
cmVkX3B0cjxfX2Rpcl9zdHJlYW0+IF9faW1wXzsKLX07Ci0KLWlubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wKLW9wZXJhdG9yPT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBf
X2xocywKLSAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNl
cHQgewotICByZXR1cm4gX19saHMuX19pbXBfID09IF9fcmhzLl9faW1wXzsKLX0KLQotaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAotb3BlcmF0b3IhPShjb25zdCBkaXJlY3Rv
cnlfaXRlcmF0b3ImIF9fbGhzLAotICAgICAgICAgICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3Im
IF9fcmhzKSBub2V4Y2VwdCB7Ci0gIHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsKLX0KLQotLy8g
ZW5hYmxlIGRpcmVjdG9yeV9pdGVyYXRvciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cwotaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZGlyZWN0b3J5X2l0ZXJhdG9yCi1iZWdpbihk
aXJlY3RvcnlfaXRlcmF0b3IgX19pdGVyKSBub2V4Y2VwdCB7Ci0gIHJldHVybiBfX2l0ZXI7Ci19
Ci0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRpcmVjdG9yeV9pdGVyYXRvcgot
ZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIGRpcmVj
dG9yeV9pdGVyYXRvcigpOwotfQotCi1jbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
IHsKLXB1YmxpYzoKLSAgdXNpbmcgdmFsdWVfdHlwZSA9IGRpcmVjdG9yeV9lbnRyeTsKLSAgdXNp
bmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7Ci0gIHVzaW5nIHBvaW50ZXIgPSBk
aXJlY3RvcnlfZW50cnkgY29uc3QqOwotICB1c2luZyByZWZlcmVuY2UgPSBkaXJlY3RvcnlfZW50
cnkgY29uc3QmOwotICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6aW5wdXRfaXRlcmF0
b3JfdGFnOwotCi1wdWJsaWM6Ci0gIC8vIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcgotICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Io
KSBub2V4Y2VwdCA6IF9fcmVjXyhmYWxzZSkge30KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCi0gIGV4cGxpY2l0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoCi0gICAgICBjb25z
dCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9feG9wdGlvbnMgPSBkaXJlY3Rvcnlfb3B0
aW9uczo6bm9uZSkKLSAgICAgIDogcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9f
eG9wdGlvbnMsIG51bGxwdHIpIHt9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX194b3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBfX2VjKQotICAgICAgOiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgX194
b3B0aW9ucywgJl9fZWMpIHt9Ci0KLSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19l
YykKLSAgICAgIDogcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIGRpcmVjdG9yeV9v
cHRpb25zOjpub25lLCAmX19lYykge30KLQotICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7Ci0gIHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IocmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYmKSA9
IGRlZmF1bHQ7Ci0KLSAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKLSAgb3BlcmF0b3I9
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7Ci0KLSAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQotICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJgot
ICBvcGVyYXRvcj0ocmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYmIF9fbykgbm9leGNlcHQg
ewotICAgIC8vIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIHRvIHN1cHBvcnQg
c2VsZi1tb3ZlIGFzc2lnbi4KLSAgICBpZiAodGhpcyAhPSAmX19vKSB7Ci0gICAgICBfX2ltcF8g
PSBfVlNURDo6bW92ZShfX28uX19pbXBfKTsKLSAgICAgIF9fcmVjXyA9IF9fby5fX3JlY187Ci0g
ICAgfQotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIH5yZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yKCkgPSBkZWZhdWx0OwotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgY29u
c3QgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfX2RlcmVmZXJl
bmNlKCk7IH0KLQotICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIGNvbnN0IGRpcmVjdG9y
eV9lbnRyeSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZfX2RlcmVmZXJlbmNlKCk7IH0K
LQotICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyByZXR1cm4g
X19pbmNyZW1lbnQoKTsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgX19kaXJf
ZWxlbWVudF9wcm94eSBvcGVyYXRvcisrKGludCkgewotICAgIF9fZGlyX2VsZW1lbnRfcHJveHkg
X19wKCoqdGhpcyk7Ci0gICAgX19pbmNyZW1lbnQoKTsKLSAgICByZXR1cm4gX19wOwotICB9Ci0K
LSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yJiBpbmNyZW1lbnQoZXJyb3JfY29kZSYgX19lYykgewotICAgIHJldHVybiBfX2luY3JlbWVu
dCgmX19lYyk7Ci0gIH0KLQotICBfTElCQ1BQX0ZVTkNfVklTIGRpcmVjdG9yeV9vcHRpb25zIG9w
dGlvbnMoKSBjb25zdDsKLSAgX0xJQkNQUF9GVU5DX1ZJUyBpbnQgZGVwdGgoKSBjb25zdDsKLQot
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCi0gIHZvaWQgcG9wKCkgeyBfX3BvcCgpOyB9Ci0K
LSAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQotICB2b2lkIHBvcChlcnJvcl9jb2RlJiBfX2Vj
KSB7IF9fcG9wKCZfX2VjKTsgfQotCi0gIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgYm9v
bCByZWN1cnNpb25fcGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIF9fcmVjXzsgfQotCi0gIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKLSAgdm9pZCBkaXNhYmxlX3JlY3Vyc2lvbl9wZW5kaW5nKCkg
eyBfX3JlY18gPSBmYWxzZTsgfQotCi1wcml2YXRlOgotICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMgX19vcHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyk7Ci0KLSAgX0xJQkNQUF9G
VU5DX1ZJUwotICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIF9fZGVyZWZlcmVuY2UoKSBjb25zdDsK
LQotICBfTElCQ1BQX0ZVTkNfVklTCi0gIGJvb2wgX190cnlfcmVjdXJzaW9uKGVycm9yX2NvZGUq
IF9fZWMpOwotCi0gIF9MSUJDUFBfRlVOQ19WSVMKLSAgdm9pZCBfX2FkdmFuY2UoZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpOwotCi0gIF9MSUJDUFBfRlVOQ19WSVMKLSAgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIp
OwotCi0gIF9MSUJDUFBfRlVOQ19WSVMKLSAgdm9pZCBfX3BvcChlcnJvcl9jb2RlKiBfX2VjID0g
bnVsbHB0cik7Ci0KLSAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJv
b2wKLSAgb3BlcmF0b3I9PShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiwKLSAg
ICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQ7
Ci0KLSAgc3RydWN0IF9fc2hhcmVkX2ltcDsKLSAgc2hhcmVkX3B0cjxfX3NoYXJlZF9pbXA+IF9f
aW1wXzsKLSAgYm9vbCBfX3JlY187Ci19OyAvLyBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yCi0KLWlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKLW9wZXJhdG9y
PT0oY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCi0gICAgICAgICAg
IGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4Y2VwdCB7Ci0g
IHJldHVybiBfX2xocy5fX2ltcF8gPT0gX19yaHMuX19pbXBfOwotfQotCi1fTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3ImIF9fbGhzLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgewotICByZXR1cm4gIShf
X2xocyA9PSBfX3Jocyk7Ci19Ci0vLyBlbmFibGUgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
ciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cwotaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgotYmVnaW4ocmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvciBfX2l0ZXIpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIF9faXRlcjsKLX0KLQot
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcgotZW5kKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdCB7
Ci0gIHJldHVybiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCk7Ci19Ci0KLV9MSUJDUFBf
RU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCi0KLSNlbmRpZiAvLyAhX0xJQkNQUF9DWFgwM19MQU5H
Ci0KLV9MSUJDUFBfUE9QX01BQ1JPUwotCi0jZW5kaWYgLy8gX0xJQkNQUF9GSUxFU1lTVEVNCisj
ZXJyb3IgIk1pc3Npbmcgc3VwcG9ydCBmb3Igc3RkOjpmaWxlc3lzdGVtIG9yIHN0ZDo6ZXhwZXJp
bWVudGFsOjpmaWxlc3lzdGVtIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9GaWxlU3lzdGVtQ29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVt
Q29jb2EubW0KaW5kZXggMWNjZTE3ZGM1OWUyMzNjNmE1ODAwMWUxYjZjOTA4ZTg0NWE3YzkwNi4u
Yzg1MzdlYTE3M2U5OWJhYmRlN2Y3OGM5ZDNjZGM4M2MxZTNhMzVjZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L2NvY29hL0ZpbGVTeXN0ZW1Db2NvYS5tbQpAQCAtMTI2LDI5ICsxMjYsNiBAQCBTdHJpbmcgb3Bl
blRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYg
cGxhdGZvcm1GaWxlSAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBvcmFyeUZpbGVQ
YXRoLmRhdGEoKSk7CiB9CiAKLWJvb2wgbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBj
b25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgLy8gT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVz
LgotICAgIGF1dG8gbWFuYWdlciA9IGFkb3B0TlMoW1tOU0ZpbGVNYW5hZ2VyIGFsbG9jXSBpbml0
XSk7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXVEZXZWJGaWxlTWFuYWdlckRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgW21hbmFnZXIgc2V0RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0
KCldOwotCi0gICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgYm9vbCBzdWNjZXNzID0gW21h
bmFnZXIgbW92ZUl0ZW1BdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOm9sZFBhdGhdIHRvVVJM
OltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6bmV3UGF0aF0gZXJyb3I6JmVycm9yXTsKLSAgICBpZiAo
IXN1Y2Nlc3MpCi0gICAgICAgIE5TTG9nKEAiRXJyb3IgaW4gbW92ZUZpbGU6ICVAIiwgZXJyb3Ip
OwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIGdldFZvbHVtZUZyZWVTcGFjZShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0gICAgTlNEaWN0aW9uYXJ5
ICpmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25hcnkgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkZpbGVTeXN0ZW1Gb3JQYXRoOihOU1N0cmluZyAqKXBhdGgg
ZXJyb3I6TlVMTF07Ci0gICAgaWYgKCFmaWxlU3lzdGVtQXR0cmlidXRlc0RpY3Rpb25hcnkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmVlU3BhY2UgPSBbW2ZpbGVTeXN0ZW1BdHRyaWJ1
dGVzRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNGaWxlU3lzdGVtRnJlZVNpemVdIHVuc2lnbmVk
TG9uZ0xvbmdWYWx1ZV07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIE5TU3RyaW5nICpjcmVhdGVU
ZW1wb3JhcnlEaXJlY3RvcnkoTlNTdHJpbmcgKmRpcmVjdG9yeVByZWZpeCkKIHsKICAgICBOU1N0
cmluZyAqdGVtcERpcmVjdG9yeSA9IE5TVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CkBAIC0xNzgsMTEg
KzE1NSw2IEBAIE5TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoTlNTdHJpbmcgKmRp
cmVjdG9yeVByZWZpeCkKICAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGguZGF0YSgpIGxlbmd0aDps
ZW5ndGhdOwogfQogCi1ib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCkKLXsKLSAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1v
dmVJdGVtQXRQYXRoOnBhdGggZXJyb3I6bmlsXTsKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiBib29sIGlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCmluZGV4IDY4N2ZhMTBjMjY3
NTM2YzA1OGU3OTI0ZGJlY2I5M2E3MTI0OGY4OTAuLjYzZDVkYWYxYTk5NGZmNzIwY2M5NDMwM2Mx
ZjNjNTJiYTQ0ZTQwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBA
IC0xMTgsMjQgKzExOCw2IEBAIFN0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiAjZW5kaWYKIH0KIAotYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OwotICAgIHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfZmlsZV90ZXN0
KGZpbGVuYW1lLmRhdGEoKSwgR19GSUxFX1RFU1RfRVhJU1RTKSA6IGZhbHNlOwotfQotCi1ib29s
IGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgcmV0dXJuIHZhbGlkUmVwcmVzZW50
YXRpb24oZmlsZW5hbWUpID8gZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgpKSAhPSAtMSA6IGZhbHNl
OwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsK
LSAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAg
IHJldHVybiB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfcm1kaXIoZmlsZW5hbWUu
ZGF0YSgpKSAhPSAtMSA6IGZhbHNlOwotfQotCiBzdGF0aWMgYm9vbCBnZXRGaWxlU3RhdChjb25z
dCBTdHJpbmcmIHBhdGgsIEdTdGF0QnVmKiBzdGF0QnVmZmVyKQogewogICAgIGF1dG8gZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0xNTQsMTYgKzEzNiw2IEBA
IHN0YXRpYyBib29sIGdldEZpbGVMU3RhdChjb25zdCBTdHJpbmcmIHBhdGgsIEdTdGF0QnVmKiBz
dGF0QnVmZmVyKQogICAgIHJldHVybiBnX2xzdGF0KGZpbGVuYW1lLmRhdGEoKSwgc3RhdEJ1ZmZl
cikgIT0gLTE7CiB9CiAKLWJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
IGxvbmcmIHJlc3VsdFNpemUpCi17Ci0gICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKLSAgICBpZiAo
IWdldEZpbGVTdGF0KHBhdGgsICZzdGF0UmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxv
bmcmIHJlc3VsdFNpemUpCiB7CiAgICAgR1JlZlB0cjxHRmlsZUluZm8+IGluZm8gPSBhZG9wdEdS
ZWYoZ19maWxlX2lvX3N0cmVhbV9xdWVyeV9pbmZvKGhhbmRsZSwgR19GSUxFX0FUVFJJQlVURV9T
VEFOREFSRF9TSVpFLCBudWxscHRyLCBudWxscHRyKSk7CkBAIC0yNDMsMzAgKzIxNSwxMSBAQCBT
dHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhTdHJpbmdWaWV3IHBhdGgsIGNvbnN0IFZl
Y3RvcjxTdHJpbmdWaWV3PiYgY29tcAogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9
CiAKLWJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBh
dXRvIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIHJldHVy
biB2YWxpZFJlcHJlc2VudGF0aW9uKGZpbGVuYW1lKSA/IGdfbWtkaXJfd2l0aF9wYXJlbnRzKGZp
bGVuYW1lLmRhdGEoKSwgU19JUldYVSkgIT0gLTEgOiBmYWxzZTsKLX0KLQogU3RyaW5nIGhvbWVE
aXJlY3RvcnlQYXRoKCkKIHsKICAgICByZXR1cm4gc3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihnX2dldF9ob21lX2RpcigpKTsKIH0KIAotYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmso
Y29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgp
Ci17Ci0gICAgQ1N0cmluZyB0YXJnZXRQYXRoRlNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24odGFyZ2V0UGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKHRhcmdldFBhdGhG
U1JlcCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgc3ltYm9saWNMaW5r
UGF0aEZTUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN5bWJvbGljTGlua1BhdGgpOwot
ICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihzeW1ib2xpY0xpbmtQYXRoRlNSZXApKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXN5bWxpbmsodGFyZ2V0UGF0aEZTUmVw
LmRhdGEoKSwgc3ltYm9saWNMaW5rUGF0aEZTUmVwLmRhdGEoKSk7Ci19Ci0KIFN0cmluZyBwYXRo
R2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGF1dG8gZmlsZW5hbWUgPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CkBAIC0yNzcsMjEgKzIzMCw2IEBAIFN0cmlu
ZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KGJhc2VOYW1lLmdldCgpKTsKIH0KIAotYm9vbCBnZXRWb2x1bWVGcmVlU3BhY2Uo
Y29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCYgZnJlZVNwYWNlKQotewotICAgIGF1dG8gZmls
ZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJl
cHJlc2VudGF0aW9uKGZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1l
LmRhdGEoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihn
X2ZpbGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVf
RklMRVNZU1RFTV9GUkVFLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgaWYgKCFmaWxlSW5mbykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZnJlZVNwYWNlID0gZ19maWxlX2luZm9fZ2V0
X2F0dHJpYnV0ZV91aW50NjQoZmlsZUluZm8uZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklMRVNZ
U1RFTV9GUkVFKTsKLSAgICByZXR1cm4gISFmcmVlU3BhY2U7Ci19Ci0KIFN0cmluZyBkaXJlY3Rv
cnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwpAQCAtNDI4LDYyICszNjYsNiBAQCBpbnQgcmVhZEZy
b21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
CiAgICAgcmV0dXJuIC0xOwogfQogCi1ib29sIG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0
aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQotewotICAgIGF1dG8gb2xkRmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ob2xkUGF0aCk7Ci0gICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0
aW9uKG9sZEZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBuZXdG
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKLSAgICBpZiAoIXZh
bGlkUmVwcmVzZW50YXRpb24obmV3RmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHUmVmUHRyPEdGaWxlPiBvbGRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgob2xkRmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gbmV3RmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG5ld0ZpbGVuYW1lLmRhdGEoKSkpOwotCi0gICAg
cmV0dXJuIGdfZmlsZV9tb3ZlKG9sZEZpbGUuZ2V0KCksIG5ld0ZpbGUuZ2V0KCksIEdfRklMRV9D
T1BZX09WRVJXUklURSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci19Ci0K
LWJvb2wgaGFyZExpbmsoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGlu
YXRpb24pCi17Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gQ3JlYXRlSGFyZExpbmsoZGVz
dGluYXRpb24ud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIHNvdXJjZS53aWRlQ2hhcmFjdGVycygp
LmRhdGEoKSwgbnVsbHB0cik7Ci0jZWxzZQotICAgIGF1dG8gc291cmNlRmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBpZiAoIXZhbGlkUmVwcmVzZW50YXRp
b24oc291cmNlRmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRl
c3RpbmF0aW9uRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24p
OwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbkZpbGVuYW1lKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFsaW5rKHNvdXJjZUZpbGVuYW1lLmRh
dGEoKSwgZGVzdGluYXRpb25GaWxlbmFtZS5kYXRhKCkpOwotI2VuZGlmCi19Ci0KLWJvb2wgaGFy
ZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3Rp
bmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3JtIGEgY29w
eSBpbnN0ZWFkLgotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuICEhOjpDb3B5RmlsZShzb3Vy
Y2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRlc3RpbmF0aW9uLndpZGVDaGFyYWN0ZXJzKCku
ZGF0YSgpLCBUUlVFKTsKLSNlbHNlCi0gICAgYXV0byBzb3VyY2VGaWxlbmFtZSA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghdmFsaWRSZXByZXNlbnRhdGlvbihz
b3VyY2VGaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGVzdGlu
YXRpb25GaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7Ci0g
ICAgaWYgKCF2YWxpZFJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uRmlsZW5hbWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBzb3VyY2VGaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlRmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gZGVzdGluYXRpb25GaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZGVzdGluYXRpb25GaWxlbmFtZS5kYXRhKCkpKTsKLSAgICByZXR1cm4gZ19maWxlX2NvcHko
c291cmNlRmlsZS5nZXQoKSwgZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ09QWV9OT05F
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKLSNlbmRpZgotfQotCiBPcHRp
b25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNlSWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQogewog
ICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChm
c0ZpbGUuZGF0YSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lz
dGVtUE9TSVguY3BwIGIvU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApp
bmRleCA5OWRjYmYyM2U5MGYwYWUxMzQyMWNhMGJiM2UyOTBjMjk1Y2YxMjk3Li5iZmU4ZmFiYjZi
ZmM2NzBlNGVlNGIzMGQ4YjNjNDhlNDc5ZGM1ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Bvc2l4L0Zp
bGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTQ5LDM2ICs0OSw2IEBAIG5hbWVzcGFjZSBXVEYgewogCiBu
YW1lc3BhY2UgRmlsZVN5c3RlbUltcGwgewogCi1ib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5n
JiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwot
Ci0gICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBhY2Nlc3MoZnNSZXAuZGF0YSgpLCBGX09L
KSAhPSAtMTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAg
ICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotCi0gICAg
aWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJGaWxlIGZhaWxlZCB0byBkZWxldGUuIEZhaWxlZCB0byBnZXQgZmlsZXN5c3Rl
bSByZXByZXNlbnRhdGlvbiB0byBjcmVhdGUgQ1N0cmluZyBmcm9tIGNmU3RyaW5nIG9yIGZpbGVz
eXN0ZW0gcmVwcmVzZW50YXRpb24gaXMgYSBudWxsIHZhbHVlIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyB1bmxpbmsoLi4uKSByZXR1cm5zIDAgb24gc3VjY2Vzc2Z1
bCBkZWxldGlvbiBvZiB0aGUgcGF0aCBhbmQgbm9uLXplcm8gaW4gYW55IG90aGVyIGNhc2UgKGlu
Y2x1ZGluZyBpbnZhbGlkIHBlcm1pc3Npb25zIG9yIG5vbi1leGlzdGVudCBmaWxlKQotICAgIGJv
b2wgdW5saW5rZWQgPSAhdW5saW5rKGZzUmVwLmRhdGEoKSk7Ci0gICAgaWYgKCF1bmxpbmtlZCAm
JiBlcnJubyAhPSBFTk9FTlQpCi0gICAgICAgIExPR19FUlJPUigiRmlsZSBmYWlsZWQgdG8gZGVs
ZXRlLiBFcnJvciBtZXNzYWdlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0KLSAgICByZXR1cm4g
dW5saW5rZWQ7Ci19Ci0KIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiBwZXJtaXNzaW9u
LCBib29sIGZhaWxJZkZpbGVFeGlzdHMpCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE4NiwzNSArMTU2LDYgQEAgYm9vbCB1bmxvY2tG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUpCiB9CiAjZW5kaWYKIAotI2lmICFQTEFURk9S
TShNQUMpCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsK
LSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotCi0g
ICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIHJtZGlyKC4uLikgcmV0dXJucyAwIG9uIHN1Y2Nlc3Nm
dWwgZGVsZXRpb24gb2YgdGhlIHBhdGggYW5kIG5vbi16ZXJvIGluIGFueSBvdGhlciBjYXNlIChp
bmNsdWRpbmcgaW52YWxpZCBwZXJtaXNzaW9ucyBvciBub24tZXhpc3RlbnQgZmlsZSkKLSAgICBy
ZXR1cm4gIXJtZGlyKGZzUmVwLmRhdGEoKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBnZXRGaWxlU2l6
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0KQotewotICAgIENTdHJpbmcg
ZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZzUmVw
LmRhdGEoKSB8fCBmc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgc3RydWN0IHN0YXQgZmlsZUluZm87Ci0KLSAgICBpZiAoc3RhdChmc1JlcC5kYXRh
KCksICZmaWxlSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJlc3VsdCA9IGZp
bGVJbmZvLnN0X3NpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgZ2V0RmlsZVNpemUo
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nJiByZXN1bHQpCiB7CiAgICAgc3Ry
dWN0IHN0YXQgZmlsZUluZm87CkBAIC0zMDAsMTkgKzI0MSw2IEBAIE9wdGlvbmFsPEZpbGVNZXRh
ZGF0YT4gZmlsZU1ldGFkYXRhRm9sbG93aW5nU3ltbGlua3MoY29uc3QgU3RyaW5nJiBwYXRoKQog
ICAgIHJldHVybiBmaWxlTWV0YWRhdGFVc2luZ0Z1bmN0aW9uKHBhdGgsICZzdGF0KTsKIH0KIAot
Ym9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBT
dHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCi17Ci0gICAgQ1N0cmluZyB0YXJnZXRQYXRoRlNSZXAg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGFyZ2V0UGF0aCk7Ci0gICAgaWYgKCF0YXJnZXRQ
YXRoRlNSZXAuZGF0YSgpIHx8IHRhcmdldFBhdGhGU1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBzeW1ib2xpY0xpbmtQYXRoRlNSZXAg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3ltYm9saWNMaW5rUGF0aCk7Ci0gICAgaWYgKCFz
eW1ib2xpY0xpbmtQYXRoRlNSZXAuZGF0YSgpIHx8IHN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRh
KClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFzeW1s
aW5rKHRhcmdldFBhdGhGU1JlcC5kYXRhKCksIHN5bWJvbGljTGlua1BhdGhGU1JlcC5kYXRhKCkp
OwotfQotCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7CiAgICAgaWYgKHBhdGguZW5kc1dpdGgoJy8n
KSkKQEAgLTMyOSwzNSArMjU3LDYgQEAgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHMo
U3RyaW5nVmlldyBwYXRoLCBjb25zdCBWZWN0b3I8U3RyaW5nVmlldz4mIGNvbXAKICAgICByZXR1
cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1ib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmdWxsUGF0aCA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoIWFjY2VzcyhmdWxsUGF0aC5kYXRhKCksIEZfT0sp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNoYXIqIHAgPSBmdWxsUGF0aC5tdXRhYmxl
RGF0YSgpICsgMTsKLSAgICBpbnQgbGVuZ3RoID0gZnVsbFBhdGgubGVuZ3RoKCk7Ci0KLSAgICBp
ZiAocFtsZW5ndGggLSAxXSA9PSAnLycpCi0gICAgICAgIHBbbGVuZ3RoIC0gMV0gPSAnXDAnOwot
ICAgIGZvciAoOyAqcDsgKytwKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnLycpIHsKLSAgICAgICAg
ICAgICpwID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MoZnVsbFBhdGguZGF0YSgpLCBG
X09LKSkgewotICAgICAgICAgICAgICAgIGlmIChta2RpcihmdWxsUGF0aC5kYXRhKCksIFNfSVJX
WFUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAqcCA9ICcvJzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYWNjZXNzKGZ1
bGxQYXRoLmRhdGEoKSwgRl9PSykpIHsKLSAgICAgICAgaWYgKG1rZGlyKGZ1bGxQYXRoLmRhdGEo
KSwgU19JUldYVSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRo
KQogewogICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcvJykgKyAx
KTsKQEAgLTQxOSwyOSArMzE4LDYgQEAgQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
Y29uc3QgU3RyaW5nJiBwYXRoKQogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi1ib29s
IG1vdmVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQot
ewotICAgIGF1dG8gb2xkRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ob2xkUGF0
aCk7Ci0gICAgaWYgKG9sZEZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIG5ld0ZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG5ld1Bh
dGgpOwotICAgIGlmIChuZXdGaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHJlbmFtZShvbGRGaWxlbmFtZS5kYXRhKCksIG5ld0ZpbGVuYW1lLmRh
dGEoKSkgIT0gLTE7Ci19Ci0KLWJvb2wgZ2V0Vm9sdW1lRnJlZVNwYWNlKGNvbnN0IFN0cmluZyYg
cGF0aCwgdWludDY0X3QmIGZyZWVTcGFjZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdHZmcyBmaWxlU3lz
dGVtU3RhdDsKLSAgICBpZiAoIXN0YXR2ZnMoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSwgJmZpbGVTeXN0ZW1TdGF0KSkgewotICAgICAgICBmcmVlU3BhY2UgPSBmaWxlU3lz
dGVtU3RhdC5mX2JhdmFpbCAqIGZpbGVTeXN0ZW1TdGF0LmZfZnJzaXplOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBTdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxl
LCBjb25zdCBTdHJpbmcmIHN1ZmZpeCkKIHsKICAgICAvLyBGSVhNRTogU3VmZml4IGlzIG5vdCBz
dXBwb3J0ZWQsIGJ1dCBPSyBmb3Igbm93IHNpbmNlIHRoZSBjb2RlIHVzaW5nIGl0IGlzIG1hY09T
LXBvcnQtb25seS4KQEAgLTQ2OCw1MyArMzQ0LDYgQEAgZW5kOgogfQogI2VuZGlmIC8vICFQTEFU
Rk9STShDT0NPQSkKIAotYm9vbCBoYXJkTGluayhjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3Qg
U3RyaW5nJiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCBkZXN0
aW5hdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZnNT
b3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc291cmNlKTsKLSAgICBpZiAoIWZzU291
cmNlLmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc0Rlc3RpbmF0
aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIWZz
RGVzdGluYXRpb24uZGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
IWxpbmsoZnNTb3VyY2UuZGF0YSgpLCBmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7Ci19Ci0KLWJvb2wg
aGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRl
c3RpbmF0aW9uKQotewotICAgIGlmIChoYXJkTGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3JtIGEg
Y29weSBpbnN0ZWFkLgotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8IGRlc3RpbmF0aW9uLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmc1NvdXJjZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOwotICAgIGlmICghZnNTb3VyY2UuZGF0YSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZzRGVzdGluYXRpb24gPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOwotICAgIGlmICghZnNEZXN0aW5hdGlv
bi5kYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gaGFuZGxlID0gb3Bl
bihmc0Rlc3RpbmF0aW9uLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2
KTsKLSAgICBpZiAoaGFuZGxlID09IC0xKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBi
b29sIGFwcGVuZFJlc3VsdCA9IGFwcGVuZEZpbGVDb250ZW50c1RvRmlsZUhhbmRsZShzb3VyY2Us
IGhhbmRsZSk7Ci0gICAgY2xvc2UoaGFuZGxlKTsKLQotICAgIC8vIElmIHRoZSBjb3B5IGZhaWxl
ZCwgZGVsZXRlIHRoZSB1bnVzYWJsZSBmaWxlLgotICAgIGlmICghYXBwZW5kUmVzdWx0KQotICAg
ICAgICB1bmxpbmsoZnNEZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGFwcGVuZFJl
c3VsdDsKLX0KLQogT3B0aW9uYWw8aW50MzJfdD4gZ2V0RmlsZURldmljZUlkKGNvbnN0IENTdHJp
bmcmIGZzRmlsZSkKIHsKICAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAppbmRleCBhMDNmOGE0NjQ0ZWRiOTA3ODFmZTQzOWFmNmMwMzc5ZTVh
MTJhN2EwLi5mZDU5ZjE5MDNlNmUxZmU4NGQxNThkNTc1YTk2MjllYWI5MDBjOWQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0xMDUsMTUgKzEwNSw2IEBAIHN0YXRpYyB2
b2lkIGdldEZpbGVNb2RpZmljYXRpb25UaW1lRnJvbUZpbmREYXRhKGNvbnN0IFdJTjMyX0ZJTkRf
REFUQVcmIGZpbmREYXRhCiAgICAgdGltZSA9IGZpbGVUaW1lLlF1YWRQYXJ0IC8gMTAwMDAwMDAg
LSBrU2Vjb25kc0Zyb21GaWxlVGltZVRvVGltZXQ7CiB9CiAKLWJvb2wgZ2V0RmlsZVNpemUoY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHNpemUpCi17Ci0gICAgV0lOMzJfRklORF9EQVRB
VyBmaW5kRGF0YTsKLSAgICBpZiAoIWdldEZpbmREYXRhKHBhdGgsIGZpbmREYXRhKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGdldEZpbGVTaXplRnJvbUZpbmREYXRhKGZp
bmREYXRhLCBzaXplKTsKLX0KLQogYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUg
ZmlsZUhhbmRsZSwgbG9uZyBsb25nJiBzaXplKQogewogICAgIEJZX0hBTkRMRV9GSUxFX0lORk9S
TUFUSU9OIGZpbGVJbmZvcm1hdGlvbjsKQEAgLTIyMCwzNiArMjExLDYgQEAgT3B0aW9uYWw8Rmls
ZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGFGb2xsb3dpbmdTeW1saW5rcyhjb25zdCBTdHJpbmcmIHBh
dGgpCiAgICAgcmV0dXJuIGZpbmREYXRhVG9GaWxlTWV0YWRhdGEoZmluZERhdGEpOwogfQogCi1i
b29sIGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0
cmluZyYgc3ltYm9saWNMaW5rUGF0aCkKLXsKLSAgICByZXR1cm4gOjpDcmVhdGVTeW1ib2xpY0xp
bmtXKHN5bWJvbGljTGlua1BhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIHRhcmdldFBhdGgu
d2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIDApOwotfQotCi1ib29sIGZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZERhdGE7Ci0gICAgcmV0
dXJuIGdldEZpbmREYXRhKHBhdGgsIGZpbmREYXRhKTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIHJl
dHVybiAhIURlbGV0ZUZpbGVXKGZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpKTsKLX0K
LQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAg
U3RyaW5nIGZpbGVuYW1lID0gcGF0aDsKLSAgICByZXR1cm4gISFSZW1vdmVEaXJlY3RvcnlXKGZp
bGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpKTsKLX0KLQotYm9vbCBtb3ZlRmlsZShjb25z
dCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICBTdHJpbmcg
b2xkRmlsZW5hbWUgPSBvbGRQYXRoOwotICAgIFN0cmluZyBuZXdGaWxlbmFtZSA9IG5ld1BhdGg7
Ci0gICAgcmV0dXJuICEhOjpNb3ZlRmlsZUV4KG9sZEZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCku
ZGF0YSgpLCBuZXdGaWxlbmFtZS53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgTU9WRUZJTEVfQ09Q
WV9BTExPV0VEIHwgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORyk7Ci19Ci0KIFN0cmluZyBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNv
bXBvbmVudCkKIHsKICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihNQVhfUEFUSCk7CkBAIC0yOTEs
MTkgKzI1Miw2IEBAIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIAogI2VuZGlmIC8vICFVU0UoQ0YpCiAKLWJvb2wgbWFrZUFsbERpcmVjdG9yaWVz
KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRoOwotICAg
IGlmIChTSENyZWF0ZURpcmVjdG9yeUV4KG51bGxwdHIsIGZ1bGxQYXRoLndpZGVDaGFyYWN0ZXJz
KCkuZGF0YSgpLCBudWxscHRyKSAhPSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIERXT1JEIGVy
cm9yID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBFUlJPUl9GSUxFX0VY
SVNUUyAmJiBlcnJvciAhPSBFUlJPUl9BTFJFQURZX0VYSVNUUykgewotICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHBhdGggJXMiLCBwYXRoLmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKIHsKICAgICByZXR1cm4gIiI7
CkBAIC01MTQsMjAgKzQ2Miw2IEBAIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihieXRlc1JlYWQpOwogfQogCi1ib29sIGhhcmRMaW5rKGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBDcmVhdGVIYXJkTGlu
ayhkZXN0aW5hdGlvbi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgc291cmNlLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLCBudWxscHRyKTsKLX0KLQotYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYg
KGhhcmRMaW5rKHNvdXJjZSwgZGVzdGluYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCi0gICAgcmV0
dXJuICEhOjpDb3B5RmlsZShzb3VyY2Uud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIGRlc3RpbmF0
aW9uLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBUUlVFKTsKLX0KLQogU3RyaW5nIGxvY2FsVXNl
clNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZFN0b3JhZ2VE
aXJlY3RvcnkoQ1NJRExfTE9DQUxfQVBQREFUQSk7CkBAIC01NTcsMTYgKzQ5MSw2IEBAIFZlY3Rv
cjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0
cmluZyYgZmlsdGVyKQogICAgIHJldHVybiBlbnRyaWVzOwogfQogCi1ib29sIGdldFZvbHVtZUZy
ZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90JiBmcmVlU3BhY2UpCi17Ci0gICAg
VUxBUkdFX0lOVEVHRVIgZnJlZUJ5dGVzQXZhaWxhYmxlVG9DYWxsZXI7Ci0gICAgaWYgKCFHZXRE
aXNrRnJlZVNwYWNlRXhXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmcmVlQnl0ZXNB
dmFpbGFibGVUb0NhbGxlciwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGZyZWVTcGFjZSA9IGZyZWVCeXRlc0F2YWlsYWJsZVRvQ2FsbGVyLlF1YWRQYXJ0
OwotICAgIHJldHVybiB0cnVlOwotfQotCiBPcHRpb25hbDxpbnQzMl90PiBnZXRGaWxlRGV2aWNl
SWQoY29uc3QgQ1N0cmluZyYgZnNGaWxlKQogewogICAgIGF1dG8gaGFuZGxlID0gb3BlbkZpbGUo
ZnNGaWxlLmRhdGEoKSwgRmlsZU9wZW5Nb2RlOjpSZWFkKTsKQEAgLTU5NiwyMSArNTIwLDYgQEAg
U3RyaW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgfSk7CiB9CiAKLWJvb2wgZGVs
ZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQotewotICAg
IFNIRklMRU9QU1RSVUNUIGRlbGV0ZU9wZXJhdGlvbiA9IHsKLSAgICAgICAgbnVsbHB0ciwKLSAg
ICAgICAgRk9fREVMRVRFLAotICAgICAgICBkaXJlY3RvcnlQYXRoLndpZGVDaGFyYWN0ZXJzKCku
ZGF0YSgpLAotICAgICAgICBMIiIsCi0gICAgICAgIEZPRl9OT0NPTkZJUk1BVElPTiB8IEZPRl9O
T0VSUk9SVUkgfCBGT0ZfU0lMRU5ULAotICAgICAgICBmYWxzZSwKLSAgICAgICAgbnVsbHB0ciwK
LSAgICAgICAgTCIiCi0gICAgfTsKLSAgICByZXR1cm4gIVNIRmlsZU9wZXJhdGlvbigmZGVsZXRl
T3BlcmF0aW9uKTsKLX0KLQogYm9vbCB1bm1hcFZpZXdPZkZpbGUodm9pZCogYnVmZmVyLCBzaXpl
X3QpCiB7CiAgICAgcmV0dXJuIFVubWFwVmlld09mRmlsZShidWZmZXIpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ4YTM5MjI5MzUyYWNjZWIz
ZWQ0MWM4ODQyNWIzMDdjM2IwYTZkMjQuLmRjNjQ5OGVjYzRkMzA0NDMwN2Q1Y2YxMmUxMjU4Yjk0
YzAyZjAyM2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMS0wNC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgorCisgICAgICAgIFN0YXJ0IGxldmVyYWdpbmcgc3RkOjpmaWxlc3lzdGVtIGluIFdU
Rjo6RmlsZVN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI1MjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAg
ICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UgZm9yIHRoZSBGaWxlU3lzdGVtIEFQSSB0aGF0IHdhcyBt
b2RpZmllZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpbGVTeXN0ZW0u
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBGaWxlUGF0
aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVtVGVzdDo6dGVtcEZp
bGVTeW1saW5rUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVt
VGVzdDo6dGVtcEVtcHR5Rm9sZGVyUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpGaWxlU3lzdGVtVGVzdDo6dGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGggY29uc3QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6RmlsZVN5c3RlbVRlc3Q6OnRlbXBFbXB0eUZpbGVQYXRoIGNv
bnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZpbGVTeXN0ZW1UZXN0OjpzcGFjZUNvbnRh
aW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGaWxlU3lzdGVt
VGVzdDo6YmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCBjb25zdCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpGaWxlU3lzdGVtVGVzdDo6cXVvdGVDb250YWluaW5nRmlsZVBhdGggY29uc3QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAyMS0wNC0zMCAgSm9uYXRoYW4gQmVk
YXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjcHldIFN1cHBvcnQg
YXJndW1lbnRzIHRvIFRhc2tQb29sIHNldHVwIGFuZCB0ZWFyZG93bgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRmlsZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNwcAppbmRleCA4ZjY1MWQzZWFlMzQzMjk3NTFh
YzM2MWRkN2UwNjRjYjYzN2UzNzUyLi5hOTljMzFmZGZmYWM2NGJjMDk4NGJiZmMzZjhmZTVjZjlj
MmQxOGM1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lz
dGVtLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaWxlU3lzdGVtLmNw
cApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBXVEY6OmluaXRpYWxp
emVNYWluVGhyZWFkKCk7CiAKLSAgICAgICAgLy8gY3JlYXRlIHRlbXAgZmlsZQorICAgICAgICAv
LyBjcmVhdGUgdGVtcCBmaWxlLgogICAgICAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlOwogICAgICAgICBtX3RlbXBGaWxlUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1w
b3JhcnlGaWxlKCJ0ZW1wVGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lzdGVtOjp3
cml0ZVRvRmlsZShoYW5kbGUsIEZpbGVTeXN0ZW1UZXN0RGF0YSwgc3RybGVuKEZpbGVTeXN0ZW1U
ZXN0RGF0YSkpOwpAQCAtNTIsNiArNTIsMTggQEAgcHVibGljOgogICAgICAgICBtX3RlbXBGaWxl
U3ltbGlua1BhdGggPSAidGVtcFRlc3RGaWxlLXN5bWxpbmsiOwogICAgICAgICBGaWxlU3lzdGVt
OjpjcmVhdGVTeW1ib2xpY0xpbmsobV90ZW1wRmlsZVBhdGgsIG1fdGVtcEZpbGVTeW1saW5rUGF0
aCk7CiAKKyAgICAgICAgLy8gQ3JlYXRlIHRlbXAgZGlyZWN0b3J5LgorICAgICAgICBGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgdGVtcG9yYXJ5RmlsZTsKKyAgICAgICAgbV90ZW1wRW1w
dHlGb2xkZXJQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBFbXB0eUZv
bGRlciIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUodGVt
cG9yYXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlG
b2xkZXJQYXRoKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKG1fdGVt
cEVtcHR5Rm9sZGVyUGF0aCk7CisKKyAgICAgICAgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0
aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wRW1wdHlGb2xkZXItc3ltbGlu
ayIsIHRlbXBvcmFyeUZpbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUodGVtcG9y
YXJ5RmlsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xk
ZXJTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayht
X3RlbXBFbXB0eUZvbGRlclBhdGgsIG1fdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1BhdGgpOworCiAg
ICAgICAgIG1fdGVtcEVtcHR5RmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5Rmls
ZSgidGVtcEVtcHR5VGVzdEZpbGUiLCBoYW5kbGUpOwogICAgICAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUoaGFuZGxlKTsKIApAQCAtNjksMjIgKzgxLDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRmlsZVBhdGgpOwogICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKG1fdGVtcEZpbGVTeW1saW5rUGF0aCk7CisgICAgICAgIEZpbGVT
eXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fdGVtcEVtcHR5Rm9sZGVyUGF0aCk7CisgICAg
ICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aCk7
CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV90ZW1wRW1wdHlGaWxlUGF0aCk7CiAg
ICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aCk7
CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRo
KTsKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3F1b3RlQ29udGFpbmluZ0ZpbGVQ
YXRoKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRlbXBGaWxlUGF0aCgpIHsgcmV0dXJu
IG1fdGVtcEZpbGVQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVN5bWxpbmtQYXRo
KCkgeyByZXR1cm4gbV90ZW1wRmlsZVN5bWxpbmtQYXRoOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0
ZW1wRW1wdHlGaWxlUGF0aCgpIHsgcmV0dXJuIG1fdGVtcEVtcHR5RmlsZVBhdGg7IH0KLSAgICBj
b25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRoKCkgeyByZXR1cm4gbV9zcGFjZUNv
bnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxl
UGF0aCgpIHsgcmV0dXJuIG1fYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aDsgfQotICAgIGNvbnN0IFN0
cmluZyYgcXVvdGVDb250YWluaW5nRmlsZVBhdGgoKSB7IHJldHVybiBtX3F1b3RlQ29udGFpbmlu
Z0ZpbGVQYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZW1wRmlsZVBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3RlbXBGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEZpbGVTeW1saW5r
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEZpbGVTeW1saW5rUGF0aDsgfQorICAgIGNvbnN0
IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVtcHR5
Rm9sZGVyUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGVtcEVtcHR5Rm9sZGVyU3ltbGlua1Bh
dGgoKSBjb25zdCB7IHJldHVybiBtX3RlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoOyB9CisgICAg
Y29uc3QgU3RyaW5nJiB0ZW1wRW1wdHlGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcEVt
cHR5RmlsZVBhdGg7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNwYWNlQ29udGFpbmluZ0ZpbGVQYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0
IFN0cmluZyYgYmFuZ0NvbnRhaW5pbmdGaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFuZ0Nv
bnRhaW5pbmdGaWxlUGF0aDsgfQorICAgIGNvbnN0IFN0cmluZyYgcXVvdGVDb250YWluaW5nRmls
ZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3F1b3RlQ29udGFpbmluZ0ZpbGVQYXRoOyB9CiAKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fdGVtcEZpbGVQYXRoOwogICAgIFN0cmluZyBtX3RlbXBGaWxl
U3ltbGlua1BhdGg7CisgICAgU3RyaW5nIG1fdGVtcEVtcHR5Rm9sZGVyUGF0aDsKKyAgICBTdHJp
bmcgbV90ZW1wRW1wdHlGb2xkZXJTeW1saW5rUGF0aDsKICAgICBTdHJpbmcgbV90ZW1wRW1wdHlG
aWxlUGF0aDsKICAgICBTdHJpbmcgbV9zcGFjZUNvbnRhaW5pbmdGaWxlUGF0aDsKICAgICBTdHJp
bmcgbV9iYW5nQ29udGFpbmluZ0ZpbGVQYXRoOwpAQCAtMTc2LDQgKzE5NCwyNDcgQEAgVEVTVF9G
KEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVOb25FbXB0eURpcmVjdG9yeSkKICAgICBFWFBFQ1RfRkFM
U0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wb3JhcnlUZXN0Rm9sZGVyKSk7CiB9CiAKK1RF
U1RfRihGaWxlU3lzdGVtVGVzdCwgZmlsZUV4aXN0cykKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSkp
OworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1l
eGlzdCJfcykpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBkZWxldGVTeW1saW5rKQor
eworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlu
a1BhdGgoKSkpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0ZW1w
RmlsZVN5bWxpbmtQYXRoKCkpKTsKKworICAgIC8vIFNob3VsZCBoYXZlIGRlbGV0ZWQgdGhlIHN5
bWxpbmsgYnV0IG5vdCB0aGUgdGFyZ2V0IGZpbGUuCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSkpOworfQorCitURVNUX0YoRmls
ZVN5c3RlbVRlc3QsIGRlbGV0ZUZpbGUpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUodGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lz
dGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVt
VGVzdCwgZGVsZXRlRW1wdHlEaXJlY3RvcnkpCit7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGb2xkZXJQ
YXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rv
cnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpKSk7Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwg
bW92ZUZpbGUpCit7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJ0ZW1wRmlsZS1tb3ZlZCIp
OworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhkZXN0aW5hdGlvbikp
OworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06Om1vdmVGaWxlKHRlbXBGaWxlUGF0aCgpLCBk
ZXN0aW5hdGlvbikpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRl
bXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhk
ZXN0aW5hdGlvbikpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjptb3ZlRmlsZSh0ZW1w
RmlsZVBhdGgoKSwgZGVzdGluYXRpb24pKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBt
b3ZlRmlsZU92ZXJ3cml0ZXNEZXN0aW5hdGlvbikKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHRlbXBGaWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRW1wdHlGaWxlUGF0aCgpKSk7CisKKyAgICBsb25nIGxvbmcg
ZmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRl
bXBGaWxlUGF0aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9HVChmaWxlU2l6ZSwgMCk7CisK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRW1wdHlGaWxlUGF0
aCgpLCBmaWxlU2l6ZSkpOworICAgIEVYUEVDVF9UUlVFKCFmaWxlU2l6ZSk7CisKKyAgICBFWFBF
Q1RfVFJVRShGaWxlU3lzdGVtOjptb3ZlRmlsZSh0ZW1wRmlsZVBhdGgoKSwgdGVtcEVtcHR5Rmls
ZVBhdGgoKSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHRlbXBG
aWxlUGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1w
RW1wdHlGaWxlUGF0aCgpKSk7CisKKyAgICBmaWxlU2l6ZSA9IDA7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEVtcHR5RmlsZVBhdGgoKSwgZmlsZVNpemUpKTsK
KyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3Qs
IGdldEZpbGVTaXplKQoreworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
dGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHRlbXBFbXB0eUZpbGVQYXRoKCkpKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7Cisg
ICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKCksIGZp
bGVTaXplKSk7CisgICAgRVhQRUNUX0dUKGZpbGVTaXplLCAwKTsKKworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHRlbXBFbXB0eUZpbGVQYXRoKCksIGZpbGVTaXplKSk7
CisgICAgRVhQRUNUX1RSVUUoIWZpbGVTaXplKTsKKworICAgIGZpbGVTaXplID0gMDsKKyAgICBT
dHJpbmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3QiX3MpOworICAg
IEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShmaWxlVGhhdERvZXNOb3RFeGlz
dCwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfVFJVRSghZmlsZVNpemUpOworfQorCitURVNUX0Yo
RmlsZVN5c3RlbVRlc3QsIGZpbGVJc0RpcmVjdG9yeSkKK3sKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCBGaWxlU3lzdGVt
OjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksIEZpbGVTeXN0ZW06
OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgYXV0byBmb2xkZXJTeW1s
aW5rTWV0YWRhdGEgPSBGaWxlU3lzdGVtOjpmaWxlTWV0YWRhdGEodGVtcEVtcHR5Rm9sZGVyU3lt
bGlua1BhdGgoKSk7CisgICAgRVhQRUNUX1RSVUUoISFmb2xkZXJTeW1saW5rTWV0YWRhdGEpOwor
ICAgIEVYUEVDVF9FUShmb2xkZXJTeW1saW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6
VHlwZTo6U3ltYm9saWNMaW5rKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlz
RGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6
ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclN5bWxpbmtQYXRoKCksIEZpbGVTeXN0ZW06
OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgRVhQRUNUX0ZBTFNFKEZp
bGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeSh0ZW1wRmlsZVBhdGgoKSwgRmlsZVN5c3RlbTo6U2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3Rl
bTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlUGF0aCgpLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzOjpZZXMpKTsKKworICAgIGF1dG8gZmlsZVN5bWxpbmtNZXRhZGF0YSA9
IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCkpOworICAgIEVY
UEVDVF9UUlVFKCEhZmlsZVN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKGZpbGVTeW1s
aW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6U3ltYm9saWNMaW5rKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlU3ltbGlu
a1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBGaWxlU3ltbGlu
a1BhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisK
KyAgICBTdHJpbmcgZmlsZVRoYXREb2VzTm90RXhpc3QgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQodGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3QiX3Mp
OworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZmlsZVRoYXRE
b2VzTm90RXhpc3QsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShmaWxlVGhhdERv
ZXNOb3RFeGlzdCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7
Cit9CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgbWFrZUFsbERpcmVjdG9yaWVzKQoreworICAg
IEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEVtcHR5Rm9sZGVyUGF0aCgp
KSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHRlbXBFbXB0
eUZvbGRlclBhdGgoKSwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8p
KTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXModGVtcEVt
cHR5Rm9sZGVyUGF0aCgpKSk7CisgICAgU3RyaW5nIHN1YkZvbGRlclBhdGggPSBGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKHRlbXBFbXB0eUZvbGRlclBhdGgoKSwgeyAic3Vi
Rm9sZGVyMSIsICJzdWJGb2xkZXIyIiwgInN1YkZvbGRlcjMiIH0pOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN1YkZvbGRlclBhdGgpKTsKKyAgICBFWFBFQ1RfVFJV
RShGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoc3ViRm9sZGVyUGF0aCkpOworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ViRm9sZGVyUGF0aCkpOworICAgIEVY
UEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShzdWJGb2xkZXJQYXRoLCBGaWxl
U3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpOworICAgIEVYUEVDVF9UUlVF
KEZpbGVTeXN0ZW06OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KHRlbXBFbXB0eUZvbGRlclBhdGgo
KSkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN1YkZvbGRlclBh
dGgpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBnZXRWb2x1bWVGcmVlU3BhY2UpCit7
CisgICAgdWludDY0X3QgZnJlZVNwYWNlID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVt
OjpnZXRWb2x1bWVGcmVlU3BhY2UodGVtcEZpbGVQYXRoKCksIGZyZWVTcGFjZSkpOworICAgIEVY
UEVDVF9HVChmcmVlU3BhY2UsIDBVKTsKKworICAgIFN0cmluZyBmaWxlVGhhdERvZXNOb3RFeGlz
dCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQ
YXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06
OmdldFZvbHVtZUZyZWVTcGFjZShmaWxlVGhhdERvZXNOb3RFeGlzdCwgZnJlZVNwYWNlKSk7Cit9
CisKK1RFU1RfRihGaWxlU3lzdGVtVGVzdCwgY3JlYXRlU3ltYm9saWNMaW5rKQoreworICAgIGF1
dG8gc3ltbGlua1BhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQodGVt
cEVtcHR5Rm9sZGVyUGF0aCgpLCAidGVtcEZpbGUtc3ltbGluayIpOworICAgIEVYUEVDVF9GQUxT
RShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUo
RmlsZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKHRlbXBGaWxlUGF0aCgpLCBzeW1saW5rUGF0
aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgp
KTsKKworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRh
KHN5bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7CisgICAg
RVhQRUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1i
b2xpY0xpbmspOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzeW1s
aW5rUGF0aCkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHN5bWxp
bmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0ZW1wRmls
ZVBhdGgoKSkpOworfQorCitURVNUX0YoRmlsZVN5c3RlbVRlc3QsIGNyZWF0ZVN5bWJvbGljTGlu
a0ZvbGRlcikKK3sKKyAgICBhdXRvIHN5bWxpbmtQYXRoID0gdGVtcEVtcHR5Rm9sZGVyU3ltbGlu
a1BhdGgoKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHN5bWxpbmtQ
YXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1Bh
dGgpKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsodGVt
cEVtcHR5Rm9sZGVyUGF0aCgpLCBzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKworICAgIGF1dG8gc3ltbGlua01ldGFk
YXRhID0gRmlsZVN5c3RlbTo6ZmlsZU1ldGFkYXRhKHN5bWxpbmtQYXRoKTsKKyAgICBFWFBFQ1Rf
VFJVRSghIXN5bWxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNUX0VRKHN5bWxpbmtNZXRhZGF0YS0+
dHlwZSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworCisgICAgRVhQRUNUX0ZB
TFNFKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShzeW1saW5rUGF0aCwgRmlsZVN5c3RlbTo6
U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lz
dGVtOjpmaWxlSXNEaXJlY3Rvcnkoc3ltbGlua1BhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3M6OlllcykpOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShzeW1saW5rUGF0aCkpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxl
RXhpc3RzKHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyh0ZW1wRW1wdHlGb2xkZXJQYXRoKCkpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0
LCBjcmVhdGVTeW1ib2xpY0xpbmtGaWxlRG9lc05vdEV4aXN0KQoreworICAgIFN0cmluZyBmaWxl
VGhhdERvZXNOb3RFeGlzdCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0
ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJkb2VzLW5vdC1leGlzdCJfcyk7CisgICAgRVhQRUNUX0ZB
TFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVRoYXREb2VzTm90RXhpc3QpKTsKKworICAg
IGF1dG8gc3ltbGlua1BhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
dGVtcEVtcHR5Rm9sZGVyUGF0aCgpLCAiZG9lcy1ub3QtZXhpc3Qtc3ltbGluayJfcyk7CisgICAg
RVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3ltbGlua1BhdGgpKTsKKyAgICBF
WFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsoZmlsZVRoYXREb2VzTm90
RXhpc3QsIHN5bWxpbmtQYXRoKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoc3ltbGlua1BhdGgpKTsKK30KKworVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBjcmVhdGVI
YXJkTGluaykKK3sKKyAgICBhdXRvIGhhcmRsaW5rUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlGb2xkZXJQYXRoKCksICJ0ZW1wRmlsZS1oYXJkbGlu
ayIpOworICAgIEVYUEVDVF9GQUxTRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0
aCkpOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxl
U3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBF
Q1RfR1QoZmlsZVNpemUsIDApOworCisgICAgRVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6aGFyZExp
bmsodGVtcEZpbGVQYXRoKCksIGhhcmRsaW5rUGF0aCkpOworCisgICAgRVhQRUNUX1RSVUUoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhoYXJkbGlua1BhdGgpKTsKKworICAgIGxvbmcgbG9uZyBsaW5r
RmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGhh
cmRsaW5rUGF0aCwgbGlua0ZpbGVTaXplKSk7CisgICAgRVhQRUNUX0VRKGxpbmtGaWxlU2l6ZSwg
ZmlsZVNpemUpOworCisgICAgYXV0byBoYXJkbGlua01ldGFkYXRhID0gRmlsZVN5c3RlbTo6Zmls
ZU1ldGFkYXRhKGhhcmRsaW5rUGF0aCk7CisgICAgRVhQRUNUX1RSVUUoISFoYXJkbGlua01ldGFk
YXRhKTsKKyAgICBFWFBFQ1RfRVEoaGFyZGxpbmtNZXRhZGF0YS0+dHlwZSwgRmlsZU1ldGFkYXRh
OjpUeXBlOjpGaWxlKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
dGVtcEZpbGVQYXRoKCkpKTsKKyAgICBFWFBFQ1RfRkFMU0UoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyh0ZW1wRmlsZVBhdGgoKSkpOworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsaW5rRmlsZVNpemUgPSAwOworICAgIEVYUEVDVF9U
UlVFKEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGhhcmRsaW5rUGF0aCwgbGlua0ZpbGVTaXplKSk7
CisgICAgRVhQRUNUX0VRKGxpbmtGaWxlU2l6ZSwgZmlsZVNpemUpOworfQorCitURVNUX0YoRmls
ZVN5c3RlbVRlc3QsIGNyZWF0ZUhhcmRMaW5rT3JDb3B5RmlsZSkKK3sKKyAgICBhdXRvIGhhcmRs
aW5rUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCh0ZW1wRW1wdHlG
b2xkZXJQYXRoKCksICJ0ZW1wRmlsZS1oYXJkbGluayIpOworICAgIEVYUEVDVF9GQUxTRShGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkpOworCisgICAgbG9uZyBsb25nIGZpbGVT
aXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZSh0ZW1wRmls
ZVBhdGgoKSwgZmlsZVNpemUpKTsKKyAgICBFWFBFQ1RfR1QoZmlsZVNpemUsIDApOworCisgICAg
RVhQRUNUX1RSVUUoRmlsZVN5c3RlbTo6aGFyZExpbmtPckNvcHlGaWxlKHRlbXBGaWxlUGF0aCgp
LCBoYXJkbGlua1BhdGgpKTsKKworICAgIEVYUEVDVF9UUlVFKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMoaGFyZGxpbmtQYXRoKSk7CisKKyAgICBsb25nIGxvbmcgbGlua0ZpbGVTaXplID0gMDsKKyAg
ICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxpbmtG
aWxlU2l6ZSkpOworICAgIEVYUEVDVF9FUShsaW5rRmlsZVNpemUsIGZpbGVTaXplKTsKKworICAg
IGF1dG8gaGFyZGxpbmtNZXRhZGF0YSA9IEZpbGVTeXN0ZW06OmZpbGVNZXRhZGF0YShoYXJkbGlu
a1BhdGgpOworICAgIEVYUEVDVF9UUlVFKCEhaGFyZGxpbmtNZXRhZGF0YSk7CisgICAgRVhQRUNU
X0VRKGhhcmRsaW5rTWV0YWRhdGEtPnR5cGUsIEZpbGVNZXRhZGF0YTo6VHlwZTo6RmlsZSk7CisK
KyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHRlbXBGaWxlUGF0aCgpKSk7
CisgICAgRVhQRUNUX0ZBTFNFKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModGVtcEZpbGVQYXRoKCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGhhcmRsaW5rUGF0aCkp
OworCisgICAgbGlua0ZpbGVTaXplID0gMDsKKyAgICBFWFBFQ1RfVFJVRShGaWxlU3lzdGVtOjpn
ZXRGaWxlU2l6ZShoYXJkbGlua1BhdGgsIGxpbmtGaWxlU2l6ZSkpOworICAgIEVYUEVDVF9FUShs
aW5rRmlsZVNpemUsIGZpbGVTaXplKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>