<?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>50799</bug_id>
          
          <creation_ts>2010-12-09 19:59:12 -0800</creation_ts>
          <short_desc>Add Memory Sampler to WebKit</short_desc>
          <delta_ts>2011-06-18 12:33:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephanie Lewis">slewis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>slewis</cc>
    
    <cc>s.mathur</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>319887</commentid>
    <comment_count>0</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2010-12-09 19:59:12 -0800</bug_when>
    <thetext>Add a tool for sampling memory use for the webkit process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319896</commentid>
    <comment_count>1</comment_count>
      <attachid>76157</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2010-12-09 20:27:23 -0800</bug_when>
    <thetext>Created attachment 76157
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320161</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-10 08:07:46 -0800</bug_when>
    <thetext>Attachment 76157 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit/ChangeLog&apos;, u&apos;WebKit/WebKit.xcodeproj/project.pbxproj&apos;, u&apos;WebKit/mac/ChangeLog&apos;, u&apos;WebKit/mac/Misc/WebKitMemorySampler.cpp&apos;, u&apos;WebKit/mac/Misc/WebKitMemorySampler.h&apos;, u&apos;WebKit/mac/Misc/WebKitMemorySampler.mac.mm&apos;, u&apos;WebKit/mac/WebView/WebPreferenceKeysPrivate.h&apos;, u&apos;WebKit/mac/WebView/WebPreferences.mm&apos;, u&apos;WebKit/mac/WebView/WebPreferencesPrivate.h&apos;, u&apos;WebKit/mac/WebView/WebView.mm&apos;]&quot; exit_code: 1
WebKit/mac/Misc/WebKitMemorySampler.h:54:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/mac/Misc/WebKitMemorySampler.h:55:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/mac/Misc/WebKitMemorySampler.h:56:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/mac/Misc/WebKitMemorySampler.h:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/mac/Misc/WebKitMemorySampler.cpp:26:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/mac/Misc/WebKitMemorySampler.cpp:27:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/mac/Misc/WebKitMemorySampler.cpp:47:  Missing space before ( in if(  [whitespace/parens] [5]
WebKit/mac/Misc/WebKitMemorySampler.cpp:49:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/mac/Misc/WebKitMemorySampler.cpp:135:  Missing space before ( in if(  [whitespace/parens] [5]
WebKit/mac/Misc/WebKitMemorySampler.cpp:137:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/mac/Misc/WebKitMemorySampler.cpp:138:  Missing space before ( in if(  [whitespace/parens] [5]
WebKit/mac/Misc/WebKitMemorySampler.cpp:140:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/mac/Misc/WebKitMemorySampler.mac.mm:91:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 13 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322316</commentid>
    <comment_count>3</comment_count>
      <attachid>76157</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-12-14 15:57:32 -0800</bug_when>
    <thetext>Comment on attachment 76157
patch

Since you don&apos;t want this setting to persist across launches of the application, I don&apos;t think a preference is the way to go. Instead, the current start/stop state should be stored as a variable, and toggling the setting should send a message to WebKit to start or stop. 

WebKitMemorySampler::shared() should not allocate anything in the case where nothing has been started -- that way, end users aren&apos;t impacted by this developer-only tool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329329</commentid>
    <comment_count>4</comment_count>
      <attachid>77952</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2011-01-04 17:34:30 -0800</bug_when>
    <thetext>Created attachment 77952
reworked patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329337</commentid>
    <comment_count>5</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 17:45:39 -0800</bug_when>
    <thetext>Attachment 77952 did not build on qt:
Build output: http://queues.webkit.org/results/7321429</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329345</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-04 17:56:53 -0800</bug_when>
    <thetext>Attachment 77952 did not build on mac:
Build output: http://queues.webkit.org/results/7301409</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329347</commentid>
    <comment_count>7</comment_count>
      <attachid>77957</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2011-01-04 18:00:31 -0800</bug_when>
    <thetext>Created attachment 77957
fix qt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329357</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 18:19:15 -0800</bug_when>
    <thetext>Attachment 77957 did not build on qt:
Build output: http://queues.webkit.org/results/7213388</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329365</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 18:29:00 -0800</bug_when>
    <thetext>Attachment 77957 did not build on win:
Build output: http://queues.webkit.org/results/7268405</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329369</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 18:31:43 -0800</bug_when>
    <thetext>Attachment 77952 did not build on win:
Build output: http://queues.webkit.org/results/7300389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329372</commentid>
    <comment_count>11</comment_count>
      <attachid>77957</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-04 18:37:31 -0800</bug_when>
    <thetext>Comment on attachment 77957
fix qt

Still failing to build on non-CF platforms. You should either change to using cross-platform time functions, or #ifdef the code for CF platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329378</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-04 19:13:41 -0800</bug_when>
    <thetext>Attachment 77957 did not build on mac:
Build output: http://queues.webkit.org/results/7266413</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329401</commentid>
    <comment_count>13</comment_count>
      <attachid>77965</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2011-01-04 21:06:22 -0800</bug_when>
    <thetext>Created attachment 77965
remove more cf types</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329404</commentid>
    <comment_count>14</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 21:17:38 -0800</bug_when>
    <thetext>Attachment 77965 did not build on qt:
Build output: http://queues.webkit.org/results/7334333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329408</commentid>
    <comment_count>15</comment_count>
      <attachid>77969</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2011-01-04 21:22:32 -0800</bug_when>
    <thetext>Created attachment 77969
fix typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329410</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 21:27:13 -0800</bug_when>
    <thetext>Attachment 77965 did not build on win:
Build output: http://queues.webkit.org/results/7307430</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329417</commentid>
    <comment_count>17</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-04 21:43:27 -0800</bug_when>
    <thetext>Attachment 77969 did not build on win:
Build output: http://queues.webkit.org/results/7335301</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329418</commentid>
    <comment_count>18</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 21:47:26 -0800</bug_when>
    <thetext>Attachment 77969 did not build on qt:
Build output: http://queues.webkit.org/results/7261428</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329434</commentid>
    <comment_count>19</comment_count>
      <attachid>77971</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2011-01-04 23:08:06 -0800</bug_when>
    <thetext>Created attachment 77971
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329441</commentid>
    <comment_count>20</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-04 23:20:07 -0800</bug_when>
    <thetext>Attachment 77971 did not build on qt:
Build output: http://queues.webkit.org/results/7199409</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329456</commentid>
    <comment_count>21</comment_count>
      <attachid>77976</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2011-01-04 23:48:49 -0800</bug_when>
    <thetext>Created attachment 77976
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330040</commentid>
    <comment_count>22</comment_count>
      <attachid>77976</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-05 22:43:00 -0800</bug_when>
    <thetext>Comment on attachment 77976
patch

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

Please make sure to address these comments before landing.

&gt; WebKit2/WebKit2Prefix.h:71
&gt; +#if PLATFORM(MAC)
&gt; +#define ENABLE_MEMORY_SAMPLER 1
&gt; +#endif

I don&apos;t see this #define used anywhere. What&apos;s it for?

&gt; WebKit2/Shared/WebMemorySampler.cpp:34
&gt; +static WebMemorySampler *sharedMemorySampler = 0;

Should be &quot;WebMemorySampler* &quot;.

You can put this static inside WebMemorySampler::shared().

Since statics are implicitly initialized to 0, there&apos;s no need to explicitly assign 0 here.

&gt; WebKit2/Shared/WebMemorySampler.cpp:137
&gt; +    m_separator = String(&quot;\t&quot;);    

You should initialize m_separator in the WebMemorySampler constructor. It&apos;s difficult to reason about data members that are initialized at unpredictable times.

&gt; WebKit2/Shared/WebMemorySampler.cpp:138
&gt; +    String header = String(); 

A simpler way to say this is &quot;String header;&quot;

&gt; WebKit2/Shared/WebMemorySampler.cpp:166
&gt; +    String statString = String(); 

&quot;String statString;&quot;

&gt; WebKit2/UIProcess/WebContext.cpp:208
&gt; +        // way to get name of process from UI side?

What does this comment mean?

&gt; WebKit2/UIProcess/WebContext.cpp:557
&gt; +    

Our style is to exclude braces from one-line if statements.

&gt; WebKit2/UIProcess/WebContext.cpp:580
&gt; +    

Our style is to exclude braces from one-line if statements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330065</commentid>
    <comment_count>23</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2011-01-06 01:26:22 -0800</bug_when>
    <thetext>
&gt; WebKit2/WebKit2Prefix.h:71
&gt; +#if PLATFORM(MAC)
&gt; +#define ENABLE_MEMORY_SAMPLER 1
&gt; +#endif

I don&apos;t see this #define used anywhere. What&apos;s it for?


The memory part of the MemorySampler currently only works on Mac, so I am only adding the files to the mac build.  There are a couple of call sites in WebContext.cpp and WebProcess.cpp that call into those classes and I wrapped those in the #enable.  I should probably wrap the MemorySampler files in the #define as well even though they aren&apos;t even compiled on other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388766</commentid>
    <comment_count>24</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-19 13:55:07 -0700</bug_when>
    <thetext>Thank you for implementing this super useful feature. I may be interested in adding support for the Qt WebKit port on Linux and Symbian in the future. While Linux uses fastMalloc (IIRC), Symbian uses its own RAllocator derived allocator whose code is not in WebKit.org (lives in Qt Core actually). We also don&apos;t use printf on Symbian, but Qt&apos;s qDebug() as the latter writes to the trace channel.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76157</attachid>
            <date>2010-12-09 20:27:23 -0800</date>
            <delta_ts>2011-01-04 17:34:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>MemorySamplerOpenSource.txt</filename>
            <type>text/plain</type>
            <size>32338</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gNzM2NzcpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTAtMTItMDkgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzk5CisgICAgICAgIEFkZCBN
ZW1vcnkgU2FtcGxlciBGaWxlcy4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorCiAyMDEwLTEyLTA3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBYY29kZSBwcm9qZWN0IGZvciBuZXdlciBYY29kZS4K
SW5kZXg6IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDcz
NjU2KQorKysgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcsNiArMTM3LDkgQEAKIAkJN0E4RkYwRDExMDc1MDI0QTAwQTgwQTA4IC8q
IFdlYkluc3BlY3RvclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBOEZGMEQwMTA3NTAyNEEwMEE4MEEwOCAvKiBXZWJJbnNwZWN0b3JQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0U2RkVGMDgwODk4NUE3MjAwQzQ0QzNGIC8qIFdlYlNjcmlwdERlYnVnRGVsZWdhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNkZFRjA1MDg5ODVB
NzIwMEM0NEMzRiAvKiBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U2RkVGMDkwODk4NUE3MjAwQzQ0QzNG
IC8qIFdlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3RTZGRUYwNjA4OTg1QTcyMDBDNDRDM0YgLyogV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZS5tbSAqLzsgfTsKKwkJOTA2RkY2NkIxMjk1RjdCRjAwOTQ1MjA1IC8qIFdl
YktpdE1lbW9yeVNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTA2RkY2NjgxMjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBs
ZXIuY3BwICovOyB9OworCQk5MDZGRjY2QzEyOTVGN0JGMDA5NDUyMDUgLyogV2ViS2l0TWVtb3J5
U2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTA2RkY2NjkxMjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBsZXIuaCAqLzsgfTsK
KwkJOTA2RkY2NkQxMjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBsZXIubWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTA2RkY2NkEx
Mjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBsZXIubWFjLm1tICovOyB9OwogCQk5
MzA0QjMwMDBCMDIzNDE1MDBGNzg1MEQgLyogV2ViSWNvbkRhdGFiYXNlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDRCMkZGMEIwMjM0
MTUwMEY3ODUwRCAvKiBXZWJJY29uRGF0YWJhc2VJbnRlcm5hbC5oICovOyB9OwogCQk5MzE2MzNF
QjBBRURGRjkzMDA2MkI5MkQgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTYzM0VBMEFFREZGOTMwMDYyQjky
RCAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5oICovOyB9OwogCQk5MzE2MzNFRjBBRURGRkFFMDA2
MkI5MkQgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzE2MzNFRTBBRURGRkFFMDA2MkI5MkQgLyogV2ViRnJh
bWVMb2FkZXJDbGllbnQubW0gKi87IH07CkBAIC01OTMsNiArNTk2LDkgQEAKIAkJODQ4REZGODYw
MzY1RkU2QTAwQ0EyQUNBIC8qIFdlYlBsdWdpblZpZXdGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsdWdpblZpZXdGYWN0b3J5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQk4NEFFOTA1RjA2MkRFNkE4MDA3NUJCRjkgLyogV2ViRE9NT3BlcmF0aW9uc1ByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJE
T01PcGVyYXRpb25zUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRDQTVGN0UwNDI2ODVFODAwQ0EyQUNBIC8qIFdlYktp
dEVycm9yc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRFcnJvcnNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk5MDZGRjY2ODEyOTVGN0JGMDA5NDUy
MDUgLyogV2ViS2l0TWVtb3J5U2FtcGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJLaXRNZW1vcnlTYW1wbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTA2RkY2NjkxMjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0TWVtb3J5U2FtcGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MDZGRjY2QTEyOTVGN0JGMDA5NDUyMDUg
LyogV2ViS2l0TWVtb3J5U2FtcGxlci5tYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJLaXRNZW1vcnlTYW1wbGVyLm1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTMwNEIyRkYwQjAyMzQxNTAwRjc4NTBEIC8qIFdlYkljb25EYXRhYmFz
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkljb25EYXRh
YmFzZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMEQwMkJCMDYy
NzVGNjQwMDc2NzAxRSAvKiBXZWJWaWV3SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWV3SW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzMEQwMkJE
MDYyNzVGNzEwMDc2NzAxRSAvKiBXZWJGcmFtZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRnJhbWVJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTkz
MCw2ICs5MzYsOSBAQAogCQkyNTREQzMzNDAxNkUxRDNGMEVDQTE0OUUgLyogTWlzYyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTA2RkY2NjgxMjk1RjdC
RjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBsZXIuY3BwICovLAorCQkJCTkwNkZGNjY5MTI5
NUY3QkYwMDk0NTIwNSAvKiBXZWJLaXRNZW1vcnlTYW1wbGVyLmggKi8sCisJCQkJOTA2RkY2NkEx
Mjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBsZXIubWFjLm1tICovLAogCQkJCUE4
NjRCM0U1MTIzRUQ4M0QwMEMyQTYxMiAvKiBNYWlsUXVpcmtzVXNlclNjcmlwdC5qcyAqLywKIAkJ
CQkxQ0NGRkQxMjBCMUY4MUYyMDAyRUU5MjYgLyogT2xkV2ViQXNzZXJ0aW9ucy5jICovLAogCQkJ
CTVERTkyRkVFMEJENzAxN0UwMDU5QTVGRCAvKiBXZWJBc3NlcnRpb25zLmggKi8sCkBAIC0xNjI1
LDYgKzE2MzQsNyBAQAogCQkJCTU5OEFEOTJBMTIwMUNGM0IwMEFCQUU0RSAvKiBXZWJEZXZpY2VP
cmllbnRhdGlvblByb3ZpZGVyTW9ja0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OThB
REE0NjEyMDIyNzUwMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNFMkExQTQxMjNCMEIzQzAwOUZFMTJBIC8qIFdlYkRhc2hib2Fy
ZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTA2RkY2NkMxMjk1RjdCRjAwOTQ1MjA1IC8q
IFdlYktpdE1lbW9yeVNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTk5Myw2ICsyMDAzLDgg
QEAKIAkJCQk1OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb24u
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBBQkFFNEUgLyogV2ViRGV2
aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0UyQTFB
NTEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJOTA2RkY2NkIxMjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1lbW9yeVNhbXBsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTA2RkY2NkQxMjk1RjdCRjAwOTQ1MjA1IC8qIFdlYktpdE1l
bW9yeVNhbXBsZXIubWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzM2Nzcp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEwLTEyLTA5ICBTdGVwaGFuaWUgTGV3aXMgIDxzbGV3aXNAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDc5OQorICAgICAgICBBZGQgTWVtb3J5IFNhbXBs
ZXIgdG9vbCB0byBXZWJLaXQuICBVc2UgYSBwcmVmZXJlbmNlIHRvIHR1cm4gaXQgb24gb3Igb2Zm
LgorICAgICAgICBDdXJyZW50bHkgb25seSBjb21wbGV0ZSBvbiB0aGUgbWFjLCBidXQgbW9zdCBv
ZiBpdCBpcyB3cml0dGVuIGluIGNyb3NzLXBsYXRmb3JtIHdheSBzbyAKKyAgICAgICAgYXMgdG8g
ZWFzaWx5IGFkZGVkIHRvIG90aGVyIHBsYXRmb3Jtcy4KKyAgICAgICAgVGhpcyB0b29sIGNhbiB0
cmFjazoKKyAgICAgICAgCisgICAgICAgIFdlYkNvcmUKKyAgICAgICAgICAgLSBGYXN0TWFsbG9j
IGFsbG9jYXRpb25zIGJ5dGVzICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAg
ICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAgLSBHYXJiYWdlIGNvbGxlY3RvciBoZWFw
IGJ5dGVzICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAgICAgICAgICAgLSBT
dGFjayBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWl0dGVkIG9ubHkh
KQorICAgICAgICAgICAtIEpJVCBDb2RlIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb21taXR0ZWQgb25seSEpCisgICAgICAgIE1hbGxvYyB6b25lcworICAgICAgICAgICAtIElu
IHVzZSBieXRlcyBmb3IgdGhlIGZvbGxvd2luZyB6b25lczoKKyAgICAgICAgICAgICAgICogRGVm
YXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkK
KyAgICAgICAgICAgICAgICogRGlzcENvbiB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICogUHVyZ2FibGUgem9uZSAgICAg
ICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAgICAgICAgVGFzayBJ
bmZvCisgICAgICAgICAgIC0gUmVzaWRlbnQgc2l6ZSBtZW1vcnkgKFJTSVpFKQorCisgICAgICAg
IERhdGEgY29sbGVjdGVkIGlzIGR1bXBlZCB0byBhIHRlbXBvcmFyeSBmaWxlLgorCisgICAgICAg
ICogTWlzYy9XZWJLaXRNZW1vcnlTYW1wbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXRN
ZW1vcnlTYW1wbGVyOjpzaGFyZWQpOgorICAgICAgICAoV2ViS2l0TWVtb3J5U2FtcGxlcjo6V2Vi
S2l0TWVtb3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXRNZW1vcnlTYW1wbGVyOjpzdGFydCk6
CisgICAgICAgIChXZWJLaXRNZW1vcnlTYW1wbGVyOjpzdG9wKToKKyAgICAgICAgKFdlYktpdE1l
bW9yeVNhbXBsZXI6OmlzUnVubmluZyk6CisgICAgICAgIChXZWJLaXRNZW1vcnlTYW1wbGVyOjpp
bml0aWFsaXplTG9nRmlsZSk6CisgICAgICAgIChXZWJLaXRNZW1vcnlTYW1wbGVyOjpzYW1wbGVU
aW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdE1lbW9yeVNhbXBsZXI6OnN0b3BUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYktpdE1lbW9yeVNhbXBsZXI6OmFwcGVuZEN1cnJlbnRNZW1vcnlVc2Fn
ZVRvRmlsZSk6CisgICAgICAgIChXZWJLaXRNZW1vcnlTYW1wbGVyOjp3ZWJQcmVmZXJlbmNlc0No
YW5nZWQpOgorICAgICAgICAqIE1pc2MvV2ViS2l0TWVtb3J5U2FtcGxlci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBNaXNjL1dlYktpdE1lbW9yeVNhbXBsZXIubWFjLm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbV2ViS2l0TWVtb3J5U2FtcGxlclByZWZzT2JzZXJ2ZXIgcmVnaXN0ZXJXZWJQcmVmZXJlbmNl
c0NoYW5nZWROb3RpZmljYXRpb25dKToKKyAgICAgICAgKCtbV2ViS2l0TWVtb3J5U2FtcGxlclBy
ZWZzT2JzZXJ2ZXIgcmVtb3ZlV2ViUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uXSk6Cisg
ICAgICAgICgrW1dlYktpdE1lbW9yeVNhbXBsZXJQcmVmc09ic2VydmVyIHdlYlByZWZlcmVuY2Vz
Q2hhbmdlZDpdKToKKyAgICAgICAgKFdlYktpdE1lbW9yeVNhbXBsZXI6OnNhbXBsZVN5c3RlbU1h
bGxvYyk6CisgICAgICAgIChXZWJLaXRNZW1vcnlTYW1wbGVyOjpzYW1wbGVQcm9jZXNzQ29tbWl0
dGVkQnl0ZXMpOgorICAgICAgICAoV2ViS2l0TWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdE1lbW9yeVNhbXBsZXI6OnJlZ2lzdGVyV2ViUHJlZmVyZW5jZXNPYnNl
cnZlcnMpOgorICAgICAgICAoV2ViS2l0TWVtb3J5U2FtcGxlcjo6cmVtb3ZlV2ViUHJlZmVyZW5j
ZXNPYnNlcnZlcnMpOgorICAgICAgICAoV2ViS2l0TWVtb3J5U2FtcGxlcjo6aXNTYW1wbGluZ0Vu
YWJsZWQpOgorICAgICAgICAoV2ViS2l0TWVtb3J5U2FtcGxlcjo6c2V0U2FtcGxpbmdFbmFibGVk
KToKKyAgICAgICAgKFdlYktpdE1lbW9yeVNhbXBsZXI6Om1lbW9yeVNhbXBsZXJJbnRlcnZhbCk6
CisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBp
bml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHNldE1lbW9yeVNhbXBsZXJF
bmFibGVkOl0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBtZW1vcnlTYW1wbGVyRW5hYmxl
ZF0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRNZW1vcnlTYW1wbGVySW50ZXJ2YWw6
XSk6CisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIG1lbW9yeVNhbXBsZXJJbnRlcnZhbF0pOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IGluaXRpYWxpemVdKToKKwogMjAx
MC0xMi0wOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAg
IEZpeCBhIGJ1ZyB1bmNvdmVyZWQgYnkgY2xhbmcrKy4KSW5kZXg6IFdlYktpdC9tYWMvTWlzYy9X
ZWJLaXRNZW1vcnlTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2Vi
S2l0TWVtb3J5U2FtcGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvbWFjL01pc2MvV2Vi
S2l0TWVtb3J5U2FtcGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSAiV2ViS2l0TWVtb3J5U2FtcGxlci5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworc3RhdGljIFdlYktpdE1lbW9yeVNhbXBsZXIgKnNoYXJlZE1lbW9yeVNh
bXBsZXIgPSAwOworCitXZWJLaXRNZW1vcnlTYW1wbGVyKiBXZWJLaXRNZW1vcnlTYW1wbGVyOjpz
aGFyZWQoKQoreworICAgIGlmICghc2hhcmVkTWVtb3J5U2FtcGxlcikKKyAgICAgICAgc2hhcmVk
TWVtb3J5U2FtcGxlciA9IG5ldyBXZWJLaXRNZW1vcnlTYW1wbGVyKCk7CisgICAgcmV0dXJuIHNo
YXJlZE1lbW9yeVNhbXBsZXI7Cit9CisKK1dlYktpdE1lbW9yeVNhbXBsZXI6OldlYktpdE1lbW9y
eVNhbXBsZXIoKSAKKyAgICA6IG1fc2FtcGxlVGltZXIodGhpcywgJldlYktpdE1lbW9yeVNhbXBs
ZXI6OnNhbXBsZVRpbWVyRmlyZWQpCisgICAgLCBtX3N0b3BUaW1lcih0aGlzLCAmV2ViS2l0TWVt
b3J5U2FtcGxlcjo6c3RvcFRpbWVyRmlyZWQpCisgICAgLCBtX2lzUnVubmluZyhmYWxzZSkKKyAg
ICAsIG1fcnVubmluZ1RpbWUoMCkKK3sKKyAgICByZWdpc3RlcldlYlByZWZlcmVuY2VzT2JzZXJ2
ZXJzKCk7CisgICAgaWYoaXNTYW1wbGluZ0VuYWJsZWQoKSkgeworICAgICAgICBzdGFydChtZW1v
cnlTYW1wbGVySW50ZXJ2YWwoKSk7ICAKKyAgICB9Cit9CisKK3ZvaWQgV2ViS2l0TWVtb3J5U2Ft
cGxlcjo6c3RhcnQoQ0ZUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwpIAoreworICAgIGlmIChtX2lzUnVu
bmluZykgCisgICAgICAgIHJldHVybjsKKyAgICBpbml0aWFsaXplTG9nRmlsZSgpOworICAgIG1f
c2FtcGxlVGltZXIuc3RhcnRSZXBlYXRpbmcoMSk7CisgICAgcHJpbnRmKCJTdGFydGVkIG1lbW9y
eSBzYW1wbGVyIik7CisgICAgaWYgKGludGVydmFsID4gMCkgeworICAgICAgICBtX3N0b3BUaW1l
ci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOworICAgICAgICBwcmludGYoIiBmb3IgYSBpbnRlcnZh
bCBvZiAlZyBzZWNvbmRzIiwgaW50ZXJ2YWwpOworICAgIH0KKyAgICBwcmludGYoIjsgU2FtcGxl
ciBsb2cgZmlsZSBzdG9yZWQgYXQ6ICVzXG4iLCBtX3NhbXBsZUxvZ0ZpbGVQYXRoLnV0ZjgoKS5k
YXRhKCkpOworICAgIG1fcnVubmluZ1RpbWUgPSBpbnRlcnZhbDsKKyAgICBtX2lzUnVubmluZyA9
IHRydWU7Cit9CisKK3ZvaWQgV2ViS2l0TWVtb3J5U2FtcGxlcjo6c3RvcCgpIAoreworICAgIGlm
ICghbV9pc1J1bm5pbmcpIAorICAgICAgICByZXR1cm47CisgICAgbV9zYW1wbGVUaW1lci5zdG9w
KCk7CisgICAgbV9zYW1wbGVMb2dGaWxlID0gMDsKKyAgICBwcmludGYoIlN0b3BwZWQgbWVtb3J5
IHNhbXBsZXJcbiIpOworICAgIC8vIEZsdXNoIHN0ZG91dCBidWZmZXIgc28gcHl0aG9uIHNjcmlw
dCBjYW4gYmUgZ3VhcmFudGVlZCB0byByZWFkIHVwIHRvIHRoaXMgcG9pbnQuCisgICAgZmZsdXNo
KHN0ZG91dCk7CisgICAgbV9pc1J1bm5pbmcgPSBmYWxzZTsKKyAgICBzZXRTYW1wbGluZ0VuYWJs
ZWQoZmFsc2UpOworfQorCitib29sIFdlYktpdE1lbW9yeVNhbXBsZXI6OmlzUnVubmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faXNSdW5uaW5nOworfQorICAgIAordm9pZCBXZWJLaXRNZW1v
cnlTYW1wbGVyOjppbml0aWFsaXplTG9nRmlsZSgpCit7CisgICAgbV9zYW1wbGVMb2dGaWxlUGF0
aCA9IFN0cmluZygob3BlblRlbXBvcmFyeUZpbGUobV9zYW1wbGVMb2dGaWxlUGF0aC51dGY4KCku
ZGF0YSgpLCBtX3NhbXBsZUxvZ0ZpbGUpKS5kYXRhKCkpOworICAgIG1fc2VwYXJhdG9yID0gU3Ry
aW5nKCJcdCIpOworICAgIAorICAgIFN0cmluZyBoZWFkZXIgPSBTdHJpbmcoKTsgCisgICAgV2Vi
S2l0TWVtb3J5U3RhdGlzdGljcyBzdGF0cyA9IHNhbXBsZVdlYktpdCgpOworICAgIGlmICghc3Rh
dHMua2V5cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0
cy5rZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBoZWFkZXIuYXBwZW5kKG1fc2VwYXJh
dG9yKTsKKyAgICAgICAgICAgIGhlYWRlci5hcHBlbmQoc3RhdHMua2V5c1tpXS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBoZWFkZXIuYXBwZW5kKFN0cmluZygiXG4iKSk7
CisgICAgd3JpdGVUb0ZpbGUobV9zYW1wbGVMb2dGaWxlLCBoZWFkZXIudXRmOCgpLmRhdGEoKSwg
aGVhZGVyLnV0ZjgoKS5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViS2l0TWVtb3J5U2FtcGxlcjo6
c2FtcGxlVGltZXJGaXJlZChUaW1lcjxXZWJLaXRNZW1vcnlTYW1wbGVyPiopCit7CisgICAgYXBw
ZW5kQ3VycmVudE1lbW9yeVVzYWdlVG9GaWxlKG1fc2FtcGxlTG9nRmlsZSk7IAorfQorCit2b2lk
IFdlYktpdE1lbW9yeVNhbXBsZXI6OnN0b3BUaW1lckZpcmVkKFRpbWVyPFdlYktpdE1lbW9yeVNh
bXBsZXI+KikKK3sKKyAgICBpZiAoIW1faXNSdW5uaW5nKQorICAgICAgICByZXR1cm47CisgICAg
cHJpbnRmKCIlZyBzZWNvbmRzIGVsYXBzZWQuIFN0b3BwaW5nIG1lbW9yeSBzYW1wbGVyLi4uXG4i
LCBtX3J1bm5pbmdUaW1lKTsKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgV2ViS2l0TWVtb3J5U2Ft
cGxlcjo6YXBwZW5kQ3VycmVudE1lbW9yeVVzYWdlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYg
ZmlsZSkKK3sKKyAgICAvLyBDb2xsZWN0IHN0YXRpc3RpY3MgZnJvbSBhbGxvY2F0b3JzIGFuZCBn
ZXQgUlNJWkUgbWV0cmljCisgICAgU3RyaW5nIHN0YXRTdHJpbmcgPSBTdHJpbmcoKTsgCisgICAg
V2ViS2l0TWVtb3J5U3RhdGlzdGljcyBtZW1vcnlTdGF0cyA9IHNhbXBsZVdlYktpdCgpOworCisg
ICAgaWYgKCFtZW1vcnlTdGF0cy52YWx1ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRTdHJp
bmcuYXBwZW5kKG1fc2VwYXJhdG9yKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
ZW1vcnlTdGF0cy52YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN0YXRTdHJpbmcu
YXBwZW5kKG1fc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHN0YXRTdHJpbmcuYXBwZW5kKFN0cmlu
Zzo6Zm9ybWF0KCIlbHUiLCBtZW1vcnlTdGF0cy52YWx1ZXNbaV0pKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBzdGF0U3RyaW5nLmFwcGVuZChTdHJpbmcoIlxuIikpOworICAgIHdyaXRlVG9GaWxl
KG1fc2FtcGxlTG9nRmlsZSwgc3RhdFN0cmluZy51dGY4KCkuZGF0YSgpLCBzdGF0U3RyaW5nLnV0
ZjgoKS5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViS2l0TWVtb3J5U2FtcGxlcjo6d2ViUHJlZmVy
ZW5jZXNDaGFuZ2VkKCkKK3sKKyAgICBpZighaXNSdW5uaW5nKCkgYW5kIGlzU2FtcGxpbmdFbmFi
bGVkKCkpIHsKKyAgICAgICAgc3RhcnQobWVtb3J5U2FtcGxlckludGVydmFsKCkpOyAgCisgICAg
fQorICAgIGlmKGlzUnVubmluZygpIGFuZCAhaXNTYW1wbGluZ0VuYWJsZWQoKSkgeworICAgICAg
ICBzdG9wKCk7CisgICAgfQorfQpJbmRleDogV2ViS2l0L21hYy9NaXNjL1dlYktpdE1lbW9yeVNh
bXBsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2ViS2l0TWVtb3J5U2FtcGxl
ci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L21hYy9NaXNjL1dlYktpdE1lbW9yeVNhbXBsZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqCisgKiAgVGhlIE1lbW9yeVNhbXBsZXIgY2xhc3Mgc2FtcGxlcyBhIG51bWJlciBvZiBp
bnRlcm5hbCBhbmQgZXh0ZXJuYWwgbWVtb3J5IAorICogIG1ldHJpY3MgZXZlcnkgc2Vjb25kIHdo
aWxlIHJ1bm5pbmcuIFNhbXBsZSBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZS4gCisgKiAg
U2FtcGxpbmcgb2NjdXJzIG92ZXIgYSBkdXJhdGlvbiBzcGVjaWZpZWQgd2hlbiBzdGFydGVkLiBJ
ZiBkdXJhdGlvbiBpcyBzZXQgCisgKiAgdG8gMCAoZGVmYXVsdCksIHRoZSBtZW1vcnkgc2FtcGxl
ciB3aWxsIHJ1biBpbmRlZmluaXRlbHkgdW50aWwgdGhlIHN0b3AgCisgKiAgZnVuY3Rpb24gaXMg
Y2FsbGVkLiBNZW1vcnlTYW1wbGVyIGFsbG93cyB0aGUgb3B0aW9uIG9mIHNhbXBsaW5nICJpbiB1
c2UiIAorICogIG1lbW9yeSAoY29tbWl0dGVkIG1lbW9yeSBtaW51cyBmcmVlIGxpc3QgYnl0ZSBj
b3VudCkgb3IgY29tbWl0dGVkIG1lbW9yeSBmb3IKKyAqICBhbnkgYWxsb2NhdG9yIHdoaWNoIGtl
ZXBzIGEgZnJlZSBsaXN0LiBUaGlzIGluY2x1ZGVzIEZhc3RNYWxsb2MgYW5kIHRoZSAKKyAqICBK
YXZhU2NyaXB0Q29yZSBoZWFwIGF0IHRoaXMgdGltZS4KKyAqICBUaGUgZm9sbG93aW5nIG1lbW9y
eSBtZXRyaWNzIGFyZSByZWNvcmRlZDoKKyAqCisgKiAgICAgIFdlYkNvcmUKKyAqICAgICAgICAg
IC0gRmFzdE1hbGxvYyBhbGxvY2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBvciBj
b21taXR0ZWQpCisgKiAgICAgIEphdmFTY3JpcHRDb3JlCisgKiAgICAgICAgICAtIEdhcmJhZ2Ug
Y29sbGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQor
ICogICAgICAgICAgLSBTdGFjayBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y29tbWl0dGVkIG9ubHkhKQorICogICAgICAgICAgLSBKSVQgQ29kZSBieXRlcyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY29tbWl0dGVkIG9ubHkhKQorICogICAgICBNYWxsb2Mgem9uZXMK
KyAqICAgICAgICAgIC0gSW4gdXNlIGJ5dGVzIGZvciB0aGUgZm9sbG93aW5nIHpvbmVzOgorICog
ICAgICAgICAgICAgICogRGVmYXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4g
dXNlIG9yIGNvbW1pdHRlZCkKKyAqICAgICAgICAgICAgICAqIERpc3BDb24gem9uZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgICAgICAgICAg
KiBQdXJnYWJsZSB6b25lICAgICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0
dGVkKQorICogICAgICBUYXNrIEluZm8KKyAqICAgICAgICAgIC0gUmVzaWRlbnQgc2l6ZSBtZW1v
cnkgKFJTSVpFKQorICovCisKKyNpZm5kZWYgV2ViS2l0TWVtb3J5U2FtcGxlcl9oCisjZGVmaW5l
IFdlYktpdE1lbW9yeVNhbXBsZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KKworc3RydWN0IFN5c3RlbU1hbGxvY1N0YXRzOworCitzdHJ1Y3QgV2ViS2l0TWVtb3J5U3Rh
dGlzdGljcworeworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgVmVjdG9yPHNpemVfdD4g
dmFsdWVzOworfTsKKyAgICAKK2NsYXNzIFdlYktpdE1lbW9yeVNhbXBsZXIgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworCitwdWJsaWM6CisgICAgc3RhdGljIFdlYktpdE1lbW9yeVNhbXBsZXIqIHNo
YXJlZCgpOworICAgIHZvaWQgc3RhcnQoQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24gPSAwKTsKKyAg
ICB2b2lkIHN0b3AoKTsKKyAgICBib29sIGlzUnVubmluZygpIGNvbnN0OworICAgIHZvaWQgd2Vi
UHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgCitwcml2YXRlOgorICAgIFdlYktpdE1lbW9yeVNh
bXBsZXIoKTsKKyAgICB+V2ViS2l0TWVtb3J5U2FtcGxlcigpOworICAgIAorICAgIHZvaWQgaW5p
dGlhbGl6ZUxvZ0ZpbGUoKTsKKyAgICB2b2lkIHNhbXBsZVRpbWVyRmlyZWQoV2ViQ29yZTo6VGlt
ZXI8V2ViS2l0TWVtb3J5U2FtcGxlcj4qKTsKKyAgICB2b2lkIHN0b3BUaW1lckZpcmVkKFdlYkNv
cmU6OlRpbWVyPFdlYktpdE1lbW9yeVNhbXBsZXI+Kik7CisgICAgdm9pZCBhcHBlbmRDdXJyZW50
TWVtb3J5VXNhZ2VUb0ZpbGUoV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlJik7CisgICAgCisg
ICAgU3lzdGVtTWFsbG9jU3RhdHMgc2FtcGxlU3lzdGVtTWFsbG9jKCkgY29uc3Q7CisgICAgc2l6
ZV90IHNhbXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcygpIGNvbnN0OworICAgIFdlYktpdE1lbW9y
eVN0YXRpc3RpY3Mgc2FtcGxlV2ViS2l0KCkgY29uc3Q7CisgICAgCisgICAgdm9pZCByZWdpc3Rl
cldlYlByZWZlcmVuY2VzT2JzZXJ2ZXJzKCk7CisgICAgdm9pZCByZW1vdmVXZWJQcmVmZXJlbmNl
c09ic2VydmVycygpOworICAgIAorICAgIGJvb2wgaXNTYW1wbGluZ0VuYWJsZWQoKTsKKyAgICB2
b2lkIHNldFNhbXBsaW5nRW5hYmxlZChib29sIGZsYWcpOworICAgIENGVGltZUludGVydmFsIG1l
bW9yeVNhbXBsZXJJbnRlcnZhbCgpOworCisgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxl
IG1fc2FtcGxlTG9nRmlsZTsKKyAgICBTdHJpbmcgbV9zYW1wbGVMb2dGaWxlUGF0aDsKKyAgICBT
dHJpbmcgbV9zZXBhcmF0b3I7CisgICAgV2ViQ29yZTo6VGltZXI8V2ViS2l0TWVtb3J5U2FtcGxl
cj4gbV9zYW1wbGVUaW1lcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxXZWJLaXRNZW1vcnlTYW1wbGVy
PiBtX3N0b3BUaW1lcjsKKyAgICBib29sIG1faXNSdW5uaW5nOworICAgIENGVGltZUludGVydmFs
IG1fcnVubmluZ1RpbWU7Cit9OworCisjZW5kaWYKSW5kZXg6IFdlYktpdC9tYWMvTWlzYy9XZWJL
aXRNZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2Vi
S2l0TWVtb3J5U2FtcGxlci5tYWMubW0JKHJldmlzaW9uIDApCisrKyBXZWJLaXQvbWFjL01pc2Mv
V2ViS2l0TWVtb3J5U2FtcGxlci5tYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJXZWJLaXRN
ZW1vcnlTYW1wbGVyLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0aXN0
aWNzLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90YXNrLmg+Cisj
aW5jbHVkZSA8bWFjaC9tYWNoX3R5cGVzLmg+CisjaW5jbHVkZSA8bWFsbG9jL21hbGxvYy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRv
dy5oPgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwor
CisgICAgCitzdHJ1Y3QgU3lzdGVtTWFsbG9jU3RhdHMgeworICAgIG1hbGxvY19zdGF0aXN0aWNz
X3QgZGVmYXVsdE1hbGxvY1pvbmVTdGF0czsKKyAgICBtYWxsb2Nfc3RhdGlzdGljc190IGRpc3Bh
dGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0YXRzOworICAgIG1hbGxvY19zdGF0aXN0aWNzX3Qg
cHVyZ2VhYmxlTWFsbG9jWm9uZVN0YXRzOworfTsKKworQGludGVyZmFjZSBXZWJLaXRNZW1vcnlT
YW1wbGVyUHJlZnNPYnNlcnZlciA6IE5TT2JqZWN0Cit7fQorCisrICh2b2lkKXJlZ2lzdGVyV2Vi
UHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOworKyAodm9pZClyZW1vdmVXZWJQcmVmZXJl
bmNlc0NoYW5nZWROb3RpZmljYXRpb247CisrICh2b2lkKXdlYlByZWZlcmVuY2VzQ2hhbmdlZDoo
TlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViS2l0TWVtb3J5U2FtcGxlclByZWZzT2JzZXJ2ZXIKKyAgICAKKysgKHZvaWQpcmVnaXN0ZXJX
ZWJQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb24KK3sKKyAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KHdlYlByZWZlcmVuY2VzQ2hhbmdlZDopIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZp
Y2F0aW9uIG9iamVjdDpuaWxdOworfQorCisrICh2b2lkKXJlbW92ZVdlYlByZWZlcmVuY2VzQ2hh
bmdlZE5vdGlmaWNhdGlvbgoreworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlm
aWNhdGlvbiBvYmplY3Q6bmlsXTsKK30KKworKyAodm9pZCl3ZWJQcmVmZXJlbmNlc0NoYW5nZWQ6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgV2ViS2l0TWVtb3J5U2FtcGxl
cjo6c2hhcmVkKCktPndlYlByZWZlcmVuY2VzQ2hhbmdlZCgpOworfQorCitAZW5kCisKK1N5c3Rl
bU1hbGxvY1N0YXRzIFdlYktpdE1lbW9yeVNhbXBsZXI6OnNhbXBsZVN5c3RlbU1hbGxvYygpIGNv
bnN0Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRNYWxsb2Nab25lTmFtZSA9ICJE
ZWZhdWx0TWFsbG9jWm9uZSI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRpc3BhdGNoQ29udGlu
dWF0aW9uTWFsbG9jWm9uZU5hbWUgPSAiRGlzcGF0Y2hDb250aW51YXRpb25zIjsKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogcHVyZ2VhYmxlTWFsbG9jWm9uZU5hbWUgPSAiRGVmYXVsdFB1cmdlYWJs
ZU1hbGxvY1pvbmUiOworICAgIFN5c3RlbU1hbGxvY1N0YXRzIG1hbGxvY1N0YXRzOworICAgIHZt
X2FkZHJlc3NfdCogem9uZXM7CisgICAgdW5zaWduZWQgY291bnQ7CisgICAgbWFsbG9jX3N0YXRp
c3RpY3NfdCBzdGF0czsKKyAgICBtYWxsb2NfZ2V0X2FsbF96b25lcyhtYWNoX3Rhc2tfc2VsZigp
LCAwLCAmem9uZXMsICZjb3VudCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgaWYgKGNvbnN0IGNoYXIqIG5hbWUgPSBtYWxsb2NfZ2V0X3pvbmVf
bmFtZShyZWludGVycHJldF9jYXN0PG1hbGxvY196b25lX3QqPih6b25lc1tpXSkpKSB7CisgICAg
ICAgICAgICBzdGF0cy5ibG9ja3NfaW5fdXNlID0gMDsKKyAgICAgICAgICAgIHN0YXRzLnNpemVf
aW5fdXNlID0gMDsKKyAgICAgICAgICAgIHN0YXRzLm1heF9zaXplX2luX3VzZSA9IDA7CisgICAg
ICAgICAgICBzdGF0cy5zaXplX2FsbG9jYXRlZCA9IDA7CQorICAgICAgICAgICAgbWFsbG9jX3pv
bmVfc3RhdGlzdGljcyhyZWludGVycHJldF9jYXN0PG1hbGxvY196b25lX3QqPih6b25lc1tpXSks
ICZzdGF0cyk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCBkZWZhdWx0TWFsbG9jWm9u
ZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLmRlZmF1bHRNYWxsb2Nab25lU3Rh
dHMgPSBzdGF0czsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgZGlzcGF0Y2hD
b250aW51YXRpb25NYWxsb2Nab25lTmFtZSkpCisgICAgICAgICAgICAgICAgbWFsbG9jU3RhdHMu
ZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgICAg
IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgcHVyZ2VhYmxlTWFsbG9jWm9uZU5hbWUpKQorICAgICAg
ICAgICAgICAgIG1hbGxvY1N0YXRzLnB1cmdlYWJsZU1hbGxvY1pvbmVTdGF0cyA9IHN0YXRzOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYWxsb2NTdGF0czsKK30KKworc2l6ZV90IFdl
YktpdE1lbW9yeVNhbXBsZXI6OnNhbXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcygpIGNvbnN0Cit7
CisgICAgdGFza19iYXNpY19pbmZvXzY0IHRhc2tJbmZvOworICAgIG1hY2hfbXNnX3R5cGVfbnVt
YmVyX3QgY291bnQgPSBUQVNLX0JBU0lDX0lORk9fNjRfQ09VTlQ7CisgICAgdGFza19pbmZvKG1h
Y2hfdGFza19zZWxmKCksIFRBU0tfQkFTSUNfSU5GT182NCwgcmVpbnRlcnByZXRfY2FzdDx0YXNr
X2luZm9fdD4oJnRhc2tJbmZvKSwgJmNvdW50KTsKKyAgICByZXR1cm4gdGFza0luZm8ucmVzaWRl
bnRfc2l6ZTsKK30KKyAgCitXZWJLaXRNZW1vcnlTdGF0aXN0aWNzIFdlYktpdE1lbW9yeVNhbXBs
ZXI6OnNhbXBsZVdlYktpdCgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHRvdGFsQnl0ZXNJblVzZSA9
IDAsIHRvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOyAKKyAgICAKKyAgICBXZWJLaXRNZW1vcnlTdGF0
aXN0aWNzIHdlYktpdE1lbW9yeVN0YXRzOworICAgIAorICAgIEZhc3RNYWxsb2NTdGF0aXN0aWNz
IGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygpOworICAg
IHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNJblVzZSA9IGZhc3RNYWxsb2NTdGF0aXN0aWNzLmNvbW1p
dHRlZFZNQnl0ZXMgLSBmYXN0TWFsbG9jU3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzOworICAgIHNp
emVfdCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQgPSBmYXN0TWFsbG9jU3RhdGlzdGljcy5jb21t
aXR0ZWRWTUJ5dGVzOworICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVz
ZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsK
KyAgICAKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEhlYXA6
OlN0YXRpc3RpY3MgaGVhcE1lbW9yeVN0YXRzID0gaGVhcFN0YXRpc3RpY3MoSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBo
ZWFwTWVtb3J5U3RhdHMuc2l6ZSAtIGhlYXBNZW1vcnlTdGF0cy5mcmVlOworICAgIHNpemVfdCBq
c2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBoZWFwTWVtb3J5U3RhdHMuc2l6ZTsKKyAgICB0b3RhbEJ5
dGVzSW5Vc2UgKz0ganNjSGVhcEJ5dGVzSW5Vc2U7CisgICAgdG90YWxCeXRlc0NvbW1pdHRlZCAr
PSBqc2NIZWFwQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgR2xvYmFsTWVtb3J5U3RhdGlzdGlj
cyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKKyAgICB0b3Rh
bEJ5dGVzSW5Vc2UgKz0gZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRlcyArIGdsb2JhbE1lbW9y
eVN0YXRzLkpJVEJ5dGVzOworICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0gZ2xvYmFsTWVtb3J5
U3RhdHMuc3RhY2tCeXRlcyArIGdsb2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzOworICAgIAorICAg
IFN5c3RlbU1hbGxvY1N0YXRzIHN5c3RlbVN0YXRzID0gc2FtcGxlU3lzdGVtTWFsbG9jKCk7Cisg
ICAgCisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSA9IHN5c3RlbVN0YXRz
LmRlZmF1bHRNYWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IGRpc3BhdGNo
Q29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5kaXNwYXRjaENv
bnRpbnVhdGlvbk1hbGxvY1pvbmVTdGF0cy5zaXplX2luX3VzZTsKKyAgICBzaXplX3QgcHVyZ2Vh
YmxlTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVNYWxsb2Nab25l
U3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21t
aXR0ZWQgPSBzeXN0ZW1TdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0YXRzLnNpemVfYWxsb2NhdGVk
OworICAgIHNpemVfdCBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0NvbW1pdHRl
ZCA9IHN5c3RlbVN0YXRzLmRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0YXRzLnNpemVf
YWxsb2NhdGVkOworICAgIHNpemVfdCBwdXJnZWFibGVNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQg
PSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMuc2l6ZV9hbGxvY2F0ZWQ7Cisg
ICAgdG90YWxCeXRlc0luVXNlICs9IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSArIGRpc3Bh
dGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgKyBwdXJnZWFibGVNYWxsb2Nab25l
Qnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGRlZmF1bHRNYWxsb2Nab25l
Qnl0ZXNDb21taXR0ZWQgKyBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0NvbW1p
dHRlZCArIHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0NvbW1pdHRlZDsKKyAgICAKKyAgICBzaXpl
X3QgcmVzaWRlbnRTaXplID0gc2FtcGxlUHJvY2Vzc0NvbW1pdHRlZEJ5dGVzKCk7CisgICAgCisg
ICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJNZW1vcnkgSW4gVXNlIikp
OworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoMCk7CisgICAgd2ViS2l0TWVt
b3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJGYXN0IE1hbGxvYyBab25lIEJ5dGVzIikpOwor
ICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZmFzdE1hbGxvY0J5dGVzSW5Vc2Up
OworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGVmYXVsdCBNYWxs
b2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGRl
ZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5h
cHBlbmQoU3RyaW5nKCJEaXNwYXRjaCBDb250aW51YXRpb24gTWFsbG9jIFpvbmUgQnl0ZXMiKSk7
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChkaXNwYXRjaENvbnRpbnVhdGlv
bk1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVu
ZChTdHJpbmcoIlB1cmdlYWJsZSBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1v
cnlTdGF0cy52YWx1ZXMuYXBwZW5kKHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAg
ICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkphdmFTY3JpcHQgSGVhcCBC
eXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRl
c0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlRvdGFs
IEJ5dGVzIG9mIE1lbW9yeSBJbiBVc2UiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVz
LmFwcGVuZCh0b3RhbEJ5dGVzSW5Vc2UpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBw
ZW5kKFN0cmluZygiQ29tbWl0dGVkIE1lbW9yeSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52
YWx1ZXMuYXBwZW5kKDApOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmlu
ZygiRmFzdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1
ZXMuYXBwZW5kKGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3Rh
dHMua2V5cy5hcHBlbmQoU3RyaW5nKCJEZWZhdWx0IE1hbGxvYyBab25lIEJ5dGVzIikpOworICAg
IHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZGVmYXVsdE1hbGxvY1pvbmVCeXRlc0Nv
bW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJEaXNw
YXRjaCBDb250aW51YXRpb24gTWFsbG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5
U3RhdHMudmFsdWVzLmFwcGVuZChkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0Nv
bW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJQdXJn
ZWFibGUgTWFsbG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVz
LmFwcGVuZChwdXJnZWFibGVNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiSmF2YVNjcmlwdCBIZWFwIEJ5dGVzIikpOwor
ICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoanNjSGVhcEJ5dGVzQ29tbWl0dGVk
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkphdmFTY3JpcHQg
U3RhY2sgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChnbG9i
YWxNZW1vcnlTdGF0cy5zdGFja0J5dGVzKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFw
cGVuZChTdHJpbmcoIkphdmFTY3JpcHQgSklUIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0
YXRzLnZhbHVlcy5hcHBlbmQoZ2xvYmFsTWVtb3J5U3RhdHMuSklUQnl0ZXMpOworICAgIHdlYktp
dE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiVG90YWwgQnl0ZXMgb2YgQ29tbWl0dGVk
IE1lbW9yeSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHRvdGFsQnl0
ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygi
UmVzaWRlbnQgU2l6ZSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHJl
c2lkZW50U2l6ZSk7CisgICAgCisgICAgcmV0dXJuIHdlYktpdE1lbW9yeVN0YXRzOworfQorCit2
b2lkIFdlYktpdE1lbW9yeVNhbXBsZXI6OnJlZ2lzdGVyV2ViUHJlZmVyZW5jZXNPYnNlcnZlcnMo
KQoreworICAgIFtXZWJLaXRNZW1vcnlTYW1wbGVyUHJlZnNPYnNlcnZlciByZWdpc3RlcldlYlBy
ZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbl07Cit9CisKK3ZvaWQgV2ViS2l0TWVtb3J5U2Ft
cGxlcjo6cmVtb3ZlV2ViUHJlZmVyZW5jZXNPYnNlcnZlcnMoKQoreworICAgIFtXZWJLaXRNZW1v
cnlTYW1wbGVyUHJlZnNPYnNlcnZlciByZW1vdmVXZWJQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmlj
YXRpb25dOworfQorCitib29sIFdlYktpdE1lbW9yeVNhbXBsZXI6OmlzU2FtcGxpbmdFbmFibGVk
KCkKK3sKKyAgICBXZWJQcmVmZXJlbmNlcyogcHJlZnMgPSBbV2ViUHJlZmVyZW5jZXMgc3RhbmRh
cmRQcmVmZXJlbmNlc107CisgICAgcmV0dXJuIFtwcmVmcyBtZW1vcnlTYW1wbGVyRW5hYmxlZF07
Cit9CisKK3ZvaWQgV2ViS2l0TWVtb3J5U2FtcGxlcjo6c2V0U2FtcGxpbmdFbmFibGVkKGJvb2wg
ZmxhZykKK3sKKyAgICBXZWJQcmVmZXJlbmNlcyogcHJlZnMgPSBbV2ViUHJlZmVyZW5jZXMgc3Rh
bmRhcmRQcmVmZXJlbmNlc107CisgICAgW3ByZWZzIHNldE1lbW9yeVNhbXBsZXJFbmFibGVkOmZs
YWddOworfQorCitDRlRpbWVJbnRlcnZhbCBXZWJLaXRNZW1vcnlTYW1wbGVyOjptZW1vcnlTYW1w
bGVySW50ZXJ2YWwoKQoreworICAgIFdlYlByZWZlcmVuY2VzKiBwcmVmcyA9IFtXZWJQcmVmZXJl
bmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKKyAgICByZXR1cm4gW3ByZWZzIG1lbW9yeVNhbXBs
ZXJJbnRlcnZhbF07Cit9CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtl
eXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VLZXlzUHJpdmF0ZS5oCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDMgKzEyNCw1
IEBACiAjZGVmaW5lIFdlYktpdFBhZ2VDYWNoZVNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0UGFn
ZUNhY2hlU2l6ZVByZWZlcmVuY2VLZXkiCiAjZGVmaW5lIFdlYktpdE9iamVjdENhY2hlU2l6ZVBy
ZWZlcmVuY2VLZXkgQCJXZWJLaXRPYmplY3RDYWNoZVNpemVQcmVmZXJlbmNlS2V5IgogI2RlZmlu
ZSBXZWJLaXREZWJ1Z0Z1bGxQYWdlWm9vbVByZWZlcmVuY2VLZXkgQCJXZWJLaXREZWJ1Z0Z1bGxQ
YWdlWm9vbVByZWZlcmVuY2VLZXkiCisjZGVmaW5lIFdlYktpdE1lbW9yeVNhbXBsZXJFbmFibGVk
UHJlZmVyZW5jZUtleSBAIldlYktpdE1lbW9yeVNhbXBsZXJFbmFibGVkUHJlZmVyZW5jZUtleSIK
KyNkZWZpbmUgV2ViS2l0TWVtb3J5U2FtcGxlckludGVydmFsUHJlZmVyZW5jZUtleSBAIldlYktp
dE1lbW9yeVNhbXBsZXJJbnRlcnZhbFByZWZlcmVuY2VLZXkiCkluZGV4OiBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiA3MzY1NikKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcwLDYgKzM3MCw5IEBAICsg
KHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAg
IFdlYktpdE1lbW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWRQcmVm
ZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktp
dFVzZVByZUhUTUw1UGFyc2VyUXVpcmtzS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6Tk9dLCAgIFdlYktpdE1lbW9yeVNhbXBsZXJFbmFibGVkUHJlZmVyZW5jZUtleSwKKyAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDoxNDAwLjBdLCAgV2ViS2l0TWVtb3J5U2Ft
cGxlckludGVydmFsUHJlZmVyZW5jZUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6V2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9uQ2FjaGVUb3RhbFF1b3RhLAog
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOldlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNhdGlvbkNhY2hlRGVmYXVsdE9y
aWdpblF1b3RhLAogICAgICAgICBuaWxdOwpAQCAtMTM5OCw2ICsxNDAxLDI2IEBAICsgKHZvaWQp
c2V0V2ViS2l0TGlua1RpbWVWZXJzaW9uOihpbnQpdmUKICAgICBzZXRXZWJLaXRMaW5rVGltZVZl
cnNpb24odmVyc2lvbik7CiB9CiAKKy0gKHZvaWQpc2V0TWVtb3J5U2FtcGxlckVuYWJsZWQ6KEJP
T0wpZmxhZworeworICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRNZW1v
cnlTYW1wbGVyRW5hYmxlZFByZWZlcmVuY2VLZXldOworfQorCistIChCT09MKW1lbW9yeVNhbXBs
ZXJFbmFibGVkCit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0TWVt
b3J5U2FtcGxlckVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClzZXRNZW1vcnlT
YW1wbGVySW50ZXJ2YWw6KENGVGltZUludGVydmFsKWludGVydmFsCit7CisgICAgW3NlbGYgX3Nl
dEZsb2F0VmFsdWU6aW50ZXJ2YWwgZm9yS2V5OldlYktpdE1lbW9yeVNhbXBsZXJJbnRlcnZhbFBy
ZWZlcmVuY2VLZXldOworfQorCistIChmbG9hdCltZW1vcnlTYW1wbGVySW50ZXJ2YWwKK3sKKyAg
ICByZXR1cm4gW3NlbGYgX2Zsb2F0VmFsdWVGb3JLZXk6V2ViS2l0TWVtb3J5U2FtcGxlckludGVy
dmFsUHJlZmVyZW5jZUtleV07Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlByZWZl
cmVuY2VzIChXZWJJbnRlcm5hbCkKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmgJKHJldmlzaW9uIDczNjU2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNiArMjEyLDExIEBA
IEBpbnRlcmZhY2UgV2ViUHJlZmVyZW5jZXMgKFdlYlByaXZhdGUpCiAKICsgKHZvaWQpc2V0V2Vi
S2l0TGlua1RpbWVWZXJzaW9uOihpbnQpdmVyc2lvbjsKIAorLSAodm9pZClzZXRNZW1vcnlTYW1w
bGVyRW5hYmxlZDooQk9PTClmbGFnOworLSAoQk9PTCltZW1vcnlTYW1wbGVyRW5hYmxlZDsKKy0g
KHZvaWQpc2V0TWVtb3J5U2FtcGxlckludGVydmFsOihDRlRpbWVJbnRlcnZhbClpbnRlcnZhbDsK
Ky0gKGZsb2F0KW1lbW9yeVNhbXBsZXJJbnRlcnZhbDsKKwogLy8gRm9yIFdlYlZpZXcncyB1c2Ug
b25seS4KIC0gKHZvaWQpd2lsbEFkZFRvV2ViVmlldzsKIC0gKHZvaWQpZGlkUmVtb3ZlRnJvbVdl
YlZpZXc7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNzM2NTYpCisrKyBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBA
QAogI2ltcG9ydCAiV2ViSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJXZWJLaXRFcnJvcnMu
aCIKICNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKKyNpbXBvcnQgIldlYktpdE1lbW9yeVNhbXBs
ZXIuaCIKICNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJLaXRT
dGF0aXN0aWNzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViS2l0U3lzdGVtQml0cy5oIgpAQCAtMjc0
NCw2ICsyNzQ1LDkgQEAgKyAodm9pZClpbml0aWFsaXplCiAgICAgaWYgKCFbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6V2ViQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZF0pCiAgICAgICAgIGF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQgPSBbTlNTcGVsbENoZWNrZXIgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkXTsKICNlbmRpZgorICAgIAorICAgIC8vIEluaXRpYWxpemUgTWVtb3J5IFNhbXBsZXIK
KyAgICBXZWJLaXRNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKTsKIH0KIAogKyAodm9pZClfYXBwbGlj
YXRpb25XaWxsVGVybWluYXRlCg==
</data>
<flag name="review"
          id="67102"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77952</attachid>
            <date>2011-01-04 17:34:30 -0800</date>
            <delta_ts>2011-01-04 21:06:22 -0800</delta_ts>
            <desc>reworked patch</desc>
            <filename>webkit2MemorySampler.txt</filename>
            <type>text/plain</type>
            <size>40435</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzg2NDk2MTc+IE1pZ3JhdGUgbWVtb3J5IHRyYWNraW5nIGZyb20gU2Fm
YXJpIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTA3OTkgQWRkIE1lbW9yeSBTYW1wbGVyIHRvIFdlYktpdAorICAgICAgICAKKyAgICAg
ICAgQWRkIGEgc2FtcGxlciBmb3IgcHJpbnRpbmcgb2ZmIHByb2Nlc3MgbWVtb3J5IHN0YXRpc3Rp
Y3MuCisgICAgICAgIFRoaXMgdG9vbCBjYW4gdHJhY2s6CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgV2ViQ29yZQorICAgICAgICAgICAgICAgICAgIC0gRmFzdE1hbGxvYyBhbGxv
Y2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgICAgICAg
ICAgICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAgICAgICAgICAtIEdhcmJhZ2UgY29s
bGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAg
ICAgICAgICAgICAgICAgIC0gU3RhY2sgYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbW1pdHRlZCBvbmx5ISkKKyAgICAgICAgICAgICAgICAgICAtIEpJVCBDb2RlIGJ5dGVz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0ZWQgb25seSEpCisgICAgICAgICAg
ICAgICAgTWFsbG9jIHpvbmVzCisgICAgICAgICAgICAgICAgICAgLSBJbiB1c2UgYnl0ZXMgZm9y
IHRoZSBmb2xsb3dpbmcgem9uZXM6CisgICAgICAgICAgICAgICAgICAgICAgICogRGVmYXVsdCB6
b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgKiBEaXNwQ29uIHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAg
IChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAgICAgICAgICAgICAqIFB1cmdhYmxl
IHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgICAg
ICAgICAgICAgICAgVGFzayBJbmZvCisgICAgICAgICAgICAgICAgICAgLSBSZXNpZGVudCBzaXpl
IG1lbW9yeSAoUlNJWkUpCisgICAgICAgIAorICAgICAgICAgICAgICAgIERhdGEgY29sbGVjdGVk
IGlzIGR1bXBlZCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAgICAgICAKKyAgICAgICAgQ3JlYXRl
IGEgc2FuZGJveCBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4KKyAgICAgICAgKiBTaGFyZWQvU2FuZGJv
eEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JUZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NhbmRib3hFeHRl
bnNpb25NYWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclRlbXBvcmFyeUZpbGUpOgorICAgICAgICAKKyAgICAgICAgTWVtb3J5IFNhbXBsZXIg
ZmlsZXMKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6V2ViTWVtb3J5U2FtcGxlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1l
bW9yeVNhbXBsZXI6OnN0b3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjpp
c1J1bm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjppbml0aWFsaXpl
VGVtcExvZ0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjppbml0aWFs
aXplU2FuZGJveGVkTG9nRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6
OndyaXRlSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBs
ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjpzdG9wVGlt
ZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OmFwcGVuZEN1cnJl
bnRNZW1vcnlVc2FnZVRvRmlsZSk6CisgICAgICAgICogU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIu
aDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbTog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVN5c3RlbU1h
bGxvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVByb2Nlc3ND
b21taXR0ZWRCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnByb2Nl
c3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0
KToKKyAgICAgICAgCisgICAgICAgIEFQSSB0byBzdGFydCBhbmQgc3RvcCBVSVByb2Nlc3MgYW5k
IFdlYlByb2Nlc3Mgc2FtcGxpbmcuCisgICAgICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U3RhcnRNZW1vcnlTYW1wbGVyKToK
KyAgICAgICAgKFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgIAorICAgICAgICBTZW5kIG1lc3NhZ2VzIHRv
IFdlYlByb2Nlc3MgdG8gc3RhcnQgYW5kIHN0b3AgbWVtb3J5IHNhbXBsaW5nLgorICAgICAgICAK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0Ojpwcm9j
ZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c3Rh
cnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c3RvcE1lbW9y
eVNhbXBsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6CisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnN0YXJ0TWVtb3J5
U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnN0b3BNZW1vcnlTYW1wbGVy
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTEtMDEtMDQgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJL
aXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkKIHR5cGVkZWYg
c3RydWN0IF9fV0tTYW5kYm94RXh0ZW5zaW9uKiBXS1NhbmRib3hFeHRlbnNpb25SZWY7CkBAIC02
OSw2ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+IGNyZWF0ZShjb25zdCBIYW5kbGUmKTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVIYW5k
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhhbmRsZSYpOworICAgIHN0YXRpYyBT
dHJpbmcgY3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwg
VHlwZSB0eXBlLCBIYW5kbGUmKTsKICAgICB+U2FuZGJveEV4dGVuc2lvbigpOwogCiAgICAgYm9v
bCBpbnZhbGlkYXRlKCk7CkBAIC04OSw2ICs5MSw3IEBAIGlubGluZSB2b2lkIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZTo6ZW4KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZSYpIHsgcmV0dXJuIHRydWU7
IH0KIGlubGluZSBQYXNzUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZShjb25zdCBIYW5kbGUmKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgdm9pZCBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhh
bmRsZSYpIHsgfQoraW5saW5lIFN0cmluZyBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JUZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBUeXBlIHR5cGUsIEhhbmRsZSYp
IHtyZXR1cm4gU3RyaW5nKCk7fQogaW5saW5lIFNhbmRib3hFeHRlbnNpb246On5TYW5kYm94RXh0
ZW5zaW9uKCkgeyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjppbnZhbGlkYXRlKCkg
eyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZSgp
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgor
ICovCisKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIgKnNoYXJlZE1lbW9yeVNhbXBsZXIgPSAw
OworCitXZWJNZW1vcnlTYW1wbGVyKiBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKQoreworICAg
IGlmICghc2hhcmVkTWVtb3J5U2FtcGxlcikKKyAgICAgICAgc2hhcmVkTWVtb3J5U2FtcGxlciA9
IG5ldyBXZWJNZW1vcnlTYW1wbGVyKCk7CisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeVNhbXBsZXI7
Cit9CisKK1dlYk1lbW9yeVNhbXBsZXI6OldlYk1lbW9yeVNhbXBsZXIoKSAKKyAgICA6IG1fc2Ft
cGxlVGltZXIodGhpcywgJldlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVRpbWVyRmlyZWQpCisgICAg
LCBtX3N0b3BUaW1lcih0aGlzLCAmV2ViTWVtb3J5U2FtcGxlcjo6c3RvcFRpbWVyRmlyZWQpCisg
ICAgLCBtX2lzUnVubmluZyhmYWxzZSkKKyAgICAsIG1fcnVubmluZ1RpbWUoMCkKK3sKK30KKwor
dm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdGFydChjb25zdCBDRlRpbWVJbnRlcnZhbCBpbnRlcnZh
bCkgCit7CisgICAgaWYgKG1faXNSdW5uaW5nKSAKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGluaXRpYWxpemVUZW1wTG9nRmlsZSgpOworICAgIGluaXRpYWxpemVUaW1lcnMoaW50ZXJ2YWwp
OworfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OnN0YXJ0KGNvbnN0IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYgc2FtcGxlTG9nRmlsZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBzYW1wbGVMb2dG
aWxlUGF0aCwgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwpIAoreworICAgIGlmIChtX2lz
UnVubmluZykgCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgb24gYSBz
eXN0ZW0gd2l0aG91dCBTYW5kYm94RXh0ZW5zaW9uIHRoZSBoYW5kbGUgYW5kIGZpbGVuYW1lIHdp
bGwgYmUgZW1wdHkKKyAgICBpZiAoc2FtcGxlTG9nRmlsZVBhdGguaXNFbXB0eSgpKSB7CisgICAg
ICAgIHN0YXJ0KGludGVydmFsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisg
ICAgaW5pdGlhbGl6ZVNhbmRib3hlZExvZ0ZpbGUoc2FtcGxlTG9nRmlsZUhhbmRsZSwgc2FtcGxl
TG9nRmlsZVBhdGgpOworICAgIGluaXRpYWxpemVUaW1lcnMoaW50ZXJ2YWwpOworICAgCit9CisK
K3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyhDRlRpbWVJbnRlcnZhbCBp
bnRlcnZhbCkKK3sKKyAgICBtX3NhbXBsZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEpOworICAgIHBy
aW50ZigiU3RhcnRlZCBtZW1vcnkgc2FtcGxlciBmb3IgcHJvY2VzcyAlcyIsIHByb2Nlc3NOYW1l
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGludGVydmFsID4gMCkgeworICAgICAgICBtX3N0
b3BUaW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOworICAgICAgICBwcmludGYoIiBmb3IgYSBp
bnRlcnZhbCBvZiAlZyBzZWNvbmRzIiwgaW50ZXJ2YWwpOworICAgIH0KKyAgICBwcmludGYoIjsg
U2FtcGxlciBsb2cgZmlsZSBzdG9yZWQgYXQ6ICVzXG4iLCBtX3NhbXBsZUxvZ0ZpbGVQYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgIG1fcnVubmluZ1RpbWUgPSBpbnRlcnZhbDsKKyAgICBtX2lzUnVu
bmluZyA9IHRydWU7Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6c3RvcCgpIAoreworICAg
IGlmICghbV9pc1J1bm5pbmcpIAorICAgICAgICByZXR1cm47CisgICAgbV9zYW1wbGVUaW1lci5z
dG9wKCk7CisgICAgbV9zYW1wbGVMb2dGaWxlID0gMDsKKyAgICBwcmludGYoIlN0b3BwZWQgbWVt
b3J5IHNhbXBsZXIgZm9yIHByb2Nlc3MgJXNcbiIsIHByb2Nlc3NOYW1lKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgLy8gRmx1c2ggc3Rkb3V0IGJ1ZmZlciBzbyBweXRob24gc2NyaXB0IGNhbiBiZSBn
dWFyYW50ZWVkIHRvIHJlYWQgdXAgdG8gdGhpcyBwb2ludC4KKyAgICBmZmx1c2goc3Rkb3V0KTsK
KyAgICBtX2lzUnVubmluZyA9IGZhbHNlOworICAgIAorICAgIGlmKG1fc3RvcFRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1fc3RvcFRpbWVyLnN0b3AoKTsKKyAgICAKKyAgICBpZiAobV9zYW1w
bGVMb2dTYW5kYm94RXh0ZW5zaW9uKSB7CisgICAgICAgIG1fc2FtcGxlTG9nU2FuZGJveEV4dGVu
c2lvbi0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNpb24g
PSAwOworICAgIH0gICAgCit9CisKK2Jvb2wgV2ViTWVtb3J5U2FtcGxlcjo6aXNSdW5uaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1J1bm5pbmc7Cit9CisgICAgCit2b2lkIFdlYk1lbW9y
eVNhbXBsZXI6OmluaXRpYWxpemVUZW1wTG9nRmlsZSgpCit7CisgICAgbV9zYW1wbGVMb2dGaWxl
UGF0aCA9IFN0cmluZygob3BlblRlbXBvcmFyeUZpbGUocHJvY2Vzc05hbWUoKS51dGY4KCkuZGF0
YSgpLCBtX3NhbXBsZUxvZ0ZpbGUpKS5kYXRhKCkpOworICAgIHdyaXRlSGVhZGVycygpOworfQor
Cit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OmluaXRpYWxpemVTYW5kYm94ZWRMb2dGaWxlKGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBzYW1wbGVMb2dGaWxlUGF0aCkKK3sKKyAgICBtX3NhbXBsZUxvZ1NhbmRib3hFeHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7
CisgICAgaWYgKG1fc2FtcGxlTG9nU2FuZGJveEV4dGVuc2lvbikKKyAgICAgICAgbV9zYW1wbGVM
b2dTYW5kYm94RXh0ZW5zaW9uLT5jb25zdW1lKCk7CisgICAgbV9zYW1wbGVMb2dGaWxlUGF0aCA9
IHNhbXBsZUxvZ0ZpbGVQYXRoOworICAgIG1fc2FtcGxlTG9nRmlsZSA9IG9wZW5GaWxlKG1fc2Ft
cGxlTG9nRmlsZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisgICAgd3JpdGVIZWFkZXJzKCk7Cit9CisK
K3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6d3JpdGVIZWFkZXJzKCkKK3sKKyAgICBTdHJpbmcgcHJv
Y2Vzc0RldGFpbHMgPSBTdHJpbmcoIlByb2Nlc3M6ICIpOworICAgIHByb2Nlc3NEZXRhaWxzLmFw
cGVuZChwcm9jZXNzTmFtZSgpKTsKKyAgICBwcm9jZXNzRGV0YWlscy5hcHBlbmQoU3RyaW5nKCJc
biIpKTsKKyAgICB3cml0ZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUsIHByb2Nlc3NEZXRhaWxzLnV0
ZjgoKS5kYXRhKCksIHByb2Nlc3NEZXRhaWxzLnV0ZjgoKS5sZW5ndGgoKSk7CisgICAgCisgICAg
bV9zZXBhcmF0b3IgPSBTdHJpbmcoIlx0Iik7ICAgIAorICAgIFN0cmluZyBoZWFkZXIgPSBTdHJp
bmcoKTsgCisgICAgV2ViTWVtb3J5U3RhdGlzdGljcyBzdGF0cyA9IHNhbXBsZVdlYktpdCgpOwor
ICAgIGlmICghc3RhdHMua2V5cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdGF0cy5rZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBoZWFkZXIuYXBw
ZW5kKG1fc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIGhlYWRlci5hcHBlbmQoc3RhdHMua2V5c1tp
XS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBoZWFkZXIuYXBwZW5kKFN0
cmluZygiXG4iKSk7CisgICAgd3JpdGVUb0ZpbGUobV9zYW1wbGVMb2dGaWxlLCBoZWFkZXIudXRm
OCgpLmRhdGEoKSwgaGVhZGVyLnV0ZjgoKS5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViTWVtb3J5
U2FtcGxlcjo6c2FtcGxlVGltZXJGaXJlZChUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopCit7Cisg
ICAgYXBwZW5kQ3VycmVudE1lbW9yeVVzYWdlVG9GaWxlKG1fc2FtcGxlTG9nRmlsZSk7IAorfQor
Cit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OnN0b3BUaW1lckZpcmVkKFRpbWVyPFdlYk1lbW9yeVNh
bXBsZXI+KikKK3sKKyAgICBpZiAoIW1faXNSdW5uaW5nKQorICAgICAgICByZXR1cm47CisgICAg
cHJpbnRmKCIlZyBzZWNvbmRzIGVsYXBzZWQuIFN0b3BwaW5nIG1lbW9yeSBzYW1wbGVyLi4uXG4i
LCBtX3J1bm5pbmdUaW1lKTsKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxl
cjo6YXBwZW5kQ3VycmVudE1lbW9yeVVzYWdlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgZmls
ZSkKK3sKKyAgICAvLyBDb2xsZWN0IHN0YXRpc3RpY3MgZnJvbSBhbGxvY2F0b3JzIGFuZCBnZXQg
UlNJWkUgbWV0cmljCisgICAgU3RyaW5nIHN0YXRTdHJpbmcgPSBTdHJpbmcoKTsgCisgICAgV2Vi
TWVtb3J5U3RhdGlzdGljcyBtZW1vcnlTdGF0cyA9IHNhbXBsZVdlYktpdCgpOworCisgICAgaWYg
KCFtZW1vcnlTdGF0cy52YWx1ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRTdHJpbmcuYXBw
ZW5kKG1fc2VwYXJhdG9yKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZW1vcnlT
dGF0cy52YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN0YXRTdHJpbmcuYXBwZW5k
KG1fc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHN0YXRTdHJpbmcuYXBwZW5kKFN0cmluZzo6Zm9y
bWF0KCIlbHUiLCBtZW1vcnlTdGF0cy52YWx1ZXNbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBzdGF0U3RyaW5nLmFwcGVuZChTdHJpbmcoIlxuIikpOworICAgIHdyaXRlVG9GaWxlKG1fc2Ft
cGxlTG9nRmlsZSwgc3RhdFN0cmluZy51dGY4KCkuZGF0YSgpLCBzdGF0U3RyaW5nLnV0ZjgoKS5s
ZW5ndGgoKSk7Cit9CisKK30KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmgJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFRo
ZSBNZW1vcnlTYW1wbGVyIGNsYXNzIHNhbXBsZXMgYSBudW1iZXIgb2YgaW50ZXJuYWwgYW5kIGV4
dGVybmFsIG1lbW9yeSAKKyAqICBtZXRyaWNzIGV2ZXJ5IHNlY29uZCB3aGlsZSBydW5uaW5nLiBT
YW1wbGUgZGF0YSBpcyB3cml0dGVuIHRvIGEgbG9nIGZpbGUuIAorICogIFNhbXBsaW5nIG9jY3Vy
cyBvdmVyIGEgZHVyYXRpb24gc3BlY2lmaWVkIHdoZW4gc3RhcnRlZC4gSWYgZHVyYXRpb24gaXMg
c2V0IAorICogIHRvIDAgKGRlZmF1bHQpLCB0aGUgbWVtb3J5IHNhbXBsZXIgd2lsbCBydW4gaW5k
ZWZpbml0ZWx5IHVudGlsIHRoZSBzdG9wIAorICogIGZ1bmN0aW9uIGlzIGNhbGxlZC4gTWVtb3J5
U2FtcGxlciBhbGxvd3MgdGhlIG9wdGlvbiBvZiBzYW1wbGluZyAiaW4gdXNlIiAKKyAqICBtZW1v
cnkgKGNvbW1pdHRlZCBtZW1vcnkgbWludXMgZnJlZSBsaXN0IGJ5dGUgY291bnQpIG9yIGNvbW1p
dHRlZCBtZW1vcnkgZm9yCisgKiAgYW55IGFsbG9jYXRvciB3aGljaCBrZWVwcyBhIGZyZWUgbGlz
dC4gVGhpcyBpbmNsdWRlcyBGYXN0TWFsbG9jIGFuZCB0aGUgCisgKiAgSmF2YVNjcmlwdENvcmUg
aGVhcCBhdCB0aGlzIHRpbWUuCisgKiAgVGhlIGZvbGxvd2luZyBtZW1vcnkgbWV0cmljcyBhcmUg
cmVjb3JkZWQ6CisgKgorICogICAgICBXZWJDb3JlCisgKiAgICAgICAgICAtIEZhc3RNYWxsb2Mg
YWxsb2NhdGlvbnMgYnl0ZXMgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICog
ICAgICBKYXZhU2NyaXB0Q29yZQorICogICAgICAgICAgLSBHYXJiYWdlIGNvbGxlY3RvciBoZWFw
IGJ5dGVzICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAqICAgICAgICAgIC0g
U3RhY2sgYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdHRlZCBvbmx5
ISkKKyAqICAgICAgICAgIC0gSklUIENvZGUgYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbW1pdHRlZCBvbmx5ISkKKyAqICAgICAgTWFsbG9jIHpvbmVzCisgKiAgICAgICAgICAt
IEluIHVzZSBieXRlcyBmb3IgdGhlIGZvbGxvd2luZyB6b25lczoKKyAqICAgICAgICAgICAgICAq
IERlZmF1bHQgem9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0
ZWQpCisgKiAgICAgICAgICAgICAgKiBEaXNwQ29uIHpvbmUgICAgICAgICAgICAgICAgICAgICAg
ICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICogICAgICAgICAgICAgICogUHVyZ2FibGUgem9u
ZSAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAqICAgICAg
VGFzayBJbmZvCisgKiAgICAgICAgICAtIFJlc2lkZW50IHNpemUgbWVtb3J5IChSU0laRSkKKyAq
LworCisjaWZuZGVmIFdlYk1lbW9yeVNhbXBsZXJfaAorI2RlZmluZSBXZWJNZW1vcnlTYW1wbGVy
X2gKKworI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Rp
bWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0cnVjdCBTeXN0ZW1NYWxsb2NTdGF0czsKKworc3RydWN0IFdlYk1lbW9yeVN0YXRp
c3RpY3MKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOworICAgIFZlY3RvcjxzaXplX3Q+IHZh
bHVlczsKK307CisgICAgCitjbGFzcyBXZWJNZW1vcnlTYW1wbGVyIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKKworcHVibGljOgorICAgIHN0YXRpYyBXZWJNZW1vcnlTYW1wbGVyKiBzaGFyZWQoKTsK
KyAgICB2b2lkIHN0YXJ0KGNvbnN0IENGVGltZUludGVydmFsIGludGVydmFsPTApOworICAgIHZv
aWQgc3RhcnQoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgaW50ZXJ2YWw9MCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAg
Ym9vbCBpc1J1bm5pbmcoKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgV2ViTWVtb3J5U2Ft
cGxlcigpOworICAgIH5XZWJNZW1vcnlTYW1wbGVyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFs
aXplVGVtcExvZ0ZpbGUoKTsKKyAgICB2b2lkIGluaXRpYWxpemVTYW5kYm94ZWRMb2dGaWxlKGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQg
d3JpdGVIZWFkZXJzKCk7CisgICAgdm9pZCBpbml0aWFsaXplVGltZXJzKENGVGltZUludGVydmFs
KTsKKyAgICB2b2lkIHNhbXBsZVRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8V2ViTWVtb3J5U2Ft
cGxlcj4qKTsKKyAgICB2b2lkIHN0b3BUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFdlYk1lbW9y
eVNhbXBsZXI+Kik7CisgICAgdm9pZCBhcHBlbmRDdXJyZW50TWVtb3J5VXNhZ2VUb0ZpbGUoV2Vi
Q29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlJik7CisgICAgCisgICAgU3lzdGVtTWFsbG9jU3RhdHMg
c2FtcGxlU3lzdGVtTWFsbG9jKCkgY29uc3Q7CisgICAgc2l6ZV90IHNhbXBsZVByb2Nlc3NDb21t
aXR0ZWRCeXRlcygpIGNvbnN0OworICAgIFdlYk1lbW9yeVN0YXRpc3RpY3Mgc2FtcGxlV2ViS2l0
KCkgY29uc3Q7CisgICAgU3RyaW5nIHByb2Nlc3NOYW1lKCkgY29uc3Q7CisgICAgCisgICAgV2Vi
Q29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fc2FtcGxlTG9nRmlsZTsKKyAgICBTdHJpbmcgbV9z
YW1wbGVMb2dGaWxlUGF0aDsKKyAgICBTdHJpbmcgbV9zZXBhcmF0b3I7CisgICAgV2ViQ29yZTo6
VGltZXI8V2ViTWVtb3J5U2FtcGxlcj4gbV9zYW1wbGVUaW1lcjsKKyAgICBXZWJDb3JlOjpUaW1l
cjxXZWJNZW1vcnlTYW1wbGVyPiBtX3N0b3BUaW1lcjsKKyAgICBib29sIG1faXNSdW5uaW5nOwor
ICAgIENGVGltZUludGVydmFsIG1fcnVubmluZ1RpbWU7CisgICAgUmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+IG1fc2FtcGxlTG9nU2FuZGJveEV4dGVuc2lvbjsKK307CisKK30KKworI2VuZGlmCklu
ZGV4OiBXZWJLaXQyL1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQkocmV2aXNpb24g
NzUwMjIpCisrKyBXZWJLaXQyL1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwzMCBAQCB2b2lkIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZShjb25zCiAgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsK
ICAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uID0gV0tTYW5kYm94RXh0ZW5zaW9uQ3JlYXRl
KGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIHdrU2FuZGJveEV4dGVuc2lv
blR5cGUodHlwZSkpOwogfQorICAgIAorU3RyaW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFu
ZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsK
KyAgICAKKyAgICBWZWN0b3I8Y2hhcj4gcGF0aChQQVRIX01BWCk7CisgICAgaWYgKCFjb25mc3Ry
KF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwgcGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIAorICAgIC8vIFNocmluayB0aGUgdmVjdG9yLiAg
IAorICAgIHBhdGguc2hyaW5rKHN0cmxlbihwYXRoLmRhdGEoKSkpOworICAgIEFTU0VSVChwYXRo
Lmxhc3QoKSA9PSAnLycpOworICAgIAorICAgIC8vIEFwcGVuZCB0aGUgZmlsZSBuYW1lLiAgICAK
KyAgICBwYXRoLmFwcGVuZChwcmVmaXgudXRmOCgpLmRhdGEoKSwgcHJlZml4Lmxlbmd0aCgpKTsK
KyAgICBwYXRoLmFwcGVuZCgnXDAnKTsKKyAgICAKKyAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5z
aW9uID0gV0tTYW5kYm94RXh0ZW5zaW9uQ3JlYXRlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoLmRhdGEoKSkuZGF0YSgpLCB3a1NhbmRib3hFeHRlbnNpb25UeXBlKHR5cGUpKTsKKworICAg
IGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbikgeworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcocGF0aC5kYXRhKCkpOworfQogCiBTYW5kYm94
RXh0ZW5zaW9uOjpTYW5kYm94RXh0ZW5zaW9uKGNvbnN0IEhhbmRsZSYgaGFuZGxlKQogICAgIDog
bV9zYW5kYm94RXh0ZW5zaW9uKGhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pCkluZGV4OiBXZWJL
aXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisj
aW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
TWVtb3J5U3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1h
Y2gvdGFzay5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90eXBlcy5oPgorI2luY2x1ZGUgPG1hbGxv
Yy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNET01XaW5kb3cuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0cnVjdCBTeXN0ZW1NYWxsb2NTdGF0cyB7Cisg
ICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBkZWZhdWx0TWFsbG9jWm9uZVN0YXRzOworICAgIG1hbGxv
Y19zdGF0aXN0aWNzX3QgZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lU3RhdHM7CisgICAg
bWFsbG9jX3N0YXRpc3RpY3NfdCBwdXJnZWFibGVNYWxsb2Nab25lU3RhdHM7Cit9OworCitTeXN0
ZW1NYWxsb2NTdGF0cyBXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVTeXN0ZW1NYWxsb2MoKSBjb25z
dAoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0TWFsbG9jWm9uZU5hbWUgPSAiRGVm
YXVsdE1hbGxvY1pvbmUiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkaXNwYXRjaENvbnRpbnVh
dGlvbk1hbGxvY1pvbmVOYW1lID0gIkRpc3BhdGNoQ29udGludWF0aW9ucyI7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHB1cmdlYWJsZU1hbGxvY1pvbmVOYW1lID0gIkRlZmF1bHRQdXJnZWFibGVN
YWxsb2Nab25lIjsKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBtYWxsb2NTdGF0czsKKyAgICB2bV9h
ZGRyZXNzX3QqIHpvbmVzOworICAgIHVuc2lnbmVkIGNvdW50OworICAgIAorICAgIC8vIFplcm8g
b3V0IHRoZSBzdHJ1Y3R1cmVzIGluIGNhc2UgYSB6b25lIGlzIG1pc3NpbmcKKyAgICBtYWxsb2Nf
c3RhdGlzdGljc190IHN0YXRzOworICAgIHN0YXRzLmJsb2Nrc19pbl91c2UgPSAwOworICAgIHN0
YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5tYXhfc2l6ZV9pbl91c2UgPSAwOworICAg
IHN0YXRzLnNpemVfYWxsb2NhdGVkID0gMDsKKyAgICBtYWxsb2NTdGF0cy5kZWZhdWx0TWFsbG9j
Wm9uZVN0YXRzID0gc3RhdHM7CisgICAgbWFsbG9jU3RhdHMuZGlzcGF0Y2hDb250aW51YXRpb25N
YWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICBtYWxsb2NTdGF0cy5wdXJnZWFibGVNYWxsb2Na
b25lU3RhdHMgPSBzdGF0czsKKyAgICAKKyAgICBtYWxsb2NfZ2V0X2FsbF96b25lcyhtYWNoX3Rh
c2tfc2VsZigpLCAwLCAmem9uZXMsICZjb3VudCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGNvbnN0IGNoYXIqIG5hbWUgPSBtYWxsb2Nf
Z2V0X3pvbmVfbmFtZShyZWludGVycHJldF9jYXN0PG1hbGxvY196b25lX3QqPih6b25lc1tpXSkp
KSB7CisgICAgICAgICAgICBzdGF0cy5ibG9ja3NfaW5fdXNlID0gMDsKKyAgICAgICAgICAgIHN0
YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICAgICAgICAgIHN0YXRzLm1heF9zaXplX2luX3VzZSA9
IDA7CisgICAgICAgICAgICBzdGF0cy5zaXplX2FsbG9jYXRlZCA9IDA7CQorICAgICAgICAgICAg
bWFsbG9jX3pvbmVfc3RhdGlzdGljcyhyZWludGVycHJldF9jYXN0PG1hbGxvY196b25lX3QqPih6
b25lc1tpXSksICZzdGF0cyk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCBkZWZhdWx0
TWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLmRlZmF1bHRNYWxs
b2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAobmFtZSwg
ZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lTmFtZSkpCisgICAgICAgICAgICAgICAgbWFs
bG9jU3RhdHMuZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgcHVyZ2VhYmxlTWFsbG9jWm9uZU5hbWUp
KQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLnB1cmdlYWJsZU1hbGxvY1pvbmVTdGF0cyA9
IHN0YXRzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYWxsb2NTdGF0czsKK30KKwor
c2l6ZV90IFdlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcygpIGNv
bnN0Cit7CisgICAgdGFza19iYXNpY19pbmZvXzY0IHRhc2tJbmZvOworICAgIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QgY291bnQgPSBUQVNLX0JBU0lDX0lORk9fNjRfQ09VTlQ7CisgICAgdGFza19p
bmZvKG1hY2hfdGFza19zZWxmKCksIFRBU0tfQkFTSUNfSU5GT182NCwgcmVpbnRlcnByZXRfY2Fz
dDx0YXNrX2luZm9fdD4oJnRhc2tJbmZvKSwgJmNvdW50KTsKKyAgICByZXR1cm4gdGFza0luZm8u
cmVzaWRlbnRfc2l6ZTsKK30KKworU3RyaW5nIFdlYk1lbW9yeVNhbXBsZXI6OnByb2Nlc3NOYW1l
KCkgY29uc3QKK3sKKyAgICBOU1N0cmluZyAqYXBwTmFtZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gYnVuZGxlSWRlbnRpZmllcl07CisgICAgaWYgKCFhcHBOYW1lKQorICAgICAgICBhcHBOYW1l
ID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV07CisgICAgcmV0dXJu
IFN0cmluZyhhcHBOYW1lKTsKK30KKyAgCitXZWJNZW1vcnlTdGF0aXN0aWNzIFdlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVdlYktpdCgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHRvdGFsQnl0ZXNJblVz
ZSA9IDAsIHRvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOyAKKyAgICAKKyAgICBXZWJNZW1vcnlTdGF0
aXN0aWNzIHdlYktpdE1lbW9yeVN0YXRzOworICAgIAorICAgIEZhc3RNYWxsb2NTdGF0aXN0aWNz
IGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygpOworICAg
IHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNJblVzZSA9IGZhc3RNYWxsb2NTdGF0aXN0aWNzLmNvbW1p
dHRlZFZNQnl0ZXMgLSBmYXN0TWFsbG9jU3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzOworICAgIHNp
emVfdCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQgPSBmYXN0TWFsbG9jU3RhdGlzdGljcy5jb21t
aXR0ZWRWTUJ5dGVzOworICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVz
ZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsK
KyAgICAKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEhlYXA6
OlN0YXRpc3RpY3MgaGVhcE1lbW9yeVN0YXRzID0gaGVhcFN0YXRpc3RpY3MoSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBo
ZWFwTWVtb3J5U3RhdHMuc2l6ZSAtIGhlYXBNZW1vcnlTdGF0cy5mcmVlOworICAgIHNpemVfdCBq
c2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBoZWFwTWVtb3J5U3RhdHMuc2l6ZTsKKyAgICB0b3RhbEJ5
dGVzSW5Vc2UgKz0ganNjSGVhcEJ5dGVzSW5Vc2U7CisgICAgdG90YWxCeXRlc0NvbW1pdHRlZCAr
PSBqc2NIZWFwQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgR2xvYmFsTWVtb3J5U3RhdGlzdGlj
cyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKKyAgICB0b3Rh
bEJ5dGVzSW5Vc2UgKz0gZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRlcyArIGdsb2JhbE1lbW9y
eVN0YXRzLkpJVEJ5dGVzOworICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0gZ2xvYmFsTWVtb3J5
U3RhdHMuc3RhY2tCeXRlcyArIGdsb2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzOworICAgIAorICAg
IFN5c3RlbU1hbGxvY1N0YXRzIHN5c3RlbVN0YXRzID0gc2FtcGxlU3lzdGVtTWFsbG9jKCk7Cisg
ICAgCisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSA9IHN5c3RlbVN0YXRz
LmRlZmF1bHRNYWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IGRpc3BhdGNo
Q29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5kaXNwYXRjaENv
bnRpbnVhdGlvbk1hbGxvY1pvbmVTdGF0cy5zaXplX2luX3VzZTsKKyAgICBzaXplX3QgcHVyZ2Vh
YmxlTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVNYWxsb2Nab25l
U3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21t
aXR0ZWQgPSBzeXN0ZW1TdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0YXRzLnNpemVfYWxsb2NhdGVk
OworICAgIHNpemVfdCBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0NvbW1pdHRl
ZCA9IHN5c3RlbVN0YXRzLmRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0YXRzLnNpemVf
YWxsb2NhdGVkOworICAgIHNpemVfdCBwdXJnZWFibGVNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQg
PSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMuc2l6ZV9hbGxvY2F0ZWQ7Cisg
ICAgdG90YWxCeXRlc0luVXNlICs9IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSArIGRpc3Bh
dGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgKyBwdXJnZWFibGVNYWxsb2Nab25l
Qnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGRlZmF1bHRNYWxsb2Nab25l
Qnl0ZXNDb21taXR0ZWQgKyBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0NvbW1p
dHRlZCArIHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0NvbW1pdHRlZDsKKyAgICAKKyAgICBzaXpl
X3QgcmVzaWRlbnRTaXplID0gc2FtcGxlUHJvY2Vzc0NvbW1pdHRlZEJ5dGVzKCk7CisKKyAgICBD
RkFic29sdXRlVGltZSBub3cgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKKyAgICAgICAg
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJUaW1lc3RhbXAiKSk7
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChub3cpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiVG90YWwgQnl0ZXMgb2YgTWVtb3J5IEluIFVz
ZSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHRvdGFsQnl0ZXNJblVz
ZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJGYXN0IE1hbGxv
YyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZmFz
dE1hbGxvY0J5dGVzSW5Vc2UpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0
cmluZygiRGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy52YWx1ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSk7CisgICAgd2ViS2l0
TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJEaXNwYXRjaCBDb250aW51YXRpb24gTWFs
bG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChk
aXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1v
cnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlB1cmdlYWJsZSBNYWxsb2MgWm9uZSBCeXRlcyIp
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHB1cmdlYWJsZU1hbGxvY1pv
bmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmco
IkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMu
YXBwZW5kKGpzY0hlYXBCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFw
cGVuZChTdHJpbmcoIlRvdGFsIEJ5dGVzIG9mIENvbW1pdHRlZCBNZW1vcnkiKSk7CisgICAgd2Vi
S2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZCh0b3RhbEJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3
ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkZhc3QgTWFsbG9jIFpvbmUgQnl0
ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChmYXN0TWFsbG9jQnl0
ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygi
RGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1
ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGlzcGF0Y2ggQ29udGludWF0aW9uIE1hbGxv
YyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZGlz
cGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiUHVyZ2VhYmxlIE1hbGxvYyBab25lIEJ5dGVz
IikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQocHVyZ2VhYmxlTWFsbG9j
Wm9uZUJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChT
dHJpbmcoIkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52
YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRlc0NvbW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3Rh
dHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0IFN0YWNrIEJ5dGVzIikpOworICAgIHdl
YktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRl
cyk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0
IEpJVCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGdsb2Jh
bE1lbW9yeVN0YXRzLkpJVEJ5dGVzKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVu
ZChTdHJpbmcoIlJlc2lkZW50IFNpemUiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVz
LmFwcGVuZChyZXNpZGVudFNpemUpOworICAgIAorICAgIHJldHVybiB3ZWJLaXRNZW1vcnlTdGF0
czsKK30KKyAgICAKK30KKwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHJldmlzaW9u
IDc1MDIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgor
I2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgog
I2luY2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2Fn
ZUtpbmRzLmgiCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC04Niw2ICs4OCw4IEBA
IFdlYkNvbnRleHQ6OldlYkNvbnRleHQoUHJvY2Vzc01vZGVsIHByb2MKICAgICAsIG1fY2FjaGVN
b2RlbChDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIpCiAgICAgLCBtX2NsZWFyUmVzb3VyY2VDYWNo
ZXNGb3JOZXdXZWJQcm9jZXNzKGZhbHNlKQogICAgICwgbV9jbGVhckFwcGxpY2F0aW9uQ2FjaGVG
b3JOZXdXZWJQcm9jZXNzKGZhbHNlKQorICAgICwgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZChmYWxz
ZSkKKyAgICAsIG1fbWVtb3J5U2FtcGxlckludGVydmFsKDE0MDAuMCkKICAgICAsIG1fZGF0YWJh
c2VNYW5hZ2VyUHJveHkoV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmNyZWF0ZSh0aGlzKSkKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgLCBtX3Nob3VsZFBhaW50TmF0aXZlQ29udHJvbHModHJ1ZSkK
QEAgLTE5NSw2ICsxOTksMTkgQEAgdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlkRmluaXNoTGF1
bmNoaQogICAgIEFTU0VSVF9VTlVTRUQocHJvY2VzcywgcHJvY2VzcyA9PSBtX3Byb2Nlc3MpOwog
CiAgICAgbV92aXNpdGVkTGlua1Byb3ZpZGVyLnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoKTsK
KyAgICAKKyAgICAvLyBTb21ldGltZXMgdGhlIG1lbW9yeVNhbXBsZXIgZ2V0cyBpbml0aWFsaXpl
ZCBhZnRlciBwcm9jZXNzIGluaXRpYWxpemF0aW9uIGhhcyBoYXBwZW5lZCBidXQgYmVmb3JlIHRo
ZSBwcm9jZXNzIGhhcyBmaW5pc2hlZCBsYXVuY2hpbmcKKyAgICAvLyBzbyBjaGVjayBpZiBpdCBu
ZWVkcyB0byBiZSBzdGFydGVkIGhlcmUKKyAgICBpZihtX21lbW9yeVNhbXBsZXJFbmFibGVkKSB7
CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW1wbGVMb2dTYW5kYm94SGFuZGxl
OworICAgICAgICAvLyB3YXkgdG8gZ2V0IG5hbWUgb2YgcHJvY2VzcyBmcm9tIFVJIHNpZGU/Cisg
ICAgICAgIAorICAgICAgICBDRkFic29sdXRlVGltZSBub3cgPSBDRkFic29sdXRlVGltZUdldEN1
cnJlbnQoKTsKKyAgICAgICAgU3RyaW5nIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU3RyaW5nOjpmb3Jt
YXQoIldlYlByb2Nlc3MlbGx1Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG5vdykpOworICAgICAg
ICBzYW1wbGVMb2dGaWxlUGF0aCA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRl
bXBvcmFyeUZpbGUoc2FtcGxlTG9nRmlsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OldyaXRlT25s
eSwgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVtb3J5U2FtcGxlcihzYW1wbGVMb2dT
YW5kYm94SGFuZGxlLCBzYW1wbGVMb2dGaWxlUGF0aCwgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwp
LCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQ29udGV4dDo6cHJvY2Vzc0RpZENsb3NlKFdlYlBy
b2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTUyMSw1ICs1MzgsNDIgQEAgdm9pZCBXZWJDb250ZXh0
OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGUoKQogCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpDbGVhckFwcGxpY2F0aW9uQ2FjaGUoKSwgMCk7CiB9CisgICAgCit2b2lk
IFdlYkNvbnRleHQ6OnN0YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBDRlRpbWVJbnRlcnZhbCBpbnRl
cnZhbCkKK3sgICAgCisgICAgLy8gRm9yIG5ldyBXZWJQcm9jZXNzZXMgd2Ugd2lsbCBhbHNvIHdh
bnQgdG8gc3RhcnQgdGhlIE1lbW9yeSBTYW1wbGVyCisgICAgbV9tZW1vcnlTYW1wbGVyRW5hYmxl
ZCA9IHRydWU7CisgICAgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAK
KyAgICAvLyBGb3IgVUlQcm9jZXNzCisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0
YXJ0KGludGVydmFsKTsKKyAgICAKKyAgICBpZiAoIWhhc1ZhbGlkUHJvY2VzcygpKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gRm9yIFdlYlByb2Nlc3MKKyAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9nU2FuZGJveEhhbmRsZTsgICAgCisgICAgQ0ZB
YnNvbHV0ZVRpbWUgbm93ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CisgICAgU3RyaW5n
IHNhbXBsZUxvZ0ZpbGVQYXRoID0gU3RyaW5nOjpmb3JtYXQoIldlYlByb2Nlc3MlbGx1Iiwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG5vdykpOworICAgIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShzYW1wbGVMb2dGaWxlUGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6V3JpdGVPbmx5LCBzYW1wbGVMb2dTYW5kYm94SGFuZGxlKTsK
KyAgICAKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVt
b3J5U2FtcGxlcihzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBzYW1wbGVMb2dGaWxlUGF0aCwgaW50
ZXJ2YWwpLCAwKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpzdG9wTWVtb3J5U2FtcGxlcigpCit7
ICAgIAorICAgIC8vIEZvciBXZWJQcm9jZXNzCisgICAgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCA9
IGZhbHNlOworICAgIAorICAgIC8vIEZvciBVSVByb2Nlc3MKKyAgICBXZWJNZW1vcnlTYW1wbGVy
OjpzaGFyZWQoKS0+c3RvcCgpOworICAgIAorICAgIGlmICghaGFzVmFsaWRQcm9jZXNzKCkpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCksIDApOworfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHJldmlzaW9uIDc1MDIyKQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
NiArMTA4LDkgQEAgcHVibGljOgogICAgIENhY2hlTW9kZWwgY2FjaGVNb2RlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVNb2RlbDsgfQogICAgIHZvaWQgY2xlYXJSZXNvdXJjZUNhY2hlcygpOwog
ICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkNhY2hlKCk7CisgICAgCisgICAgdm9pZCBzdGFydE1l
bW9yeVNhbXBsZXIoY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwpOworICAgIHZvaWQgc3Rv
cE1lbW9yeVNhbXBsZXIoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2b2lkIHNldFNob3Vs
ZFBhaW50TmF0aXZlQ29udHJvbHMoYm9vbCk7CkBAIC0xODYsNiArMTg5LDkgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgbV9jbGVhclJlc291cmNlQ2FjaGVzRm9yTmV3V2ViUHJvY2VzczsKICAgICBi
b29sIG1fY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yTmV3V2ViUHJvY2VzczsKKyAgICAKKyAgICBi
b29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQ7CisgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9tZW1vcnlT
YW1wbGVySW50ZXJ2YWw7CiAKICAgICBSZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+IG1f
ZGF0YWJhc2VNYW5hZ2VyUHJveHk7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcAkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsMyArMTU1LDEzIEBAIFdLRGF0YWJhc2VN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldERhdGFiYXMKIHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBs
KGNvbnRleHRSZWYpLT5kYXRhYmFzZU1hbmFnZXJQcm94eSgpKTsKIH0KKwordm9pZCBXS0NvbnRl
eHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLRG91YmxlUmVm
IGludGVydmFsKQoreworICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c3RhcnRNZW1vcnlTYW1wbGVy
KHRvSW1wbChpbnRlcnZhbCktPnZhbHVlKCkpOworfQorCit2b2lkIFdLQ29udGV4dFN0b3BNZW1v
cnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQoreworICAgIHRvSW1wbChjb250ZXh0
UmVmKS0+c3RvcE1lbW9yeVNhbXBsZXIoKTsKK30KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5oCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDkgQEAgV0tfRVhQT1JUIFdL
Q2FjaGVNb2RlbCBXS0NvbnRleHRHZXRDYWNoZQogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRD
bGVhclJlc291cmNlQ2FjaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCB2b2lk
IFdLQ29udGV4dENsZWFyQXBwbGljYXRpb25DYWNoZShXS0NvbnRleHRSZWYgY29udGV4dCk7Cisg
ICAgCitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0
UmVmIGNvbnRleHQsIFdLRG91YmxlUmVmIGludGVydmFsKTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAogV0tfRVhQT1JU
IFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldERhdGFiYXNlTWFuYWdlcihXS0NvbnRl
eHRSZWYgY29udGV4dCk7CiAKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNiArMjYyLDkgQEAKIAkJNzYy
Qjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4
MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4REMyRUY1MzA0ODZBNjk0MDA5OEIyMTYgLyogSW5m
b1BsaXN0LnN0cmluZ3MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4OUMxNjY2RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLzsg
fTsKIAkJOERDMkVGNTcwNDg2QTY5NDAwOThCMjE2IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDEwNThDN0IxRkVBNTU4
NUUxMUNBMkNCQiAvKiBDb2NvYS5mcmFtZXdvcmsgKi87IH07CisJCTkwOTg1NEVDMTJCQzRFMTcw
MDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1v
cnlTYW1wbGVyLmNwcCAqLzsgfTsKKwkJOTA5ODU0RUQxMkJDNEUxODAwMEFEMDgwIC8qIFdlYk1l
bW9yeVNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkwNTYyMEU5MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmggKi87IH07
CisJCTkwOTg1NEVFMTJCQzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU1MTJC
QzI0NzYwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSAqLzsgfTsKIAkJOTM1RUVC
OUIxMjc3NjE3QzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1RUVCOTgxMjc3NjE2
RDAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNUVFQjlFMTI3NzYxQUMwMDMz
MjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVFRUI5NTEyNzc2MTZEMDAzMzIyQjggLyogV0tC
dW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwICovOyB9OwogCQk5MzVFRUI5RjEyNzc2MUFDMDAzMzIy
QjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUVFQjk2MTI3NzYxNkQwMDMzMjJCOCAvKiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC05NDMsNiArOTQ2LDkgQEAKIAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5
IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLUHJlZmVyZW5jZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CThEQzJFRjVBMDQ4NkE2OTQwMDk4QjIxNiAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5w
bGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4REMyRUY1QjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0Mi5mcmFtZXdvcmsgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3Jr
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXQyLmZyYW1ld29yazsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8q
IFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViTWVtb3J5U2FtcGxlci5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTkwNTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk1lbW9yeVNhbXBsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYg
LyogV2ViTWVtb3J5U2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJNZW1vcnlTYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjhG
MTI3NzYxNUQwMDMzMjJCOCAvKiBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3
YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjkwMTI3NzYx
NUQwMDMzMjJCOCAvKiBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzVFRUI5MTEyNzc2MTVEMDAzMzIyQjggLyog
SW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjYzLDYgKzE2NjksOCBAQAogCQkJCUJD
Q0Y2QUJBMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5jcHAgKi8sCiAJCQkJQkNDRjZBQkIx
MkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdlLmggKi8sCiAJCQkJQzAzMzdERDIxMjdBMkEwRTAw
OEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQuY3BwICovLAorCQkJCTkwNTYyMEU4MTJCQzI0OEIw
MDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLywKKwkJCQk5MDU2MjBFOTEyQkMyNDhC
MDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5oICovLAogCQkJCUMwMzM3REFGMTI3QTI4RDAw
MDhGRjRGNCAvKiBXZWJNb3VzZUV2ZW50LmNwcCAqLywKIAkJCQlCQ0Y2OUY5ODExNzZDRUQ2MDA0
NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGFTdG9yZS5oICovLAogCQkJCUJDMzNERDY3MTIzODQ2
NDYwMDM2MEYzRiAvKiBXZWJOdW1iZXIuaCAqLywKQEAgLTIxNTQsNiArMjE2Miw3IEBACiAJCQkJ
QkNFMjMyNjIxMjJDNkNGMzAwRDVDMzVBIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSAq
LywKIAkJCQlCQzExMUI1QjExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5LmggKi8s
CiAJCQkJQkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLywK
KwkJCQk5MDU2MjBFNTEyQkMyNDc2MDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5tYWMubW0g
Ki8sCiAJCQkJQkNFMjMxQzAxMjJDNDY2RTAwRDVDMzVBIC8qIFdlYlVSTFJlcXVlc3RNYWMubW0g
Ki8sCiAJCQkJQkM5MEExRDUxMjJERDY2QTAwQ0M4QzUwIC8qIFdlYlVSTFJlc3BvbnNlTWFjLm1t
ICovLAogCQkJCTFBQUI0QUE5MTI5NkYxNTQwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uTWFj
Lm1tICovLApAQCAtMjgyOSw2ICsyODM4LDcgQEAKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5
ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg1OEEyMDEyQzAzNTdC
MDBFREVCMkUgLyogV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUE0MTdDQjEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTkwOTg1NEVEMTJCQzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2NzJEMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5B
bmREYXRhYmFzZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2QUJEMTJDOTFFRjkwMDhGOUMz
NSAvKiBXZWJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjYzLDYgKzMyNzMsOCBAQAogCQkJ
CTFBNEE5QzlBMTJCODIxQ0QwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUJDODU4QTIxMTJDMDM1N0IwMEVERUIyRSAvKiBXZWJSZXNvdXJj
ZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBNDE3RUYxMkMwMEQ4NzAwMkJF
NjdCIC8qIFRleHRDaGVja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTA5ODU0RUMxMkJD
NEUxNzAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTA5ODU0RUUxMkJDNEUxODAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNDRjY3MzMxMkM3RjE1QzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFi
YXNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGNkFCQzEyQzkxRUY5MDA4RjlDMzUgLyog
V2ViSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjZBQzIxMkM5MUYzNDAwOEY5QzM1
IC8qIFdLSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEyIEBACiAjaW5jbHVkZSAiSW5qZWN0
ZWRCdW5kbGVNZXNzYWdlS2luZHMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVVzZXJNZXNz
YWdlQ29kZXJzLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRl
bnNpb24uaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXIuaCIKICNp
bmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIKICNpbmNs
dWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgog
I2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtNjExLDYgKzYxMywxNiBAQCB2
b2lkIFdlYlByb2Nlc3M6OmNhbmNlbERvd25sb2FkKHVpbnQ2NF90CiAgICAgRG93bmxvYWRNYW5h
Z2VyOjpzaGFyZWQoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElEKTsKIH0KIAordm9pZCBXZWJQ
cm9jZXNzOjpzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBzYW1wbGVMb2dGaWxlSGFuZGxlLCBjb25zdCBTdHJpbmcmIHNhbXBsZUxvZ0ZpbGVQYXRoLCBj
b25zdCBDRlRpbWVJbnRlcnZhbCBpbnRlcnZhbCkKK3sKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpz
aGFyZWQoKS0+c3RhcnQoc2FtcGxlTG9nRmlsZUhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGlu
dGVydmFsKTsKK30KKyAgICAKK3ZvaWQgV2ViUHJvY2Vzczo6c3RvcE1lbW9yeVNhbXBsZXIoKQor
eworICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7Cit9CisKIHZvaWQgV2Vi
UHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0
Q2hlY2tlclN0YXRlKQogewogICAgIG1fdGV4dENoZWNrZXJTdGF0ZSA9IHRleHRDaGVja2VyU3Rh
dGU7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDc1MDIyKQorKysgV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkNhY2hlTW9kZWwuaCIKICNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIK
ICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIK
ICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgi
CiAjaW5jbHVkZSAiVmlzaXRlZExpbmtUYWJsZS5oIgpAQCAtMTMzLDYgKzEzNCw5IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICB2b2lkIGNs
ZWFyQXBwbGljYXRpb25DYWNoZSgpOwogCisgICAgdm9pZCBzdGFydE1lbW9yeVNhbXBsZXIoY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgQ0ZUaW1l
SW50ZXJ2YWwpOworICAgIHZvaWQgc3RvcE1lbW9yeVNhbXBsZXIoKTsKKwogICAgIHZvaWQgY2Fu
Y2VsRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCk7CiAKICAgICB2b2lkIHNldFRleHRDaGVj
a2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYpOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1MDIyKQorKysgV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDkgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyB7CiAKICAgICBDbGVhclJlc291cmNlQ2Fj
aGVzKCk7CiAgICAgQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKCk7CisgICAgCisgICAgdm9pZCBTdGFy
dE1lbW9yeVNhbXBsZXIoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9n
RmlsZUhhbmRsZSwgV1RGOjpTdHJpbmcgc2FtcGxlTG9nRmlsZVBhdGgsIENGVGltZUludGVydmFs
IGludGVydmFsKTsKKyAgICB2b2lkIFN0b3BNZW1vcnlTYW1wbGVyKCk7CiAKICAgICAjIERvd25s
b2Fkcy4gVGhpcyBzaG91bGQgcmVhbGx5IGJlIGluIGEgRG93bmxvYWQubWVzc2FnZXMuaW4sIGJ1
dCBpdCBzZWVtZWQgdW5uZWNlc3NhcnkgdG8gY3JlYXRlIGEgbmV3IGZpbGUganVzdCBmb3IKICAg
ICAjIGEgc2luZ2xlIG1lc3NhZ2UuCg==
</data>
<flag name="review"
          id="69196"
          type_id="1"
          status="-"
          setter="slewis"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77957</attachid>
            <date>2011-01-04 18:00:31 -0800</date>
            <delta_ts>2011-01-04 21:06:22 -0800</delta_ts>
            <desc>fix qt</desc>
            <filename>webkit2MemorySampler.txt</filename>
            <type>text/plain</type>
            <size>40347</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzg2NDk2MTc+IE1pZ3JhdGUgbWVtb3J5IHRyYWNraW5nIGZyb20gU2Fm
YXJpIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTA3OTkgQWRkIE1lbW9yeSBTYW1wbGVyIHRvIFdlYktpdAorICAgICAgICAKKyAgICAg
ICAgQWRkIGEgc2FtcGxlciBmb3IgcHJpbnRpbmcgb2ZmIHByb2Nlc3MgbWVtb3J5IHN0YXRpc3Rp
Y3MuCisgICAgICAgIFRoaXMgdG9vbCBjYW4gdHJhY2s6CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgV2ViQ29yZQorICAgICAgICAgICAgICAgICAgIC0gRmFzdE1hbGxvYyBhbGxv
Y2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgICAgICAg
ICAgICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAgICAgICAgICAtIEdhcmJhZ2UgY29s
bGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAg
ICAgICAgICAgICAgICAgIC0gU3RhY2sgYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbW1pdHRlZCBvbmx5ISkKKyAgICAgICAgICAgICAgICAgICAtIEpJVCBDb2RlIGJ5dGVz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0ZWQgb25seSEpCisgICAgICAgICAg
ICAgICAgTWFsbG9jIHpvbmVzCisgICAgICAgICAgICAgICAgICAgLSBJbiB1c2UgYnl0ZXMgZm9y
IHRoZSBmb2xsb3dpbmcgem9uZXM6CisgICAgICAgICAgICAgICAgICAgICAgICogRGVmYXVsdCB6
b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgKiBEaXNwQ29uIHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAg
IChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAgICAgICAgICAgICAqIFB1cmdhYmxl
IHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgICAg
ICAgICAgICAgICAgVGFzayBJbmZvCisgICAgICAgICAgICAgICAgICAgLSBSZXNpZGVudCBzaXpl
IG1lbW9yeSAoUlNJWkUpCisgICAgICAgIAorICAgICAgICAgICAgICAgIERhdGEgY29sbGVjdGVk
IGlzIGR1bXBlZCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAgICAgICAKKyAgICAgICAgQ3JlYXRl
IGEgc2FuZGJveCBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4KKyAgICAgICAgKiBTaGFyZWQvU2FuZGJv
eEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JUZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NhbmRib3hFeHRl
bnNpb25NYWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclRlbXBvcmFyeUZpbGUpOgorICAgICAgICAKKyAgICAgICAgTWVtb3J5IFNhbXBsZXIg
ZmlsZXMKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6V2ViTWVtb3J5U2FtcGxlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1l
bW9yeVNhbXBsZXI6OnN0b3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjpp
c1J1bm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjppbml0aWFsaXpl
VGVtcExvZ0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjppbml0aWFs
aXplU2FuZGJveGVkTG9nRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6
OndyaXRlSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBs
ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVyOjpzdG9wVGlt
ZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OmFwcGVuZEN1cnJl
bnRNZW1vcnlVc2FnZVRvRmlsZSk6CisgICAgICAgICogU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIu
aDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbTog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVN5c3RlbU1h
bGxvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVByb2Nlc3ND
b21taXR0ZWRCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnByb2Nl
c3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0
KToKKyAgICAgICAgCisgICAgICAgIEFQSSB0byBzdGFydCBhbmQgc3RvcCBVSVByb2Nlc3MgYW5k
IFdlYlByb2Nlc3Mgc2FtcGxpbmcuCisgICAgICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U3RhcnRNZW1vcnlTYW1wbGVyKToK
KyAgICAgICAgKFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgIAorICAgICAgICBTZW5kIG1lc3NhZ2VzIHRv
IFdlYlByb2Nlc3MgdG8gc3RhcnQgYW5kIHN0b3AgbWVtb3J5IHNhbXBsaW5nLgorICAgICAgICAK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0Ojpwcm9j
ZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c3Rh
cnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c3RvcE1lbW9y
eVNhbXBsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6CisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnN0YXJ0TWVtb3J5
U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnN0b3BNZW1vcnlTYW1wbGVy
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTEtMDEtMDQgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJL
aXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkKIHR5cGVkZWYg
c3RydWN0IF9fV0tTYW5kYm94RXh0ZW5zaW9uKiBXS1NhbmRib3hFeHRlbnNpb25SZWY7CkBAIC02
OSw2ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+IGNyZWF0ZShjb25zdCBIYW5kbGUmKTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVIYW5k
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhhbmRsZSYpOworICAgIHN0YXRpYyBT
dHJpbmcgY3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwg
VHlwZSB0eXBlLCBIYW5kbGUmKTsKICAgICB+U2FuZGJveEV4dGVuc2lvbigpOwogCiAgICAgYm9v
bCBpbnZhbGlkYXRlKCk7CkBAIC04OSw2ICs5MSw3IEBAIGlubGluZSB2b2lkIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZTo6ZW4KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZSYpIHsgcmV0dXJuIHRydWU7
IH0KIGlubGluZSBQYXNzUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZShjb25zdCBIYW5kbGUmKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgdm9pZCBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhh
bmRsZSYpIHsgfQoraW5saW5lIFN0cmluZyBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JUZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBUeXBlIHR5cGUsIEhhbmRsZSYp
IHtyZXR1cm4gU3RyaW5nKCk7fQogaW5saW5lIFNhbmRib3hFeHRlbnNpb246On5TYW5kYm94RXh0
ZW5zaW9uKCkgeyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjppbnZhbGlkYXRlKCkg
eyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZSgp
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgor
ICovCisKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIgKnNoYXJlZE1lbW9yeVNhbXBsZXIgPSAw
OworCitXZWJNZW1vcnlTYW1wbGVyKiBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKQoreworICAg
IGlmICghc2hhcmVkTWVtb3J5U2FtcGxlcikKKyAgICAgICAgc2hhcmVkTWVtb3J5U2FtcGxlciA9
IG5ldyBXZWJNZW1vcnlTYW1wbGVyKCk7CisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeVNhbXBsZXI7
Cit9CisKK1dlYk1lbW9yeVNhbXBsZXI6OldlYk1lbW9yeVNhbXBsZXIoKSAKKyAgICA6IG1fc2Ft
cGxlVGltZXIodGhpcywgJldlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVRpbWVyRmlyZWQpCisgICAg
LCBtX3N0b3BUaW1lcih0aGlzLCAmV2ViTWVtb3J5U2FtcGxlcjo6c3RvcFRpbWVyRmlyZWQpCisg
ICAgLCBtX2lzUnVubmluZyhmYWxzZSkKKyAgICAsIG1fcnVubmluZ1RpbWUoMCkKK3sKK30KKwor
dm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdGFydChjb25zdCBkb3VibGUgaW50ZXJ2YWwpIAorewor
ICAgIGlmIChtX2lzUnVubmluZykgCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbml0aWFs
aXplVGVtcExvZ0ZpbGUoKTsKKyAgICBpbml0aWFsaXplVGltZXJzKGludGVydmFsKTsKK30KKwor
dm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdGFydChjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmIHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIGNvbnN0IFN0cmluZyYgc2FtcGxlTG9nRmlsZVBhdGgs
IGNvbnN0IENGVGltZUludGVydmFsIGludGVydmFsKSAKK3sKKyAgICBpZiAobV9pc1J1bm5pbmcp
IAorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3lzdGVtIHdp
dGhvdXQgU2FuZGJveEV4dGVuc2lvbiB0aGUgaGFuZGxlIGFuZCBmaWxlbmFtZSB3aWxsIGJlIGVt
cHR5CisgICAgaWYgKHNhbXBsZUxvZ0ZpbGVQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBzdGFy
dChpbnRlcnZhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGluaXRp
YWxpemVTYW5kYm94ZWRMb2dGaWxlKHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQ
YXRoKTsKKyAgICBpbml0aWFsaXplVGltZXJzKGludGVydmFsKTsKKyAgIAorfQorCit2b2lkIFdl
Yk1lbW9yeVNhbXBsZXI6OmluaXRpYWxpemVUaW1lcnMoZG91YmxlIGludGVydmFsKQoreworICAg
IG1fc2FtcGxlVGltZXIuc3RhcnRSZXBlYXRpbmcoMSk7CisgICAgcHJpbnRmKCJTdGFydGVkIG1l
bW9yeSBzYW1wbGVyIGZvciBwcm9jZXNzICVzIiwgcHJvY2Vzc05hbWUoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAoaW50ZXJ2YWwgPiAwKSB7CisgICAgICAgIG1fc3RvcFRpbWVyLnN0YXJ0T25l
U2hvdChpbnRlcnZhbCk7CisgICAgICAgIHByaW50ZigiIGZvciBhIGludGVydmFsIG9mICVnIHNl
Y29uZHMiLCBpbnRlcnZhbCk7CisgICAgfQorICAgIHByaW50ZigiOyBTYW1wbGVyIGxvZyBmaWxl
IHN0b3JlZCBhdDogJXNcbiIsIG1fc2FtcGxlTG9nRmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7Cisg
ICAgbV9ydW5uaW5nVGltZSA9IGludGVydmFsOworICAgIG1faXNSdW5uaW5nID0gdHJ1ZTsKK30K
Kwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdG9wKCkgCit7CisgICAgaWYgKCFtX2lzUnVubmlu
ZykgCisgICAgICAgIHJldHVybjsKKyAgICBtX3NhbXBsZVRpbWVyLnN0b3AoKTsKKyAgICBtX3Nh
bXBsZUxvZ0ZpbGUgPSAwOworICAgIHByaW50ZigiU3RvcHBlZCBtZW1vcnkgc2FtcGxlciBmb3Ig
cHJvY2VzcyAlc1xuIiwgcHJvY2Vzc05hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBGbHVz
aCBzdGRvdXQgYnVmZmVyIHNvIHB5dGhvbiBzY3JpcHQgY2FuIGJlIGd1YXJhbnRlZWQgdG8gcmVh
ZCB1cCB0byB0aGlzIHBvaW50LgorICAgIGZmbHVzaChzdGRvdXQpOworICAgIG1faXNSdW5uaW5n
ID0gZmFsc2U7CisgICAgCisgICAgaWYobV9zdG9wVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
bV9zdG9wVGltZXIuc3RvcCgpOworICAgIAorICAgIGlmIChtX3NhbXBsZUxvZ1NhbmRib3hFeHRl
bnNpb24pIHsKKyAgICAgICAgbV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uLT5pbnZhbGlkYXRl
KCk7CisgICAgICAgIG1fc2FtcGxlTG9nU2FuZGJveEV4dGVuc2lvbiA9IDA7CisgICAgfSAgICAK
K30KKworYm9vbCBXZWJNZW1vcnlTYW1wbGVyOjppc1J1bm5pbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2lzUnVubmluZzsKK30KKyAgICAKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlh
bGl6ZVRlbXBMb2dGaWxlKCkKK3sKKyAgICBtX3NhbXBsZUxvZ0ZpbGVQYXRoID0gU3RyaW5nKChv
cGVuVGVtcG9yYXJ5RmlsZShwcm9jZXNzTmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc2FtcGxlTG9n
RmlsZSkpLmRhdGEoKSk7CisgICAgd3JpdGVIZWFkZXJzKCk7Cit9CisKK3ZvaWQgV2ViTWVtb3J5
U2FtcGxlcjo6aW5pdGlhbGl6ZVNhbmRib3hlZExvZ0ZpbGUoY29uc3QgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJiBzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBjb25zdCBTdHJpbmcmIHNhbXBsZUxv
Z0ZpbGVQYXRoKQoreworICAgIG1fc2FtcGxlTG9nU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZShzYW1wbGVMb2dTYW5kYm94SGFuZGxlKTsKKyAgICBpZiAobV9zYW1w
bGVMb2dTYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICBtX3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNp
b24tPmNvbnN1bWUoKTsKKyAgICBtX3NhbXBsZUxvZ0ZpbGVQYXRoID0gc2FtcGxlTG9nRmlsZVBh
dGg7CisgICAgbV9zYW1wbGVMb2dGaWxlID0gb3BlbkZpbGUobV9zYW1wbGVMb2dGaWxlUGF0aCwg
T3BlbkZvcldyaXRlKTsKKyAgICB3cml0ZUhlYWRlcnMoKTsKK30KKwordm9pZCBXZWJNZW1vcnlT
YW1wbGVyOjp3cml0ZUhlYWRlcnMoKQoreworICAgIFN0cmluZyBwcm9jZXNzRGV0YWlscyA9IFN0
cmluZygiUHJvY2VzczogIik7CisgICAgcHJvY2Vzc0RldGFpbHMuYXBwZW5kKHByb2Nlc3NOYW1l
KCkpOworICAgIHByb2Nlc3NEZXRhaWxzLmFwcGVuZChTdHJpbmcoIlxuIikpOworICAgIHdyaXRl
VG9GaWxlKG1fc2FtcGxlTG9nRmlsZSwgcHJvY2Vzc0RldGFpbHMudXRmOCgpLmRhdGEoKSwgcHJv
Y2Vzc0RldGFpbHMudXRmOCgpLmxlbmd0aCgpKTsKKyAgICAKKyAgICBtX3NlcGFyYXRvciA9IFN0
cmluZygiXHQiKTsgICAgCisgICAgU3RyaW5nIGhlYWRlciA9IFN0cmluZygpOyAKKyAgICBXZWJN
ZW1vcnlTdGF0aXN0aWNzIHN0YXRzID0gc2FtcGxlV2ViS2l0KCk7CisgICAgaWYgKCFzdGF0cy5r
ZXlzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRzLmtl
eXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGhlYWRlci5hcHBlbmQobV9zZXBhcmF0b3Ip
OworICAgICAgICAgICAgaGVhZGVyLmFwcGVuZChzdGF0cy5rZXlzW2ldLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICB9CisgICAgfQorICAgIGhlYWRlci5hcHBlbmQoU3RyaW5nKCJcbiIpKTsKKyAg
ICB3cml0ZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUsIGhlYWRlci51dGY4KCkuZGF0YSgpLCBoZWFk
ZXIudXRmOCgpLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVU
aW1lckZpcmVkKFRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+KikKK3sKKyAgICBhcHBlbmRDdXJyZW50
TWVtb3J5VXNhZ2VUb0ZpbGUobV9zYW1wbGVMb2dGaWxlKTsgCit9CisKK3ZvaWQgV2ViTWVtb3J5
U2FtcGxlcjo6c3RvcFRpbWVyRmlyZWQoVGltZXI8V2ViTWVtb3J5U2FtcGxlcj4qKQoreworICAg
IGlmICghbV9pc1J1bm5pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBwcmludGYoIiVnIHNlY29u
ZHMgZWxhcHNlZC4gU3RvcHBpbmcgbWVtb3J5IHNhbXBsZXIuLi5cbiIsIG1fcnVubmluZ1RpbWUp
OworICAgIHN0b3AoKTsKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjphcHBlbmRDdXJyZW50
TWVtb3J5VXNhZ2VUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBmaWxlKQoreworICAgIC8vIENv
bGxlY3Qgc3RhdGlzdGljcyBmcm9tIGFsbG9jYXRvcnMgYW5kIGdldCBSU0laRSBtZXRyaWMKKyAg
ICBTdHJpbmcgc3RhdFN0cmluZyA9IFN0cmluZygpOyAKKyAgICBXZWJNZW1vcnlTdGF0aXN0aWNz
IG1lbW9yeVN0YXRzID0gc2FtcGxlV2ViS2l0KCk7CisKKyAgICBpZiAoIW1lbW9yeVN0YXRzLnZh
bHVlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RhdFN0cmluZy5hcHBlbmQobV9zZXBhcmF0b3Ip
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lbW9yeVN0YXRzLnZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgc3RhdFN0cmluZy5hcHBlbmQobV9zZXBhcmF0b3IpOwor
ICAgICAgICAgICAgc3RhdFN0cmluZy5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiVsdSIsIG1lbW9y
eVN0YXRzLnZhbHVlc1tpXSkpOworICAgICAgICB9CisgICAgfQorICAgIHN0YXRTdHJpbmcuYXBw
ZW5kKFN0cmluZygiXG4iKSk7CisgICAgd3JpdGVUb0ZpbGUobV9zYW1wbGVMb2dGaWxlLCBzdGF0
U3RyaW5nLnV0ZjgoKS5kYXRhKCksIHN0YXRTdHJpbmcudXRmOCgpLmxlbmd0aCgpKTsKK30KKwor
fQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgVGhlIE1lbW9yeVNhbXBsZXIg
Y2xhc3Mgc2FtcGxlcyBhIG51bWJlciBvZiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgbWVtb3J5IAor
ICogIG1ldHJpY3MgZXZlcnkgc2Vjb25kIHdoaWxlIHJ1bm5pbmcuIFNhbXBsZSBkYXRhIGlzIHdy
aXR0ZW4gdG8gYSBsb2cgZmlsZS4gCisgKiAgU2FtcGxpbmcgb2NjdXJzIG92ZXIgYSBkdXJhdGlv
biBzcGVjaWZpZWQgd2hlbiBzdGFydGVkLiBJZiBkdXJhdGlvbiBpcyBzZXQgCisgKiAgdG8gMCAo
ZGVmYXVsdCksIHRoZSBtZW1vcnkgc2FtcGxlciB3aWxsIHJ1biBpbmRlZmluaXRlbHkgdW50aWwg
dGhlIHN0b3AgCisgKiAgZnVuY3Rpb24gaXMgY2FsbGVkLiBNZW1vcnlTYW1wbGVyIGFsbG93cyB0
aGUgb3B0aW9uIG9mIHNhbXBsaW5nICJpbiB1c2UiIAorICogIG1lbW9yeSAoY29tbWl0dGVkIG1l
bW9yeSBtaW51cyBmcmVlIGxpc3QgYnl0ZSBjb3VudCkgb3IgY29tbWl0dGVkIG1lbW9yeSBmb3IK
KyAqICBhbnkgYWxsb2NhdG9yIHdoaWNoIGtlZXBzIGEgZnJlZSBsaXN0LiBUaGlzIGluY2x1ZGVz
IEZhc3RNYWxsb2MgYW5kIHRoZSAKKyAqICBKYXZhU2NyaXB0Q29yZSBoZWFwIGF0IHRoaXMgdGlt
ZS4KKyAqICBUaGUgZm9sbG93aW5nIG1lbW9yeSBtZXRyaWNzIGFyZSByZWNvcmRlZDoKKyAqCisg
KiAgICAgIFdlYkNvcmUKKyAqICAgICAgICAgIC0gRmFzdE1hbGxvYyBhbGxvY2F0aW9ucyBieXRl
cyAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgIEphdmFTY3JpcHRD
b3JlCisgKiAgICAgICAgICAtIEdhcmJhZ2UgY29sbGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAg
ICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICogICAgICAgICAgLSBTdGFjayBieXRlcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWl0dGVkIG9ubHkhKQorICogICAgICAgICAg
LSBKSVQgQ29kZSBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWl0dGVkIG9u
bHkhKQorICogICAgICBNYWxsb2Mgem9uZXMKKyAqICAgICAgICAgIC0gSW4gdXNlIGJ5dGVzIGZv
ciB0aGUgZm9sbG93aW5nIHpvbmVzOgorICogICAgICAgICAgICAgICogRGVmYXVsdCB6b25lICAg
ICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAqICAgICAgICAg
ICAgICAqIERpc3BDb24gem9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVzZSBvciBj
b21taXR0ZWQpCisgKiAgICAgICAgICAgICAgKiBQdXJnYWJsZSB6b25lICAgICAgICAgICAgICAg
ICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICogICAgICBUYXNrIEluZm8KKyAqICAg
ICAgICAgIC0gUmVzaWRlbnQgc2l6ZSBtZW1vcnkgKFJTSVpFKQorICovCisKKyNpZm5kZWYgV2Vi
TWVtb3J5U2FtcGxlcl9oCisjZGVmaW5lIFdlYk1lbW9yeVNhbXBsZXJfaAorCisjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFN5
c3RlbU1hbGxvY1N0YXRzOworCitzdHJ1Y3QgV2ViTWVtb3J5U3RhdGlzdGljcworeworICAgIFZl
Y3RvcjxTdHJpbmc+IGtleXM7CisgICAgVmVjdG9yPHNpemVfdD4gdmFsdWVzOworfTsKKyAgICAK
K2NsYXNzIFdlYk1lbW9yeVNhbXBsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworCitwdWJsaWM6
CisgICAgc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIqIHNoYXJlZCgpOworICAgIHZvaWQgc3RhcnQo
Y29uc3QgZG91YmxlIGludGVydmFsPTApOworICAgIHZvaWQgc3RhcnQoY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlIGludGVydmFsPTAp
OworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNSdW5uaW5nKCkgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIFdlYk1lbW9yeVNhbXBsZXIoKTsKKyAgICB+V2ViTWVtb3J5U2FtcGxlcigp
OworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVRlbXBMb2dGaWxlKCk7CisgICAgdm9pZCBpbml0
aWFsaXplU2FuZGJveGVkTG9nRmlsZShjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHdyaXRlSGVhZGVycygpOworICAgIHZvaWQgaW5pdGlh
bGl6ZVRpbWVycyhkb3VibGUpOworICAgIHZvaWQgc2FtcGxlVGltZXJGaXJlZChXZWJDb3JlOjpU
aW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopOworICAgIHZvaWQgc3RvcFRpbWVyRmlyZWQoV2ViQ29y
ZTo6VGltZXI8V2ViTWVtb3J5U2FtcGxlcj4qKTsKKyAgICB2b2lkIGFwcGVuZEN1cnJlbnRNZW1v
cnlVc2FnZVRvRmlsZShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKKyAgICAKKyAgICBT
eXN0ZW1NYWxsb2NTdGF0cyBzYW1wbGVTeXN0ZW1NYWxsb2MoKSBjb25zdDsKKyAgICBzaXplX3Qg
c2FtcGxlUHJvY2Vzc0NvbW1pdHRlZEJ5dGVzKCkgY29uc3Q7CisgICAgV2ViTWVtb3J5U3RhdGlz
dGljcyBzYW1wbGVXZWJLaXQoKSBjb25zdDsKKyAgICBTdHJpbmcgcHJvY2Vzc05hbWUoKSBjb25z
dDsKKyAgICAKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9zYW1wbGVMb2dGaWxl
OworICAgIFN0cmluZyBtX3NhbXBsZUxvZ0ZpbGVQYXRoOworICAgIFN0cmluZyBtX3NlcGFyYXRv
cjsKKyAgICBXZWJDb3JlOjpUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiBtX3NhbXBsZVRpbWVyOwor
ICAgIFdlYkNvcmU6OlRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+IG1fc3RvcFRpbWVyOworICAgIGJv
b2wgbV9pc1J1bm5pbmc7CisgICAgZG91YmxlIG1fcnVubmluZ1RpbWU7CisgICAgUmVmUHRyPFNh
bmRib3hFeHRlbnNpb24+IG1fc2FtcGxlTG9nU2FuZGJveEV4dGVuc2lvbjsKK307CisKK30KKwor
I2VuZGlmCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQko
cmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwzMCBAQCB2b2lkIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShjb25zCiAgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0
ZW5zaW9uKTsKICAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uID0gV0tTYW5kYm94RXh0ZW5z
aW9uQ3JlYXRlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIHdrU2FuZGJv
eEV4dGVuc2lvblR5cGUodHlwZSkpOwogfQorICAgIAorU3RyaW5nIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUg
dHlwZSwgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0
ZW5zaW9uKTsKKyAgICAKKyAgICBWZWN0b3I8Y2hhcj4gcGF0aChQQVRIX01BWCk7CisgICAgaWYg
KCFjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwgcGF0aC5kYXRhKCksIHBhdGguc2l6
ZSgpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIAorICAgIC8vIFNocmluayB0aGUg
dmVjdG9yLiAgIAorICAgIHBhdGguc2hyaW5rKHN0cmxlbihwYXRoLmRhdGEoKSkpOworICAgIEFT
U0VSVChwYXRoLmxhc3QoKSA9PSAnLycpOworICAgIAorICAgIC8vIEFwcGVuZCB0aGUgZmlsZSBu
YW1lLiAgICAKKyAgICBwYXRoLmFwcGVuZChwcmVmaXgudXRmOCgpLmRhdGEoKSwgcHJlZml4Lmxl
bmd0aCgpKTsKKyAgICBwYXRoLmFwcGVuZCgnXDAnKTsKKyAgICAKKyAgICBoYW5kbGUubV9zYW5k
Ym94RXh0ZW5zaW9uID0gV0tTYW5kYm94RXh0ZW5zaW9uQ3JlYXRlKGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoLmRhdGEoKSkuZGF0YSgpLCB3a1NhbmRib3hFeHRlbnNpb25UeXBlKHR5cGUp
KTsKKworICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbikgeworICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcocGF0aC5kYXRhKCkpOworfQog
CiBTYW5kYm94RXh0ZW5zaW9uOjpTYW5kYm94RXh0ZW5zaW9uKGNvbnN0IEhhbmRsZSYgaGFuZGxl
KQogICAgIDogbV9zYW5kYm94RXh0ZW5zaW9uKGhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pCklu
ZGV4OiBXZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lv
biAwKQorKysgV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoK
KyAqLworCisjaW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvTWVtb3J5U3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2lu
Y2x1ZGUgPG1hY2gvdGFzay5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90eXBlcy5oPgorI2luY2x1
ZGUgPG1hbGxvYy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0cnVjdCBTeXN0ZW1NYWxsb2NT
dGF0cyB7CisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBkZWZhdWx0TWFsbG9jWm9uZVN0YXRzOwor
ICAgIG1hbGxvY19zdGF0aXN0aWNzX3QgZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lU3Rh
dHM7CisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBwdXJnZWFibGVNYWxsb2Nab25lU3RhdHM7Cit9
OworCitTeXN0ZW1NYWxsb2NTdGF0cyBXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVTeXN0ZW1NYWxs
b2MoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0TWFsbG9jWm9uZU5h
bWUgPSAiRGVmYXVsdE1hbGxvY1pvbmUiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkaXNwYXRj
aENvbnRpbnVhdGlvbk1hbGxvY1pvbmVOYW1lID0gIkRpc3BhdGNoQ29udGludWF0aW9ucyI7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHB1cmdlYWJsZU1hbGxvY1pvbmVOYW1lID0gIkRlZmF1bHRQ
dXJnZWFibGVNYWxsb2Nab25lIjsKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBtYWxsb2NTdGF0czsK
KyAgICB2bV9hZGRyZXNzX3QqIHpvbmVzOworICAgIHVuc2lnbmVkIGNvdW50OworICAgIAorICAg
IC8vIFplcm8gb3V0IHRoZSBzdHJ1Y3R1cmVzIGluIGNhc2UgYSB6b25lIGlzIG1pc3NpbmcKKyAg
ICBtYWxsb2Nfc3RhdGlzdGljc190IHN0YXRzOworICAgIHN0YXRzLmJsb2Nrc19pbl91c2UgPSAw
OworICAgIHN0YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5tYXhfc2l6ZV9pbl91c2Ug
PSAwOworICAgIHN0YXRzLnNpemVfYWxsb2NhdGVkID0gMDsKKyAgICBtYWxsb2NTdGF0cy5kZWZh
dWx0TWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7CisgICAgbWFsbG9jU3RhdHMuZGlzcGF0Y2hDb250
aW51YXRpb25NYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICBtYWxsb2NTdGF0cy5wdXJnZWFi
bGVNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAKKyAgICBtYWxsb2NfZ2V0X2FsbF96b25l
cyhtYWNoX3Rhc2tfc2VsZigpLCAwLCAmem9uZXMsICZjb3VudCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGNvbnN0IGNoYXIqIG5hbWUg
PSBtYWxsb2NfZ2V0X3pvbmVfbmFtZShyZWludGVycHJldF9jYXN0PG1hbGxvY196b25lX3QqPih6
b25lc1tpXSkpKSB7CisgICAgICAgICAgICBzdGF0cy5ibG9ja3NfaW5fdXNlID0gMDsKKyAgICAg
ICAgICAgIHN0YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICAgICAgICAgIHN0YXRzLm1heF9zaXpl
X2luX3VzZSA9IDA7CisgICAgICAgICAgICBzdGF0cy5zaXplX2FsbG9jYXRlZCA9IDA7CQorICAg
ICAgICAgICAgbWFsbG9jX3pvbmVfc3RhdGlzdGljcyhyZWludGVycHJldF9jYXN0PG1hbGxvY196
b25lX3QqPih6b25lc1tpXSksICZzdGF0cyk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChuYW1l
LCBkZWZhdWx0TWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLmRl
ZmF1bHRNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAobmFtZSwgZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lTmFtZSkpCisgICAgICAgICAg
ICAgICAgbWFsbG9jU3RhdHMuZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lU3RhdHMgPSBz
dGF0czsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgcHVyZ2VhYmxlTWFsbG9j
Wm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLnB1cmdlYWJsZU1hbGxvY1pv
bmVTdGF0cyA9IHN0YXRzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYWxsb2NTdGF0
czsKK30KKworc2l6ZV90IFdlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVByb2Nlc3NDb21taXR0ZWRC
eXRlcygpIGNvbnN0Cit7CisgICAgdGFza19iYXNpY19pbmZvXzY0IHRhc2tJbmZvOworICAgIG1h
Y2hfbXNnX3R5cGVfbnVtYmVyX3QgY291bnQgPSBUQVNLX0JBU0lDX0lORk9fNjRfQ09VTlQ7Cisg
ICAgdGFza19pbmZvKG1hY2hfdGFza19zZWxmKCksIFRBU0tfQkFTSUNfSU5GT182NCwgcmVpbnRl
cnByZXRfY2FzdDx0YXNrX2luZm9fdD4oJnRhc2tJbmZvKSwgJmNvdW50KTsKKyAgICByZXR1cm4g
dGFza0luZm8ucmVzaWRlbnRfc2l6ZTsKK30KKworU3RyaW5nIFdlYk1lbW9yeVNhbXBsZXI6OnBy
b2Nlc3NOYW1lKCkgY29uc3QKK3sKKyAgICBOU1N0cmluZyAqYXBwTmFtZSA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CisgICAgaWYgKCFhcHBOYW1lKQorICAgICAg
ICBhcHBOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV07Cisg
ICAgcmV0dXJuIFN0cmluZyhhcHBOYW1lKTsKK30KKyAgCitXZWJNZW1vcnlTdGF0aXN0aWNzIFdl
Yk1lbW9yeVNhbXBsZXI6OnNhbXBsZVdlYktpdCgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHRvdGFs
Qnl0ZXNJblVzZSA9IDAsIHRvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOyAKKyAgICAKKyAgICBXZWJN
ZW1vcnlTdGF0aXN0aWNzIHdlYktpdE1lbW9yeVN0YXRzOworICAgIAorICAgIEZhc3RNYWxsb2NT
dGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGlj
cygpOworICAgIHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNJblVzZSA9IGZhc3RNYWxsb2NTdGF0aXN0
aWNzLmNvbW1pdHRlZFZNQnl0ZXMgLSBmYXN0TWFsbG9jU3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVz
OworICAgIHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQgPSBmYXN0TWFsbG9jU3RhdGlz
dGljcy5jb21taXR0ZWRWTUJ5dGVzOworICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9j
Qnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0Nv
bW1pdHRlZDsKKyAgICAKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEhlYXA6OlN0YXRpc3RpY3MgaGVhcE1lbW9yeVN0YXRzID0gaGVhcFN0YXRpc3RpY3MoSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVz
SW5Vc2UgPSBoZWFwTWVtb3J5U3RhdHMuc2l6ZSAtIGhlYXBNZW1vcnlTdGF0cy5mcmVlOworICAg
IHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBoZWFwTWVtb3J5U3RhdHMuc2l6ZTsKKyAg
ICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5dGVzSW5Vc2U7CisgICAgdG90YWxCeXRlc0Nv
bW1pdHRlZCArPSBqc2NIZWFwQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgR2xvYmFsTWVtb3J5
U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsK
KyAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRlcyArIGds
b2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzOworICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0gZ2xv
YmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRlcyArIGdsb2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzOwor
ICAgIAorICAgIFN5c3RlbU1hbGxvY1N0YXRzIHN5c3RlbVN0YXRzID0gc2FtcGxlU3lzdGVtTWFs
bG9jKCk7CisgICAgCisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSA9IHN5
c3RlbVN0YXRzLmRlZmF1bHRNYWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90
IGRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5k
aXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVTdGF0cy5zaXplX2luX3VzZTsKKyAgICBzaXpl
X3QgcHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVN
YWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25l
Qnl0ZXNDb21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0YXRzLnNpemVf
YWxsb2NhdGVkOworICAgIHNpemVfdCBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRl
c0NvbW1pdHRlZCA9IHN5c3RlbVN0YXRzLmRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0
YXRzLnNpemVfYWxsb2NhdGVkOworICAgIHNpemVfdCBwdXJnZWFibGVNYWxsb2Nab25lQnl0ZXND
b21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMuc2l6ZV9hbGxv
Y2F0ZWQ7CisgICAgdG90YWxCeXRlc0luVXNlICs9IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVz
ZSArIGRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgKyBwdXJnZWFibGVN
YWxsb2Nab25lQnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGRlZmF1bHRN
YWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgKyBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVC
eXRlc0NvbW1pdHRlZCArIHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0NvbW1pdHRlZDsKKyAgICAK
KyAgICBzaXplX3QgcmVzaWRlbnRTaXplID0gc2FtcGxlUHJvY2Vzc0NvbW1pdHRlZEJ5dGVzKCk7
CisKKyAgICBDRkFic29sdXRlVGltZSBub3cgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsK
KyAgICAgICAgCisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJUaW1l
c3RhbXAiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChub3cpOworICAg
IHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiVG90YWwgQnl0ZXMgb2YgTWVt
b3J5IEluIFVzZSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHRvdGFs
Qnl0ZXNJblVzZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJG
YXN0IE1hbGxvYyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5h
cHBlbmQoZmFzdE1hbGxvY0J5dGVzSW5Vc2UpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMu
YXBwZW5kKFN0cmluZygiRGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRN
ZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSk7Cisg
ICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJEaXNwYXRjaCBDb250aW51
YXRpb24gTWFsbG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVz
LmFwcGVuZChkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAgICB3
ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlB1cmdlYWJsZSBNYWxsb2MgWm9u
ZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHB1cmdlYWJs
ZU1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVu
ZChTdHJpbmcoIkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy52YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy5rZXlzLmFwcGVuZChTdHJpbmcoIlRvdGFsIEJ5dGVzIG9mIENvbW1pdHRlZCBNZW1vcnkiKSk7
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZCh0b3RhbEJ5dGVzQ29tbWl0dGVk
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkZhc3QgTWFsbG9j
IFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChmYXN0
TWFsbG9jQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5k
KFN0cmluZygiRGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlT
dGF0cy52YWx1ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAg
IHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGlzcGF0Y2ggQ29udGludWF0
aW9uIE1hbGxvYyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5h
cHBlbmQoZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAg
IHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiUHVyZ2VhYmxlIE1hbGxvYyBa
b25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQocHVyZ2Vh
YmxlTWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlz
LmFwcGVuZChTdHJpbmcoIkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1v
cnlTdGF0cy52YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRlc0NvbW1pdHRlZCk7CisgICAgd2ViS2l0
TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0IFN0YWNrIEJ5dGVzIikp
OworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZ2xvYmFsTWVtb3J5U3RhdHMu
c3RhY2tCeXRlcyk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJK
YXZhU2NyaXB0IEpJVCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBw
ZW5kKGdsb2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5r
ZXlzLmFwcGVuZChTdHJpbmcoIlJlc2lkZW50IFNpemUiKSk7CisgICAgd2ViS2l0TWVtb3J5U3Rh
dHMudmFsdWVzLmFwcGVuZChyZXNpZGVudFNpemUpOworICAgIAorICAgIHJldHVybiB3ZWJLaXRN
ZW1vcnlTdGF0czsKK30KKyAgICAKK30KKwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDc1MDIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbW11dGFibGVBcnJheS5o
IgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAiUnVu
TG9vcC5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJUZXh0Q2hl
Y2tlci5oIgogI2luY2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJDb250
ZXh0TWVzc2FnZUtpbmRzLmgiCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCIKICNp
bmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC04Niw2
ICs4OCw4IEBAIFdlYkNvbnRleHQ6OldlYkNvbnRleHQoUHJvY2Vzc01vZGVsIHByb2MKICAgICAs
IG1fY2FjaGVNb2RlbChDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIpCiAgICAgLCBtX2NsZWFyUmVz
b3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzKGZhbHNlKQogICAgICwgbV9jbGVhckFwcGxpY2F0
aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzKGZhbHNlKQorICAgICwgbV9tZW1vcnlTYW1wbGVyRW5h
YmxlZChmYWxzZSkKKyAgICAsIG1fbWVtb3J5U2FtcGxlckludGVydmFsKDE0MDAuMCkKICAgICAs
IG1fZGF0YWJhc2VNYW5hZ2VyUHJveHkoV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmNyZWF0ZSh0
aGlzKSkKICNpZiBQTEFURk9STShXSU4pCiAgICAgLCBtX3Nob3VsZFBhaW50TmF0aXZlQ29udHJv
bHModHJ1ZSkKQEAgLTE5NSw2ICsxOTksMTkgQEAgdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlk
RmluaXNoTGF1bmNoaQogICAgIEFTU0VSVF9VTlVTRUQocHJvY2VzcywgcHJvY2VzcyA9PSBtX3By
b2Nlc3MpOwogCiAgICAgbV92aXNpdGVkTGlua1Byb3ZpZGVyLnByb2Nlc3NEaWRGaW5pc2hMYXVu
Y2hpbmcoKTsKKyAgICAKKyAgICAvLyBTb21ldGltZXMgdGhlIG1lbW9yeVNhbXBsZXIgZ2V0cyBp
bml0aWFsaXplZCBhZnRlciBwcm9jZXNzIGluaXRpYWxpemF0aW9uIGhhcyBoYXBwZW5lZCBidXQg
YmVmb3JlIHRoZSBwcm9jZXNzIGhhcyBmaW5pc2hlZCBsYXVuY2hpbmcKKyAgICAvLyBzbyBjaGVj
ayBpZiBpdCBuZWVkcyB0byBiZSBzdGFydGVkIGhlcmUKKyAgICBpZihtX21lbW9yeVNhbXBsZXJF
bmFibGVkKSB7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW1wbGVMb2dTYW5k
Ym94SGFuZGxlOworICAgICAgICAvLyB3YXkgdG8gZ2V0IG5hbWUgb2YgcHJvY2VzcyBmcm9tIFVJ
IHNpZGU/CisgICAgICAgIAorICAgICAgICBDRkFic29sdXRlVGltZSBub3cgPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKTsKKyAgICAgICAgU3RyaW5nIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU3Ry
aW5nOjpmb3JtYXQoIldlYlByb2Nlc3MlbGx1Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG5vdykp
OworICAgICAgICBzYW1wbGVMb2dGaWxlUGF0aCA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclRlbXBvcmFyeUZpbGUoc2FtcGxlTG9nRmlsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246
OldyaXRlT25seSwgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVtb3J5U2FtcGxlcihz
YW1wbGVMb2dTYW5kYm94SGFuZGxlLCBzYW1wbGVMb2dGaWxlUGF0aCwgbV9tZW1vcnlTYW1wbGVy
SW50ZXJ2YWwpLCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViQ29udGV4dDo6cHJvY2Vzc0RpZENs
b3NlKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTUyMSw1ICs1MzgsNDIgQEAgdm9pZCBX
ZWJDb250ZXh0OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGUoKQogCiAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpDbGVhckFwcGxpY2F0aW9uQ2FjaGUoKSwgMCk7CiB9Cisg
ICAgCit2b2lkIFdlYkNvbnRleHQ6OnN0YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBkb3VibGUgaW50
ZXJ2YWwpCit7ICAgIAorICAgIC8vIEZvciBuZXcgV2ViUHJvY2Vzc2VzIHdlIHdpbGwgYWxzbyB3
YW50IHRvIHN0YXJ0IHRoZSBNZW1vcnkgU2FtcGxlcgorICAgIG1fbWVtb3J5U2FtcGxlckVuYWJs
ZWQgPSB0cnVlOworICAgIG1fbWVtb3J5U2FtcGxlckludGVydmFsID0gaW50ZXJ2YWw7CisgICAg
CisgICAgLy8gRm9yIFVJUHJvY2VzcworICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5z
dGFydChpbnRlcnZhbCk7CisgICAgCisgICAgaWYgKCFoYXNWYWxpZFByb2Nlc3MoKSkgeworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEZvciBXZWJQcm9jZXNzCisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGU7ICAgIAorICAgIENG
QWJzb2x1dGVUaW1lIG5vdyA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOworICAgIFN0cmlu
ZyBzYW1wbGVMb2dGaWxlUGF0aCA9IFN0cmluZzo6Zm9ybWF0KCJXZWJQcm9jZXNzJWxsdSIsIHN0
YXRpY19jYXN0PHVpbnQ2NF90Pihub3cpKTsKKyAgICBzYW1wbGVMb2dGaWxlUGF0aCA9IFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoc2FtcGxlTG9nRmlsZVBh
dGgsIFNhbmRib3hFeHRlbnNpb246OldyaXRlT25seSwgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7
CisgICAgCisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1l
bW9yeVNhbXBsZXIoc2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGlu
dGVydmFsKSwgMCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIoKQor
eyAgICAKKyAgICAvLyBGb3IgV2ViUHJvY2VzcworICAgIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQg
PSBmYWxzZTsKKyAgICAKKyAgICAvLyBGb3IgVUlQcm9jZXNzCisgICAgV2ViTWVtb3J5U2FtcGxl
cjo6c2hhcmVkKCktPnN0b3AoKTsKKyAgICAKKyAgICBpZiAoIWhhc1ZhbGlkUHJvY2VzcygpKSB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpLCAwKTsKK30KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCShyZXZpc2lvbiA3NTAyMikK
KysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDYgKzEwOCw5IEBAIHB1YmxpYzoKICAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWwoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlTW9kZWw7IH0KICAgICB2b2lkIGNsZWFyUmVzb3VyY2VDYWNoZXMoKTsK
ICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25DYWNoZSgpOworICAgIAorICAgIHZvaWQgc3RhcnRN
ZW1vcnlTYW1wbGVyKGNvbnN0IGRvdWJsZSBpbnRlcnZhbCk7CisgICAgdm9pZCBzdG9wTWVtb3J5
U2FtcGxlcigpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgc2V0U2hvdWxkUGFpbnRO
YXRpdmVDb250cm9scyhib29sKTsKQEAgLTE4Niw2ICsxODksOSBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2NsZWFyUmVzb3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzOwogICAgIGJvb2wgbV9j
bGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzOworICAgIAorICAgIGJvb2wgbV9t
ZW1vcnlTYW1wbGVyRW5hYmxlZDsKKyAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWw7
CiAKICAgICBSZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+IG1fZGF0YWJhc2VNYW5hZ2Vy
UHJveHk7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNp
b24gNzUwMjIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTUsMyArMTU1LDEzIEBAIFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdLQ29u
dGV4dEdldERhdGFiYXMKIHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNvbnRleHRSZWYpLT5k
YXRhYmFzZU1hbmFnZXJQcm94eSgpKTsKIH0KKwordm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNh
bXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLRG91YmxlUmVmIGludGVydmFsKQorewor
ICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c3RhcnRNZW1vcnlTYW1wbGVyKHRvSW1wbChpbnRlcnZh
bCktPnZhbHVlKCkpOworfQorCit2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmKQoreworICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c3RvcE1lbW9y
eVNhbXBsZXIoKTsKK30KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCShyZXZp
c2lvbiA3NTAyMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDkgQEAgV0tfRVhQT1JUIFdLQ2FjaGVNb2RlbCBXS0Nv
bnRleHRHZXRDYWNoZQogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclJlc291cmNlQ2Fj
aGVzKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFy
QXBwbGljYXRpb25DYWNoZShXS0NvbnRleHRSZWYgY29udGV4dCk7CisgICAgCitXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
RG91YmxlUmVmIGludGVydmFsKTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlT
YW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAogV0tfRVhQT1JUIFdLRGF0YWJhc2VNYW5h
Z2VyUmVmIFdLQ29udGV4dEdldERhdGFiYXNlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCk7
CiAKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNiArMjYyLDkgQEAKIAkJNzYyQjc0OEQxMjBCQzc1QzAw
ODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVm
ZXJlbmNlc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk4REMyRUY1MzA0ODZBNjk0MDA5OEIyMTYgLyogSW5mb1BsaXN0LnN0cmluZ3Mg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OUMxNjY2
RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLzsgfTsKIAkJOERDMkVGNTcw
NDg2QTY5NDAwOThCMjE2IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDEwNThDN0IxRkVBNTU4NUUxMUNBMkNCQiAvKiBD
b2NvYS5mcmFtZXdvcmsgKi87IH07CisJCTkwOTg1NEVDMTJCQzRFMTcwMDBBRDA4MCAvKiBXZWJN
ZW1vcnlTYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkwNTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAq
LzsgfTsKKwkJOTA5ODU0RUQxMkJDNEUxODAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU5MTJC
QzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmggKi87IH07CisJCTkwOTg1NEVFMTJC
QzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU1MTJCQzI0NzYwMDA3OTlCNiAv
KiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSAqLzsgfTsKIAkJOTM1RUVCOUIxMjc3NjE3QzAwMzMy
MkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1RUVCOTgxMjc3NjE2RDAwMzMyMkI4IC8qIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzNUVFQjlFMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVFRUI5NTEyNzc2MTZEMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3QuY3BwICovOyB9OwogCQk5MzVFRUI5RjEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzNUVFQjk2MTI3NzYxNkQwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05
NDMsNiArOTQ2LDkgQEAKIAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5j
ZXNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5j
ZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThEQzJFRjVBMDQ4NkE2
OTQwMDk4QjIxNiAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGgg
PSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REMyRUY1QjA0ODZB
Njk0MDA5OEIyMTYgLyogV2ViS2l0Mi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IHBhdGggPSBXZWJLaXQyLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKKwkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBs
ZXIubWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTWVt
b3J5U2FtcGxlci5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwNTYyMEU4
MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk1lbW9yeVNhbXBsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2Ft
cGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZW1vcnlTYW1wbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjhGMTI3NzYxNUQwMDMzMjJC
OCAvKiBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjkwMTI3NzYxNUQwMDMzMjJCOCAvKiBJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzVFRUI5MTEyNzc2MTVEMDAzMzIyQjggLyogSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjYzLDYgKzE2NjksOCBAQAogCQkJCUJDQ0Y2QUJBMTJDOTFFRjkw
MDhGOUMzNSAvKiBXZWJJbWFnZS5jcHAgKi8sCiAJCQkJQkNDRjZBQkIxMkM5MUVGOTAwOEY5QzM1
IC8qIFdlYkltYWdlLmggKi8sCiAJCQkJQzAzMzdERDIxMjdBMkEwRTAwOEZGNEY0IC8qIFdlYktl
eWJvYXJkRXZlbnQuY3BwICovLAorCQkJCTkwNTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJN
ZW1vcnlTYW1wbGVyLmNwcCAqLywKKwkJCQk5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYgLyogV2Vi
TWVtb3J5U2FtcGxlci5oICovLAogCQkJCUMwMzM3REFGMTI3QTI4RDAwMDhGRjRGNCAvKiBXZWJN
b3VzZUV2ZW50LmNwcCAqLywKIAkJCQlCQ0Y2OUY5ODExNzZDRUQ2MDA0NzFBNTIgLyogV2ViTmF2
aWdhdGlvbkRhdGFTdG9yZS5oICovLAogCQkJCUJDMzNERDY3MTIzODQ2NDYwMDM2MEYzRiAvKiBX
ZWJOdW1iZXIuaCAqLywKQEAgLTIxNTQsNiArMjE2Miw3IEBACiAJCQkJQkNFMjMyNjIxMjJDNkNG
MzAwRDVDMzVBIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSAqLywKIAkJCQlCQzExMUI1
QjExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5LmggKi8sCiAJCQkJQkMxMTFCNUMx
MTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLywKKwkJCQk5MDU2MjBFNTEy
QkMyNDc2MDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5tYWMubW0gKi8sCiAJCQkJQkNFMjMx
QzAxMjJDNDY2RTAwRDVDMzVBIC8qIFdlYlVSTFJlcXVlc3RNYWMubW0gKi8sCiAJCQkJQkM5MEEx
RDUxMjJERDY2QTAwQ0M4QzUwIC8qIFdlYlVSTFJlc3BvbnNlTWFjLm1tICovLAogCQkJCTFBQUI0
QUE5MTI5NkYxNTQwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uTWFjLm1tICovLApAQCAtMjgy
OSw2ICsyODM4LDcgQEAKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVp
cmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg1OEEyMDEyQzAzNTdCMDBFREVCMkUgLyogV2Vi
UmVzb3VyY2VMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NB
MDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkwOTg1NEVEMTJC
QzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0Y2NzJEMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDQ0Y2QUJEMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMjYzLDYgKzMyNzMsOCBAQAogCQkJCTFBNEE5QzlBMTJCODIx
Q0QwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUJDODU4QTIxMTJDMDM1N0IwMEVERUIyRSAvKiBXZWJSZXNvdXJjZUxvYWRDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBNDE3RUYxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVj
a2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTA5ODU0RUMxMkJDNEUxNzAwMEFEMDgwIC8q
IFdlYk1lbW9yeVNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTA5ODU0RUUxMkJDNEUx
ODAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNDRjY3MzMxMkM3RjE1QzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0NGNkFCQzEyQzkxRUY5MDA4RjlDMzUgLyogV2ViSW1hZ2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNDRjZBQzIxMkM5MUYzNDAwOEY5QzM1IC8qIFdLSW1hZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lv
biA3NTAyMikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTAgKzMxLDEyIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVNZXNzYWdl
S2luZHMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgiCiAj
aW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlBs
YXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtNjExLDYgKzYxMywxNiBAQCB2b2lkIFdlYlByb2Nlc3M6
OmNhbmNlbERvd25sb2FkKHVpbnQ2NF90CiAgICAgRG93bmxvYWRNYW5hZ2VyOjpzaGFyZWQoKS5j
YW5jZWxEb3dubG9hZChkb3dubG9hZElEKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzOjpzdGFydE1l
bW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWxl
SGFuZGxlLCBjb25zdCBTdHJpbmcmIHNhbXBsZUxvZ0ZpbGVQYXRoLCBjb25zdCBDRlRpbWVJbnRl
cnZhbCBpbnRlcnZhbCkKK3sKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RhcnQo
c2FtcGxlTG9nRmlsZUhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKTsKK30KKyAg
ICAKK3ZvaWQgV2ViUHJvY2Vzczo6c3RvcE1lbW9yeVNhbXBsZXIoKQoreworICAgIFdlYk1lbW9y
eVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4
dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQog
ewogICAgIG1fdGV4dENoZWNrZXJTdGF0ZSA9IHRleHRDaGVja2VyU3RhdGU7CkluZGV4OiBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDc1MDIyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IkNhY2hlTW9kZWwuaCIKICNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKICNpbmNsdWRlICJEcmF3
aW5nQXJlYS5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW5jbHVkZSAiVmlz
aXRlZExpbmtUYWJsZS5oIgpAQCAtMTMzLDYgKzEzNCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
bGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25D
YWNoZSgpOwogCisgICAgdm9pZCBzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlKTsKKyAgICB2b2lkIHN0
b3BNZW1vcnlTYW1wbGVyKCk7CisKICAgICB2b2lkIGNhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRv
d25sb2FkSUQpOwogCiAgICAgdm9pZCBzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVj
a2VyU3RhdGUmKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw5IEBAIG1lc3NhZ2VzIC0+IFdl
YlByb2Nlc3MgewogCiAgICAgQ2xlYXJSZXNvdXJjZUNhY2hlcygpOwogICAgIENsZWFyQXBwbGlj
YXRpb25DYWNoZSgpOworICAgIAorICAgIHZvaWQgU3RhcnRNZW1vcnlTYW1wbGVyKFdlYktpdDo6
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIFdURjo6U3RyaW5n
IHNhbXBsZUxvZ0ZpbGVQYXRoLCBkb3VibGUgaW50ZXJ2YWwpOworICAgIHZvaWQgU3RvcE1lbW9y
eVNhbXBsZXIoKTsKIAogICAgICMgRG93bmxvYWRzLiBUaGlzIHNob3VsZCByZWFsbHkgYmUgaW4g
YSBEb3dubG9hZC5tZXNzYWdlcy5pbiwgYnV0IGl0IHNlZW1lZCB1bm5lY2Vzc2FyeSB0byBjcmVh
dGUgYSBuZXcgZmlsZSBqdXN0IGZvcgogICAgICMgYSBzaW5nbGUgbWVzc2FnZS4K
</data>
<flag name="review"
          id="69199"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77965</attachid>
            <date>2011-01-04 21:06:22 -0800</date>
            <delta_ts>2011-01-04 21:22:32 -0800</delta_ts>
            <desc>remove more cf types</desc>
            <filename>webkit2MemorySampler.txt</filename>
            <type>text/plain</type>
            <size>41706</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS84NjQ5NjE3PiBNaWdyYXRlIG1lbW9yeSB0cmFja2luZyBmcm9tIFNh
ZmFyaSB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwNzk5IEFkZCBNZW1vcnkgU2FtcGxlciB0byBXZWJLaXQKKyAgICAgICAgCisgICAg
ICAgIEFkZCBhIHNhbXBsZXIgZm9yIHByaW50aW5nIG9mZiBwcm9jZXNzIG1lbW9yeSBzdGF0aXN0
aWNzLgorICAgICAgICBFeHBvcnQgZmlsZSBtb2RlLgorCisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisKIDIwMTEtMDEtMDQgIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzUwMjIp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC03NjksNiArNzY5
LDcgQEAgX19aTjdXZWJDb3JlOEZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlOEdyYWRpZW50MTJh
ZGRDb2xvclN0b3BFZlJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18x
MEZsb2F0UG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAorX19a
TjdXZWJDb3JlOG9wZW5GaWxlRVJLTjNXVEY2U3RyaW5nRU5TXzEyRmlsZU9wZW5Nb2RlRQogX19a
TjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5n
czE1c2V0V2ViR0xFbmFibGVkRWIKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5p
ZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2NDk2MTc+IE1pZ3JhdGUgbWVt
b3J5IHRyYWNraW5nIGZyb20gU2FmYXJpIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3OTkgQWRkIE1lbW9yeSBTYW1wbGVyIHRvIFdl
YktpdAorICAgICAgICAKKyAgICAgICAgQWRkIGEgc2FtcGxlciBmb3IgcHJpbnRpbmcgb2ZmIHBy
b2Nlc3MgbWVtb3J5IHN0YXRpc3RpY3MuCisgICAgICAgIFRoaXMgdG9vbCBjYW4gdHJhY2s6Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgV2ViQ29yZQorICAgICAgICAgICAgICAg
ICAgIC0gRmFzdE1hbGxvYyBhbGxvY2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBv
ciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAg
ICAgICAgICAtIEdhcmJhZ2UgY29sbGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1
c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAgICAgICAgIC0gU3RhY2sgYnl0ZXMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdHRlZCBvbmx5ISkKKyAgICAgICAgICAgICAg
ICAgICAtIEpJVCBDb2RlIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0
ZWQgb25seSEpCisgICAgICAgICAgICAgICAgTWFsbG9jIHpvbmVzCisgICAgICAgICAgICAgICAg
ICAgLSBJbiB1c2UgYnl0ZXMgZm9yIHRoZSBmb2xsb3dpbmcgem9uZXM6CisgICAgICAgICAgICAg
ICAgICAgICAgICogRGVmYXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNl
IG9yIGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgKiBEaXNwQ29uIHpvbmUgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAg
ICAgICAgICAgICAqIFB1cmdhYmxlIHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVz
ZSBvciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgVGFzayBJbmZvCisgICAgICAgICAgICAg
ICAgICAgLSBSZXNpZGVudCBzaXplIG1lbW9yeSAoUlNJWkUpCisgICAgICAgIAorICAgICAgICAg
ICAgICAgIERhdGEgY29sbGVjdGVkIGlzIGR1bXBlZCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAg
ICAgICAKKyAgICAgICAgQ3JlYXRlIGEgc2FuZGJveCBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4KKyAg
ICAgICAgKiBTaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25NYWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUpOgorICAgICAgICAKKyAg
ICAgICAgTWVtb3J5IFNhbXBsZXIgZmlsZXMKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1dl
Yk1lbW9yeVNhbXBsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2Ft
cGxlcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6V2ViTWVt
b3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0YXJ0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0b3ApOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZW1vcnlTYW1wbGVyOjppc1J1bm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1v
cnlTYW1wbGVyOjppbml0aWFsaXplVGVtcExvZ0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjppbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYk1lbW9yeVNhbXBsZXI6OndyaXRlSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnNhbXBsZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjpzdG9wVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9y
eVNhbXBsZXI6OmFwcGVuZEN1cnJlbnRNZW1vcnlVc2FnZVRvRmlsZSk6CisgICAgICAgICogU2hh
cmVkL1dlYk1lbW9yeVNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVN5c3RlbU1hbGxvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnByb2Nlc3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5
U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgCisgICAgICAgIEFQSSB0byBzdGFydCBh
bmQgc3RvcCBVSVByb2Nlc3MgYW5kIFdlYlByb2Nlc3Mgc2FtcGxpbmcuCisgICAgICAgIAorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0
U3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVy
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgIAorICAg
ICAgICBTZW5kIG1lc3NhZ2VzIHRvIFdlYlByb2Nlc3MgdG8gc3RhcnQgYW5kIHN0b3AgbWVtb3J5
IHNhbXBsaW5nLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6c3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJD
b250ZXh0Lmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnN0YXJ0TWVtb3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnN0b3BNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTEt
MDEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAkocmV2
aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoV0VCX1BST0NF
U1NfU0FOREJPWCkKIHR5cGVkZWYgc3RydWN0IF9fV0tTYW5kYm94RXh0ZW5zaW9uKiBXS1NhbmRi
b3hFeHRlbnNpb25SZWY7CkBAIC02OSw2ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBIYW5kbGUmKTsKICAgICBz
dGF0aWMgdm9pZCBjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhh
bmRsZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShj
b25zdCBTdHJpbmcmIHByZWZpeCwgVHlwZSB0eXBlLCBIYW5kbGUmKTsKICAgICB+U2FuZGJveEV4
dGVuc2lvbigpOwogCiAgICAgYm9vbCBpbnZhbGlkYXRlKCk7CkBAIC04OSw2ICs5MSw3IEBAIGlu
bGluZSB2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6ZW4KIGlubGluZSBib29sIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhh
bmRsZSYpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBQYXNzUmVmUHRyPFNhbmRib3hFeHRlbnNp
b24+IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShjb25zdCBIYW5kbGUmKSB7IHJldHVybiAwOyB9
CiBpbmxpbmUgdm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5n
JiBwYXRoLCBUeXBlIHR5cGUsIEhhbmRsZSYpIHsgfQoraW5saW5lIFN0cmluZyBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4
LCBUeXBlIHR5cGUsIEhhbmRsZSYpIHtyZXR1cm4gU3RyaW5nKCk7fQogaW5saW5lIFNhbmRib3hF
eHRlbnNpb246On5TYW5kYm94RXh0ZW5zaW9uKCkgeyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0
ZW5zaW9uOjppbnZhbGlkYXRlKCkgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZSgpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYktpdDIvU2hh
cmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dl
Yk1lbW9yeVNhbXBsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViTWVt
b3J5U2FtcGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgi
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIgKnNo
YXJlZE1lbW9yeVNhbXBsZXIgPSAwOworCitXZWJNZW1vcnlTYW1wbGVyKiBXZWJNZW1vcnlTYW1w
bGVyOjpzaGFyZWQoKQoreworICAgIGlmICghc2hhcmVkTWVtb3J5U2FtcGxlcikKKyAgICAgICAg
c2hhcmVkTWVtb3J5U2FtcGxlciA9IG5ldyBXZWJNZW1vcnlTYW1wbGVyKCk7CisgICAgcmV0dXJu
IHNoYXJlZE1lbW9yeVNhbXBsZXI7Cit9CisKK1dlYk1lbW9yeVNhbXBsZXI6OldlYk1lbW9yeVNh
bXBsZXIoKSAKKyAgICA6IG1fc2FtcGxlVGltZXIodGhpcywgJldlYk1lbW9yeVNhbXBsZXI6OnNh
bXBsZVRpbWVyRmlyZWQpCisgICAgLCBtX3N0b3BUaW1lcih0aGlzLCAmV2ViTWVtb3J5U2FtcGxl
cjo6c3RvcFRpbWVyRmlyZWQpCisgICAgLCBtX2lzUnVubmluZyhmYWxzZSkKKyAgICAsIG1fcnVu
bmluZ1RpbWUoMCkKK3sKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdGFydChjb25zdCBk
b3VibGUgaW50ZXJ2YWwpIAoreworICAgIGlmIChtX2lzUnVubmluZykgCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpbml0aWFsaXplVGVtcExvZ0ZpbGUoKTsKKyAgICBpbml0aWFsaXplVGlt
ZXJzKGludGVydmFsKTsKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdGFydChjb25zdCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgc2FtcGxlTG9nRmlsZVBhdGgsIGNvbnN0IENGVGltZUludGVydmFsIGludGVydmFsKSAKK3sK
KyAgICBpZiAobV9pc1J1bm5pbmcpIAorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYg
d2UgYXJlIG9uIGEgc3lzdGVtIHdpdGhvdXQgU2FuZGJveEV4dGVuc2lvbiB0aGUgaGFuZGxlIGFu
ZCBmaWxlbmFtZSB3aWxsIGJlIGVtcHR5CisgICAgaWYgKHNhbXBsZUxvZ0ZpbGVQYXRoLmlzRW1w
dHkoKSkgeworICAgICAgICBzdGFydChpbnRlcnZhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgICAgIAorICAgIGluaXRpYWxpemVTYW5kYm94ZWRMb2dGaWxlKHNhbXBsZUxvZ0ZpbGVI
YW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoKTsKKyAgICBpbml0aWFsaXplVGltZXJzKGludGVydmFs
KTsKKyAgIAorfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OmluaXRpYWxpemVUaW1lcnMoZG91
YmxlIGludGVydmFsKQoreworICAgIG1fc2FtcGxlVGltZXIuc3RhcnRSZXBlYXRpbmcoMSk7Cisg
ICAgcHJpbnRmKCJTdGFydGVkIG1lbW9yeSBzYW1wbGVyIGZvciBwcm9jZXNzICVzIiwgcHJvY2Vz
c05hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoaW50ZXJ2YWwgPiAwKSB7CisgICAgICAg
IG1fc3RvcFRpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7CisgICAgICAgIHByaW50ZigiIGZv
ciBhIGludGVydmFsIG9mICVnIHNlY29uZHMiLCBpbnRlcnZhbCk7CisgICAgfQorICAgIHByaW50
ZigiOyBTYW1wbGVyIGxvZyBmaWxlIHN0b3JlZCBhdDogJXNcbiIsIG1fc2FtcGxlTG9nRmlsZVBh
dGgudXRmOCgpLmRhdGEoKSk7CisgICAgbV9ydW5uaW5nVGltZSA9IGludGVydmFsOworICAgIG1f
aXNSdW5uaW5nID0gdHJ1ZTsKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdG9wKCkgCit7
CisgICAgaWYgKCFtX2lzUnVubmluZykgCisgICAgICAgIHJldHVybjsKKyAgICBtX3NhbXBsZVRp
bWVyLnN0b3AoKTsKKyAgICBtX3NhbXBsZUxvZ0ZpbGUgPSAwOworICAgIHByaW50ZigiU3RvcHBl
ZCBtZW1vcnkgc2FtcGxlciBmb3IgcHJvY2VzcyAlc1xuIiwgcHJvY2Vzc05hbWUoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAvLyBGbHVzaCBzdGRvdXQgYnVmZmVyIHNvIHB5dGhvbiBzY3JpcHQgY2Fu
IGJlIGd1YXJhbnRlZWQgdG8gcmVhZCB1cCB0byB0aGlzIHBvaW50LgorICAgIGZmbHVzaChzdGRv
dXQpOworICAgIG1faXNSdW5uaW5nID0gZmFsc2U7CisgICAgCisgICAgaWYobV9zdG9wVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9zdG9wVGltZXIuc3RvcCgpOworICAgIAorICAgIGlmICht
X3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNpb24pIHsKKyAgICAgICAgbV9zYW1wbGVMb2dTYW5kYm94
RXh0ZW5zaW9uLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fc2FtcGxlTG9nU2FuZGJveEV4dGVu
c2lvbiA9IDA7CisgICAgfSAgICAKK30KKworYm9vbCBXZWJNZW1vcnlTYW1wbGVyOjppc1J1bm5p
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzUnVubmluZzsKK30KKyAgICAKK3ZvaWQgV2Vi
TWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRlbXBMb2dGaWxlKCkKK3sKKyAgICBtX3NhbXBsZUxv
Z0ZpbGVQYXRoID0gU3RyaW5nKChvcGVuVGVtcG9yYXJ5RmlsZShwcm9jZXNzTmFtZSgpLnV0Zjgo
KS5kYXRhKCksIG1fc2FtcGxlTG9nRmlsZSkpLmRhdGEoKSk7CisgICAgd3JpdGVIZWFkZXJzKCk7
Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVNhbmRib3hlZExvZ0ZpbGUo
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBj
b25zdCBTdHJpbmcmIHNhbXBsZUxvZ0ZpbGVQYXRoKQoreworICAgIG1fc2FtcGxlTG9nU2FuZGJv
eEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShzYW1wbGVMb2dTYW5kYm94SGFu
ZGxlKTsKKyAgICBpZiAobV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICBtX3Nh
bXBsZUxvZ1NhbmRib3hFeHRlbnNpb24tPmNvbnN1bWUoKTsKKyAgICBtX3NhbXBsZUxvZ0ZpbGVQ
YXRoID0gc2FtcGxlTG9nRmlsZVBhdGg7CisgICAgbV9zYW1wbGVMb2dGaWxlID0gb3BlbkZpbGUo
bV9zYW1wbGVMb2dGaWxlUGF0aCwgT3BlbkZvcldyaXRlKTsKKyAgICB3cml0ZUhlYWRlcnMoKTsK
K30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjp3cml0ZUhlYWRlcnMoKQoreworICAgIFN0cmlu
ZyBwcm9jZXNzRGV0YWlscyA9IFN0cmluZygiUHJvY2VzczogIik7CisgICAgcHJvY2Vzc0RldGFp
bHMuYXBwZW5kKHByb2Nlc3NOYW1lKCkpOworICAgIHByb2Nlc3NEZXRhaWxzLmFwcGVuZChTdHJp
bmcoIlxuIikpOworICAgIHdyaXRlVG9GaWxlKG1fc2FtcGxlTG9nRmlsZSwgcHJvY2Vzc0RldGFp
bHMudXRmOCgpLmRhdGEoKSwgcHJvY2Vzc0RldGFpbHMudXRmOCgpLmxlbmd0aCgpKTsKKyAgICAK
KyAgICBtX3NlcGFyYXRvciA9IFN0cmluZygiXHQiKTsgICAgCisgICAgU3RyaW5nIGhlYWRlciA9
IFN0cmluZygpOyAKKyAgICBXZWJNZW1vcnlTdGF0aXN0aWNzIHN0YXRzID0gc2FtcGxlV2ViS2l0
KCk7CisgICAgaWYgKCFzdGF0cy5rZXlzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRzLmtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGhlYWRl
ci5hcHBlbmQobV9zZXBhcmF0b3IpOworICAgICAgICAgICAgaGVhZGVyLmFwcGVuZChzdGF0cy5r
ZXlzW2ldLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorICAgIGhlYWRlci5hcHBl
bmQoU3RyaW5nKCJcbiIpKTsKKyAgICB3cml0ZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUsIGhlYWRl
ci51dGY4KCkuZGF0YSgpLCBoZWFkZXIudXRmOCgpLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJN
ZW1vcnlTYW1wbGVyOjpzYW1wbGVUaW1lckZpcmVkKFRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+KikK
K3sKKyAgICBhcHBlbmRDdXJyZW50TWVtb3J5VXNhZ2VUb0ZpbGUobV9zYW1wbGVMb2dGaWxlKTsg
Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6c3RvcFRpbWVyRmlyZWQoVGltZXI8V2ViTWVt
b3J5U2FtcGxlcj4qKQoreworICAgIGlmICghbV9pc1J1bm5pbmcpCisgICAgICAgIHJldHVybjsK
KyAgICBwcmludGYoIiVnIHNlY29uZHMgZWxhcHNlZC4gU3RvcHBpbmcgbWVtb3J5IHNhbXBsZXIu
Li5cbiIsIG1fcnVubmluZ1RpbWUpOworICAgIHN0b3AoKTsKK30KKwordm9pZCBXZWJNZW1vcnlT
YW1wbGVyOjphcHBlbmRDdXJyZW50TWVtb3J5VXNhZ2VUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
JiBmaWxlKQoreworICAgIC8vIENvbGxlY3Qgc3RhdGlzdGljcyBmcm9tIGFsbG9jYXRvcnMgYW5k
IGdldCBSU0laRSBtZXRyaWMKKyAgICBTdHJpbmcgc3RhdFN0cmluZyA9IFN0cmluZygpOyAKKyAg
ICBXZWJNZW1vcnlTdGF0aXN0aWNzIG1lbW9yeVN0YXRzID0gc2FtcGxlV2ViS2l0KCk7CisKKyAg
ICBpZiAoIW1lbW9yeVN0YXRzLnZhbHVlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RhdFN0cmlu
Zy5hcHBlbmQobV9zZXBhcmF0b3IpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
bW9yeVN0YXRzLnZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgc3RhdFN0cmluZy5h
cHBlbmQobV9zZXBhcmF0b3IpOworICAgICAgICAgICAgc3RhdFN0cmluZy5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoIiVsdSIsIG1lbW9yeVN0YXRzLnZhbHVlc1tpXSkpOworICAgICAgICB9CisgICAg
fQorICAgIHN0YXRTdHJpbmcuYXBwZW5kKFN0cmluZygiXG4iKSk7CisgICAgd3JpdGVUb0ZpbGUo
bV9zYW1wbGVMb2dGaWxlLCBzdGF0U3RyaW5nLnV0ZjgoKS5kYXRhKCksIHN0YXRTdHJpbmcudXRm
OCgpLmxlbmd0aCgpKTsKK30KKworfQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2Ft
cGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAko
cmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisg
KiAgVGhlIE1lbW9yeVNhbXBsZXIgY2xhc3Mgc2FtcGxlcyBhIG51bWJlciBvZiBpbnRlcm5hbCBh
bmQgZXh0ZXJuYWwgbWVtb3J5IAorICogIG1ldHJpY3MgZXZlcnkgc2Vjb25kIHdoaWxlIHJ1bm5p
bmcuIFNhbXBsZSBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZS4gCisgKiAgU2FtcGxpbmcg
b2NjdXJzIG92ZXIgYSBkdXJhdGlvbiBzcGVjaWZpZWQgd2hlbiBzdGFydGVkLiBJZiBkdXJhdGlv
biBpcyBzZXQgCisgKiAgdG8gMCAoZGVmYXVsdCksIHRoZSBtZW1vcnkgc2FtcGxlciB3aWxsIHJ1
biBpbmRlZmluaXRlbHkgdW50aWwgdGhlIHN0b3AgCisgKiAgZnVuY3Rpb24gaXMgY2FsbGVkLiBN
ZW1vcnlTYW1wbGVyIGFsbG93cyB0aGUgb3B0aW9uIG9mIHNhbXBsaW5nICJpbiB1c2UiIAorICog
IG1lbW9yeSAoY29tbWl0dGVkIG1lbW9yeSBtaW51cyBmcmVlIGxpc3QgYnl0ZSBjb3VudCkgb3Ig
Y29tbWl0dGVkIG1lbW9yeSBmb3IKKyAqICBhbnkgYWxsb2NhdG9yIHdoaWNoIGtlZXBzIGEgZnJl
ZSBsaXN0LiBUaGlzIGluY2x1ZGVzIEZhc3RNYWxsb2MgYW5kIHRoZSAKKyAqICBKYXZhU2NyaXB0
Q29yZSBoZWFwIGF0IHRoaXMgdGltZS4KKyAqICBUaGUgZm9sbG93aW5nIG1lbW9yeSBtZXRyaWNz
IGFyZSByZWNvcmRlZDoKKyAqCisgKiAgICAgIFdlYkNvcmUKKyAqICAgICAgICAgIC0gRmFzdE1h
bGxvYyBhbGxvY2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQp
CisgKiAgICAgIEphdmFTY3JpcHRDb3JlCisgKiAgICAgICAgICAtIEdhcmJhZ2UgY29sbGVjdG9y
IGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICogICAgICAg
ICAgLSBTdGFjayBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWl0dGVk
IG9ubHkhKQorICogICAgICAgICAgLSBKSVQgQ29kZSBieXRlcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29tbWl0dGVkIG9ubHkhKQorICogICAgICBNYWxsb2Mgem9uZXMKKyAqICAgICAg
ICAgIC0gSW4gdXNlIGJ5dGVzIGZvciB0aGUgZm9sbG93aW5nIHpvbmVzOgorICogICAgICAgICAg
ICAgICogRGVmYXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNv
bW1pdHRlZCkKKyAqICAgICAgICAgICAgICAqIERpc3BDb24gem9uZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgICAgICAgICAgKiBQdXJnYWJs
ZSB6b25lICAgICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICog
ICAgICBUYXNrIEluZm8KKyAqICAgICAgICAgIC0gUmVzaWRlbnQgc2l6ZSBtZW1vcnkgKFJTSVpF
KQorICovCisKKyNpZm5kZWYgV2ViTWVtb3J5U2FtcGxlcl9oCisjZGVmaW5lIFdlYk1lbW9yeVNh
bXBsZXJfaAorCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvVGltZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RydWN0IFN5c3RlbU1hbGxvY1N0YXRzOworCitzdHJ1Y3QgV2ViTWVtb3J5
U3RhdGlzdGljcworeworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgVmVjdG9yPHNpemVf
dD4gdmFsdWVzOworfTsKKyAgICAKK2NsYXNzIFdlYk1lbW9yeVNhbXBsZXIgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworCitwdWJsaWM6CisgICAgc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIqIHNoYXJl
ZCgpOworICAgIHZvaWQgc3RhcnQoY29uc3QgZG91YmxlIGludGVydmFsPTApOworICAgIHZvaWQg
c3RhcnQoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgZG91YmxlIGludGVydmFsPTApOworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNSdW5u
aW5nKCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIFdlYk1lbW9yeVNhbXBsZXIoKTsKKyAg
ICB+V2ViTWVtb3J5U2FtcGxlcigpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVRlbXBMb2dG
aWxlKCk7CisgICAgdm9pZCBpbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZShjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHdyaXRlSGVhZGVy
cygpOworICAgIHZvaWQgaW5pdGlhbGl6ZVRpbWVycyhkb3VibGUpOworICAgIHZvaWQgc2FtcGxl
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopOworICAgIHZvaWQg
c3RvcFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8V2ViTWVtb3J5U2FtcGxlcj4qKTsKKyAgICB2
b2lkIGFwcGVuZEN1cnJlbnRNZW1vcnlVc2FnZVRvRmlsZShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVI
YW5kbGUmKTsKKyAgICAKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBzYW1wbGVTeXN0ZW1NYWxsb2Mo
KSBjb25zdDsKKyAgICBzaXplX3Qgc2FtcGxlUHJvY2Vzc0NvbW1pdHRlZEJ5dGVzKCkgY29uc3Q7
CisgICAgV2ViTWVtb3J5U3RhdGlzdGljcyBzYW1wbGVXZWJLaXQoKSBjb25zdDsKKyAgICBTdHJp
bmcgcHJvY2Vzc05hbWUoKSBjb25zdDsKKyAgICAKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgbV9zYW1wbGVMb2dGaWxlOworICAgIFN0cmluZyBtX3NhbXBsZUxvZ0ZpbGVQYXRoOwor
ICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxXZWJNZW1vcnlTYW1w
bGVyPiBtX3NhbXBsZVRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+
IG1fc3RvcFRpbWVyOworICAgIGJvb2wgbV9pc1J1bm5pbmc7CisgICAgZG91YmxlIG1fcnVubmlu
Z1RpbWU7CisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FtcGxlTG9nU2FuZGJveEV4
dGVuc2lvbjsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9tYWMvU2Fu
ZGJveEV4dGVuc2lvbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9tYWMvU2Fu
ZGJveEV4dGVuc2lvbk1hYy5tbQkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1NoYXJlZC9t
YWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwz
MCBAQCB2b2lkIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShjb25zCiAgICAgQVNTRVJU
KCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKICAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5z
aW9uID0gV0tTYW5kYm94RXh0ZW5zaW9uQ3JlYXRlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKS5kYXRhKCksIHdrU2FuZGJveEV4dGVuc2lvblR5cGUodHlwZSkpOwogfQorICAgIAorU3Ry
aW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3Qg
U3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJU
KCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKKyAgICAKKyAgICBWZWN0b3I8Y2hhcj4gcGF0
aChQQVRIX01BWCk7CisgICAgaWYgKCFjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwg
cGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IAorICAgIC8vIFNocmluayB0aGUgdmVjdG9yLiAgIAorICAgIHBhdGguc2hyaW5rKHN0cmxlbihw
YXRoLmRhdGEoKSkpOworICAgIEFTU0VSVChwYXRoLmxhc3QoKSA9PSAnLycpOworICAgIAorICAg
IC8vIEFwcGVuZCB0aGUgZmlsZSBuYW1lLiAgICAKKyAgICBwYXRoLmFwcGVuZChwcmVmaXgudXRm
OCgpLmRhdGEoKSwgcHJlZml4Lmxlbmd0aCgpKTsKKyAgICBwYXRoLmFwcGVuZCgnXDAnKTsKKyAg
ICAKKyAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uID0gV0tTYW5kYm94RXh0ZW5zaW9uQ3Jl
YXRlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoLmRhdGEoKSkuZGF0YSgpLCB3a1NhbmRi
b3hFeHRlbnNpb25UeXBlKHR5cGUpKTsKKworICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVu
c2lvbikgeworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBTdHJp
bmcocGF0aC5kYXRhKCkpOworfQogCiBTYW5kYm94RXh0ZW5zaW9uOjpTYW5kYm94RXh0ZW5zaW9u
KGNvbnN0IEhhbmRsZSYgaGFuZGxlKQogICAgIDogbV9zYW5kYm94RXh0ZW5zaW9uKGhhbmRsZS5t
X3NhbmRib3hFeHRlbnNpb24pCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2Ft
cGxlci5tYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNh
bXBsZXIubWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9y
eVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWVtb3J5U3RhdGlzdGljcy5oPgorI2luY2x1
ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvdGFzay5oPgorI2luY2x1ZGUgPG1hY2gv
bWFjaF90eXBlcy5oPgorI2luY2x1ZGUgPG1hbGxvYy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBu
YW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisgICAgCitzdHJ1Y3QgU3lzdGVtTWFsbG9jU3RhdHMgeworICAgIG1hbGxvY19zdGF0aXN0aWNz
X3QgZGVmYXVsdE1hbGxvY1pvbmVTdGF0czsKKyAgICBtYWxsb2Nfc3RhdGlzdGljc190IGRpc3Bh
dGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0YXRzOworICAgIG1hbGxvY19zdGF0aXN0aWNzX3Qg
cHVyZ2VhYmxlTWFsbG9jWm9uZVN0YXRzOworfTsKKworU3lzdGVtTWFsbG9jU3RhdHMgV2ViTWVt
b3J5U2FtcGxlcjo6c2FtcGxlU3lzdGVtTWFsbG9jKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29u
c3QgY2hhciogZGVmYXVsdE1hbGxvY1pvbmVOYW1lID0gIkRlZmF1bHRNYWxsb2Nab25lIjsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lTmFtZSA9
ICJEaXNwYXRjaENvbnRpbnVhdGlvbnMiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwdXJnZWFi
bGVNYWxsb2Nab25lTmFtZSA9ICJEZWZhdWx0UHVyZ2VhYmxlTWFsbG9jWm9uZSI7CisgICAgU3lz
dGVtTWFsbG9jU3RhdHMgbWFsbG9jU3RhdHM7CisgICAgdm1fYWRkcmVzc190KiB6b25lczsKKyAg
ICB1bnNpZ25lZCBjb3VudDsKKyAgICAKKyAgICAvLyBaZXJvIG91dCB0aGUgc3RydWN0dXJlcyBp
biBjYXNlIGEgem9uZSBpcyBtaXNzaW5nCisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBzdGF0czsK
KyAgICBzdGF0cy5ibG9ja3NfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5zaXplX2luX3VzZSA9IDA7
CisgICAgc3RhdHMubWF4X3NpemVfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5zaXplX2FsbG9jYXRl
ZCA9IDA7CisgICAgbWFsbG9jU3RhdHMuZGVmYXVsdE1hbGxvY1pvbmVTdGF0cyA9IHN0YXRzOwor
ICAgIG1hbGxvY1N0YXRzLmRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0YXRzID0gc3Rh
dHM7CisgICAgbWFsbG9jU3RhdHMucHVyZ2VhYmxlTWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7Cisg
ICAgCisgICAgbWFsbG9jX2dldF9hbGxfem9uZXMobWFjaF90YXNrX3NlbGYoKSwgMCwgJnpvbmVz
LCAmY291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg
ICAgICAgIGlmIChjb25zdCBjaGFyKiBuYW1lID0gbWFsbG9jX2dldF96b25lX25hbWUocmVpbnRl
cnByZXRfY2FzdDxtYWxsb2Nfem9uZV90Kj4oem9uZXNbaV0pKSkgeworICAgICAgICAgICAgc3Rh
dHMuYmxvY2tzX2luX3VzZSA9IDA7CisgICAgICAgICAgICBzdGF0cy5zaXplX2luX3VzZSA9IDA7
CisgICAgICAgICAgICBzdGF0cy5tYXhfc2l6ZV9pbl91c2UgPSAwOworICAgICAgICAgICAgc3Rh
dHMuc2l6ZV9hbGxvY2F0ZWQgPSAwOwkKKyAgICAgICAgICAgIG1hbGxvY196b25lX3N0YXRpc3Rp
Y3MocmVpbnRlcnByZXRfY2FzdDxtYWxsb2Nfem9uZV90Kj4oem9uZXNbaV0pLCAmc3RhdHMpOwor
ICAgICAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgZGVmYXVsdE1hbGxvY1pvbmVOYW1lKSkKKyAg
ICAgICAgICAgICAgICBtYWxsb2NTdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7
CisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKG5hbWUsIGRpc3BhdGNoQ29udGludWF0aW9u
TWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLmRpc3BhdGNoQ29u
dGludWF0aW9uTWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7CisgICAgICAgICAgICBlbHNlIGlmICgh
c3RyY21wKG5hbWUsIHB1cmdlYWJsZU1hbGxvY1pvbmVOYW1lKSkKKyAgICAgICAgICAgICAgICBt
YWxsb2NTdGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gbWFsbG9jU3RhdHM7Cit9CisKK3NpemVfdCBXZWJNZW1vcnlTYW1w
bGVyOjpzYW1wbGVQcm9jZXNzQ29tbWl0dGVkQnl0ZXMoKSBjb25zdAoreworICAgIHRhc2tfYmFz
aWNfaW5mb182NCB0YXNrSW5mbzsKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IGNvdW50ID0g
VEFTS19CQVNJQ19JTkZPXzY0X0NPVU5UOworICAgIHRhc2tfaW5mbyhtYWNoX3Rhc2tfc2VsZigp
LCBUQVNLX0JBU0lDX0lORk9fNjQsIHJlaW50ZXJwcmV0X2Nhc3Q8dGFza19pbmZvX3Q+KCZ0YXNr
SW5mbyksICZjb3VudCk7CisgICAgcmV0dXJuIHRhc2tJbmZvLnJlc2lkZW50X3NpemU7Cit9CisK
K1N0cmluZyBXZWJNZW1vcnlTYW1wbGVyOjpwcm9jZXNzTmFtZSgpIGNvbnN0Cit7CisgICAgTlNT
dHJpbmcgKmFwcE5hbWUgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJd
OworICAgIGlmICghYXBwTmFtZSkKKyAgICAgICAgYXBwTmFtZSA9IFtbTlNQcm9jZXNzSW5mbyBw
cm9jZXNzSW5mb10gcHJvY2Vzc05hbWVdOworICAgIHJldHVybiBTdHJpbmcoYXBwTmFtZSk7Cit9
CisgIAorV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVXZWJLaXQo
KSBjb25zdAoreworICAgIHNpemVfdCB0b3RhbEJ5dGVzSW5Vc2UgPSAwLCB0b3RhbEJ5dGVzQ29t
bWl0dGVkID0gMDsgCisgICAgCisgICAgV2ViTWVtb3J5U3RhdGlzdGljcyB3ZWJLaXRNZW1vcnlT
dGF0czsKKyAgICAKKyAgICBGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGlj
cyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKKyAgICBzaXplX3QgZmFzdE1hbGxvY0J5
dGVzSW5Vc2UgPSBmYXN0TWFsbG9jU3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVzIC0gZmFzdE1h
bGxvY1N0YXRpc3RpY3MuZnJlZUxpc3RCeXRlczsKKyAgICBzaXplX3QgZmFzdE1hbGxvY0J5dGVz
Q29tbWl0dGVkID0gZmFzdE1hbGxvY1N0YXRpc3RpY3MuY29tbWl0dGVkVk1CeXRlczsKKyAgICB0
b3RhbEJ5dGVzSW5Vc2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CisgICAgdG90YWxCeXRlc0Nv
bW1pdHRlZCArPSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBIZWFwOjpTdGF0aXN0aWNzIGhlYXBNZW1v
cnlTdGF0cyA9IGhlYXBTdGF0aXN0aWNzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gaGVhcE1lbW9yeVN0YXRzLnNpemUg
LSBoZWFwTWVtb3J5U3RhdHMuZnJlZTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVk
ID0gaGVhcE1lbW9yeVN0YXRzLnNpemU7CisgICAgdG90YWxCeXRlc0luVXNlICs9IGpzY0hlYXBC
eXRlc0luVXNlOworICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0ganNjSGVhcEJ5dGVzQ29tbWl0
dGVkOworICAgIAorICAgIEdsb2JhbE1lbW9yeVN0YXRpc3RpY3MgZ2xvYmFsTWVtb3J5U3RhdHMg
PSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7CisgICAgdG90YWxCeXRlc0luVXNlICs9IGdsb2Jh
bE1lbW9yeVN0YXRzLnN0YWNrQnl0ZXMgKyBnbG9iYWxNZW1vcnlTdGF0cy5KSVRCeXRlczsKKyAg
ICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGdsb2JhbE1lbW9yeVN0YXRzLnN0YWNrQnl0ZXMgKyBn
bG9iYWxNZW1vcnlTdGF0cy5KSVRCeXRlczsKKyAgICAKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBz
eXN0ZW1TdGF0cyA9IHNhbXBsZVN5c3RlbU1hbGxvYygpOworICAgIAorICAgIHNpemVfdCBkZWZh
dWx0TWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0
YXRzLnNpemVfaW5fdXNlOworICAgIHNpemVfdCBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pv
bmVCeXRlc0luVXNlID0gc3lzdGVtU3RhdHMuZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25l
U3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0lu
VXNlID0gc3lzdGVtU3RhdHMucHVyZ2VhYmxlTWFsbG9jWm9uZVN0YXRzLnNpemVfaW5fdXNlOwor
ICAgIHNpemVfdCBkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkID0gc3lzdGVtU3RhdHMu
ZGVmYXVsdE1hbGxvY1pvbmVTdGF0cy5zaXplX2FsbG9jYXRlZDsKKyAgICBzaXplX3QgZGlzcGF0
Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5kaXNw
YXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVTdGF0cy5zaXplX2FsbG9jYXRlZDsKKyAgICBzaXpl
X3QgcHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkID0gc3lzdGVtU3RhdHMucHVyZ2Vh
YmxlTWFsbG9jWm9uZVN0YXRzLnNpemVfYWxsb2NhdGVkOworICAgIHRvdGFsQnl0ZXNJblVzZSAr
PSBkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzSW5Vc2UgKyBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxv
Y1pvbmVCeXRlc0luVXNlICsgcHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzSW5Vc2U7CisgICAgdG90
YWxCeXRlc0NvbW1pdHRlZCArPSBkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkICsgZGlz
cGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgKyBwdXJnZWFibGVNYWxs
b2Nab25lQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgc2l6ZV90IHJlc2lkZW50U2l6ZSA9IHNh
bXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcygpOworCisgICAgZG91YmxlIG5vdyA9IHd0Zjo6Y3Vy
cmVudFRpbWUoKTsKKyAgICAgICAgCisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQo
U3RyaW5nKCJUaW1lc3RhbXAiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVu
ZChub3cpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiVG90YWwg
Qnl0ZXMgb2YgTWVtb3J5IEluIFVzZSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMu
YXBwZW5kKHRvdGFsQnl0ZXNJblVzZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBl
bmQoU3RyaW5nKCJGYXN0IE1hbGxvYyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0
YXRzLnZhbHVlcy5hcHBlbmQoZmFzdE1hbGxvY0J5dGVzSW5Vc2UpOworICAgIHdlYktpdE1lbW9y
eVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsK
KyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0
ZXNJblVzZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJEaXNw
YXRjaCBDb250aW51YXRpb24gTWFsbG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5
U3RhdHMudmFsdWVzLmFwcGVuZChkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0lu
VXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlB1cmdlYWJs
ZSBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBw
ZW5kKHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy5rZXlzLmFwcGVuZChTdHJpbmcoIkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJL
aXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRlc0luVXNlKTsKKyAgICB3ZWJL
aXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlRvdGFsIEJ5dGVzIG9mIENvbW1pdHRl
ZCBNZW1vcnkiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZCh0b3RhbEJ5
dGVzQ29tbWl0dGVkKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmco
IkZhc3QgTWFsbG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVz
LmFwcGVuZChmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRz
LmtleXMuYXBwZW5kKFN0cmluZygiRGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3
ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21t
aXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGlzcGF0
Y2ggQ29udGludWF0aW9uIE1hbGxvYyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0
YXRzLnZhbHVlcy5hcHBlbmQoZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21t
aXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiUHVyZ2Vh
YmxlIE1hbGxvYyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5h
cHBlbmQocHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3ZWJLaXRNZW1v
cnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAg
ICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRlc0NvbW1pdHRlZCk7
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0IFN0
YWNrIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZ2xvYmFs
TWVtb3J5U3RhdHMuc3RhY2tCeXRlcyk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBl
bmQoU3RyaW5nKCJKYXZhU2NyaXB0IEpJVCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy52YWx1ZXMuYXBwZW5kKGdsb2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzKTsKKyAgICB3ZWJLaXRN
ZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlJlc2lkZW50IFNpemUiKSk7CisgICAgd2Vi
S2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChyZXNpZGVudFNpemUpOworICAgIAorICAgIHJl
dHVybiB3ZWJLaXRNZW1vcnlTdGF0czsKK30KKyAgICAKK30KKwpJbmRleDogV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dC5jcHAJKHJldmlzaW9uIDc1MDIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29u
dGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbW11
dGFibGVBcnJheS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAj
aW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNs
dWRlICJUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmgiCkBAIC0zNiwxMiArMzcsMTQgQEAKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFn
ZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYk1lbW9y
eVNhbXBsZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0xh
bmd1YWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
TGVha0NvdW50ZXIuaD4KQEAgLTg2LDYgKzg5LDggQEAgV2ViQ29udGV4dDo6V2ViQ29udGV4dChQ
cm9jZXNzTW9kZWwgcHJvYwogICAgICwgbV9jYWNoZU1vZGVsKENhY2hlTW9kZWxEb2N1bWVudFZp
ZXdlcikKICAgICAsIG1fY2xlYXJSZXNvdXJjZUNhY2hlc0Zvck5ld1dlYlByb2Nlc3MoZmFsc2Up
CiAgICAgLCBtX2NsZWFyQXBwbGljYXRpb25DYWNoZUZvck5ld1dlYlByb2Nlc3MoZmFsc2UpCisg
ICAgLCBtX21lbW9yeVNhbXBsZXJFbmFibGVkKGZhbHNlKQorICAgICwgbV9tZW1vcnlTYW1wbGVy
SW50ZXJ2YWwoMTQwMC4wKQogICAgICwgbV9kYXRhYmFzZU1hbmFnZXJQcm94eShXZWJEYXRhYmFz
ZU1hbmFnZXJQcm94eTo6Y3JlYXRlKHRoaXMpKQogI2lmIFBMQVRGT1JNKFdJTikKICAgICAsIG1f
c2hvdWxkUGFpbnROYXRpdmVDb250cm9scyh0cnVlKQpAQCAtMTk1LDYgKzIwMCwxOSBAQCB2b2lk
IFdlYkNvbnRleHQ6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpCiAgICAgQVNTRVJUX1VOVVNFRChw
cm9jZXNzLCBwcm9jZXNzID09IG1fcHJvY2Vzcyk7CiAKICAgICBtX3Zpc2l0ZWRMaW5rUHJvdmlk
ZXIucHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZygpOworICAgIAorICAgIC8vIFNvbWV0aW1lcyB0
aGUgbWVtb3J5U2FtcGxlciBnZXRzIGluaXRpYWxpemVkIGFmdGVyIHByb2Nlc3MgaW5pdGlhbGl6
YXRpb24gaGFzIGhhcHBlbmVkIGJ1dCBiZWZvcmUgdGhlIHByb2Nlc3MgaGFzIGZpbmlzaGVkIGxh
dW5jaGluZworICAgIC8vIHNvIGNoZWNrIGlmIGl0IG5lZWRzIHRvIGJlIHN0YXJ0ZWQgaGVyZQor
ICAgIGlmKG1fbWVtb3J5U2FtcGxlckVuYWJsZWQpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGU7CisgICAgICAgIC8vIHdheSB0byBnZXQg
bmFtZSBvZiBwcm9jZXNzIGZyb20gVUkgc2lkZT8KKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBu
b3cgPSB3dGY6OmN1cnJlbnRUaW1lKCk7CisgICAgICAgIFN0cmluZyBzYW1wbGVMb2dGaWxlUGF0
aCA9IFN0cmluZzo6Zm9ybWF0KCJXZWJQcm9jZXNzJWxsdSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90
Pihub3cpKTsKKyAgICAgICAgc2FtcGxlTG9nRmlsZVBhdGggPSBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKHNhbXBsZUxvZ0ZpbGVQYXRoLCBTYW5kYm94RXh0
ZW5zaW9uOjpXcml0ZU9ubHksIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUpOworICAgICAgICAKKyAg
ICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNh
bXBsZXIoc2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIG1fbWVtb3J5
U2FtcGxlckludGVydmFsKSwgMCk7CisgICAgfQogfQogCiB2b2lkIFdlYkNvbnRleHQ6OnByb2Nl
c3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC01MjEsNSArNTM5LDQyIEBA
IHZvaWQgV2ViQ29udGV4dDo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlKCkKIAogICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q2xlYXJBcHBsaWNhdGlvbkNhY2hlKCksIDAp
OwogfQorICAgIAordm9pZCBXZWJDb250ZXh0OjpzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgZG91
YmxlIGludGVydmFsKQoreyAgICAKKyAgICAvLyBGb3IgbmV3IFdlYlByb2Nlc3NlcyB3ZSB3aWxs
IGFsc28gd2FudCB0byBzdGFydCB0aGUgTWVtb3J5IFNhbXBsZXIKKyAgICBtX21lbW9yeVNhbXBs
ZXJFbmFibGVkID0gdHJ1ZTsKKyAgICBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCA9IGludGVydmFs
OworICAgIAorICAgIC8vIEZvciBVSVByb2Nlc3MKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFy
ZWQoKS0+c3RhcnQoaW50ZXJ2YWwpOworICAgIAorICAgIGlmICghaGFzVmFsaWRQcm9jZXNzKCkp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBGb3IgV2ViUHJvY2Vzcwor
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW1wbGVMb2dTYW5kYm94SGFuZGxlOyAgICAK
KyAgICBkb3VibGUgbm93ID0gd3RmOjpjdXJyZW50VGltZSgpOworICAgIFN0cmluZyBzYW1wbGVM
b2dGaWxlUGF0aCA9IFN0cmluZzo6Zm9ybWF0KCJXZWJQcm9jZXNzJWxsdSIsIHN0YXRpY19jYXN0
PHVpbnQ2NF90Pihub3cpKTsKKyAgICBzYW1wbGVMb2dGaWxlUGF0aCA9IFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoc2FtcGxlTG9nRmlsZVBhdGgsIFNhbmRi
b3hFeHRlbnNpb246OldyaXRlT25seSwgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7CisgICAgCisg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBs
ZXIoc2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKSwg
MCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIoKQoreyAgICAKKyAg
ICAvLyBGb3IgV2ViUHJvY2VzcworICAgIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgPSBmYWxzZTsK
KyAgICAKKyAgICAvLyBGb3IgVUlQcm9jZXNzCisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVk
KCktPnN0b3AoKTsKKyAgICAKKyAgICBpZiAoIWhhc1ZhbGlkUHJvY2VzcygpKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpLCAwKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktp
dDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw5
IEBAIHB1YmxpYzoKICAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWwoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlTW9kZWw7IH0KICAgICB2b2lkIGNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICB2b2lk
IGNsZWFyQXBwbGljYXRpb25DYWNoZSgpOworICAgIAorICAgIHZvaWQgc3RhcnRNZW1vcnlTYW1w
bGVyKGNvbnN0IGRvdWJsZSBpbnRlcnZhbCk7CisgICAgdm9pZCBzdG9wTWVtb3J5U2FtcGxlcigp
OwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgc2V0U2hvdWxkUGFpbnROYXRpdmVDb250
cm9scyhib29sKTsKQEAgLTE4Niw2ICsxODksOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2Ns
ZWFyUmVzb3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzOwogICAgIGJvb2wgbV9jbGVhckFwcGxp
Y2F0aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzOworICAgIAorICAgIGJvb2wgbV9tZW1vcnlTYW1w
bGVyRW5hYmxlZDsKKyAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWw7CiAKICAgICBS
ZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+IG1fZGF0YWJhc2VNYW5hZ2VyUHJveHk7CiAK
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24gNzUwMjIp
CisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTUsMyArMTU1LDEzIEBAIFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldERh
dGFiYXMKIHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNvbnRleHRSZWYpLT5kYXRhYmFzZU1h
bmFnZXJQcm94eSgpKTsKIH0KKwordm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLRG91YmxlUmVmIGludGVydmFsKQoreworICAgIHRvSW1w
bChjb250ZXh0UmVmKS0+c3RhcnRNZW1vcnlTYW1wbGVyKHRvSW1wbChpbnRlcnZhbCktPnZhbHVl
KCkpOworfQorCit2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQoreworICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c3RvcE1lbW9yeVNhbXBsZXIo
KTsKK30KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCShyZXZpc2lvbiA3NTAy
MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNiArMTE3LDkgQEAgV0tfRVhQT1JUIFdLQ2FjaGVNb2RlbCBXS0NvbnRleHRHZXRD
YWNoZQogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclJlc291cmNlQ2FjaGVzKFdLQ29u
dGV4dFJlZiBjb250ZXh0KTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQXBwbGljYXRp
b25DYWNoZShXS0NvbnRleHRSZWYgY29udGV4dCk7CisgICAgCitXS19FWFBPUlQgdm9pZCBXS0Nv
bnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG91YmxlUmVm
IGludGVydmFsKTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdL
Q29udGV4dFJlZiBjb250ZXh0KTsKIAogV0tfRVhQT1JUIFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdL
Q29udGV4dEdldERhdGFiYXNlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKSW5kZXg6
IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NTAy
MikKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjIsNiArMjYyLDkgQEAKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8q
IFdLUHJlZmVyZW5jZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1By
aXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4REMyRUY1MzA0ODZBNjk0MDA5OEIyMTYgLyogSW5mb1BsaXN0LnN0cmluZ3MgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OUMxNjY2RkU4NDExNThD
MDJBQUMwNyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLzsgfTsKIAkJOERDMkVGNTcwNDg2QTY5NDAw
OThCMjE2IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDEwNThDN0IxRkVBNTU4NUUxMUNBMkNCQiAvKiBDb2NvYS5mcmFt
ZXdvcmsgKi87IH07CisJCTkwOTg1NEVDMTJCQzRFMTcwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1w
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkw
NTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLzsgfTsKKwkJ
OTA5ODU0RUQxMkJDNEUxODAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU5MTJCQzI0OEIwMDA3
OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmggKi87IH07CisJCTkwOTg1NEVFMTJCQzRFMTgwMDBB
RDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU1MTJCQzI0NzYwMDA3OTlCNiAvKiBXZWJNZW1v
cnlTYW1wbGVyLm1hYy5tbSAqLzsgfTsKIAkJOTM1RUVCOUIxMjc3NjE3QzAwMzMyMkI4IC8qIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM1RUVCOTgxMjc3NjE2RDAwMzMyMkI4IC8qIFdLQnVuZGxlQmFj
a0ZvcndhcmRMaXN0SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzNUVFQjlFMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzVFRUI5NTEyNzc2MTZEMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3Bw
ICovOyB9OwogCQk5MzVFRUI5RjEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
NUVFQjk2MTI3NzYxNkQwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NDMsNiArOTQ2
LDkgQEAKIAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThEQzJFRjVBMDQ4NkE2OTQwMDk4QjIx
NiAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBs
aXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REMyRUY1QjA0ODZBNjk0MDA5OEIy
MTYgLyogV2ViS2l0Mi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBXZWJLaXQyLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKKwkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTWVtb3J5U2FtcGxl
ci5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwNTYyMEU4MTJCQzI0OEIw
MDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYk1lbW9yeVNhbXBsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZW1vcnlTYW1wbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjhGMTI3NzYxNUQwMDMzMjJCOCAvKiBJbmpl
Y3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjkwMTI3NzYxNUQwMDMzMjJCOCAvKiBJbmplY3RlZEJ1
bmRsZUJhY2tGb3J3YXJkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzVFRUI5MTEyNzc2MTVEMDAzMzIyQjggLyogSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2Fy
ZExpc3RJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVj
dGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjYzLDYgKzE2NjksOCBAQAogCQkJCUJDQ0Y2QUJBMTJDOTFFRjkwMDhGOUMzNSAv
KiBXZWJJbWFnZS5jcHAgKi8sCiAJCQkJQkNDRjZBQkIxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYklt
YWdlLmggKi8sCiAJCQkJQzAzMzdERDIxMjdBMkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZl
bnQuY3BwICovLAorCQkJCTkwNTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1w
bGVyLmNwcCAqLywKKwkJCQk5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2Ft
cGxlci5oICovLAogCQkJCUMwMzM3REFGMTI3QTI4RDAwMDhGRjRGNCAvKiBXZWJNb3VzZUV2ZW50
LmNwcCAqLywKIAkJCQlCQ0Y2OUY5ODExNzZDRUQ2MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRh
dGFTdG9yZS5oICovLAogCQkJCUJDMzNERDY3MTIzODQ2NDYwMDM2MEYzRiAvKiBXZWJOdW1iZXIu
aCAqLywKQEAgLTIxNTQsNiArMjE2Miw3IEBACiAJCQkJQkNFMjMyNjIxMjJDNkNGMzAwRDVDMzVB
IC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSAqLywKIAkJCQlCQzExMUI1QjExMkY2Mjk4
MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5LmggKi8sCiAJCQkJQkMxMTFCNUMxMTJGNjI5ODAw
MzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLywKKwkJCQk5MDU2MjBFNTEyQkMyNDc2MDAw
Nzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5tYWMubW0gKi8sCiAJCQkJQkNFMjMxQzAxMjJDNDY2
RTAwRDVDMzVBIC8qIFdlYlVSTFJlcXVlc3RNYWMubW0gKi8sCiAJCQkJQkM5MEExRDUxMjJERDY2
QTAwQ0M4QzUwIC8qIFdlYlVSTFJlc3BvbnNlTWFjLm1tICovLAogCQkJCTFBQUI0QUE5MTI5NkYx
NTQwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uTWFjLm1tICovLApAQCAtMjgyOSw2ICsyODM4
LDcgQEAKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzg1OEEyMDEyQzAzNTdCMDBFREVCMkUgLyogV2ViUmVzb3VyY2VM
b2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NBMDAyQkU2N0Ig
LyogVGV4dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkwOTg1NEVEMTJCQzRFMTgwMDBB
RDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MUFCNTEy
QzAyRUM0MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
Q0Y2NzJEMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQ0Y2QUJEMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMjYzLDYgKzMyNzMsOCBAQAogCQkJCTFBNEE5QzlBMTJCODIxQ0QwMDhGRTk4
NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDODU4
QTIxMTJDMDM1N0IwMEVERUIyRSAvKiBXZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFBNDE3RUYxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJOTA5ODU0RUMxMkJDNEUxNzAwMEFEMDgwIC8qIFdlYk1lbW9y
eVNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTA5ODU0RUUxMkJDNEUxODAwMEFEMDgw
IC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjY3MzMx
MkM3RjE1QzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0NGNkFCQzEyQzkxRUY5MDA4RjlDMzUgLyogV2ViSW1hZ2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNDRjZBQzIxMkM5MUYzNDAwOEY5QzM1IC8qIFdLSW1hZ2UuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA3NTAyMikK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTAgKzMxLDEyIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVNZXNzYWdlS2luZHMuaCIK
ICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgiCiAjaW5jbHVkZSAi
UnVuTG9vcC5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJD
b250ZXh0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNp
bmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2lu
Y2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5oIgpAQCAtNjExLDYgKzYxMywxNiBAQCB2b2lkIFdlYlByb2Nlc3M6OmNhbmNlbERv
d25sb2FkKHVpbnQ2NF90CiAgICAgRG93bmxvYWRNYW5hZ2VyOjpzaGFyZWQoKS5jYW5jZWxEb3du
bG9hZChkb3dubG9hZElEKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzOjpzdGFydE1lbW9yeVNhbXBs
ZXIoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWxlSGFuZGxlLCBj
b25zdCBTdHJpbmcmIHNhbXBsZUxvZ0ZpbGVQYXRoLCBjb25zdCBDRlRpbWVJbnRlcnZhbCBpbnRl
cnZhbCkKK3sKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RhcnQoc2FtcGxlTG9n
RmlsZUhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKTsKK30KKyAgICAKK3ZvaWQg
V2ViUHJvY2Vzczo6c3RvcE1lbW9yeVNhbXBsZXIoKQoreworICAgIFdlYk1lbW9yeVNhbXBsZXI6
OnNoYXJlZCgpLT5zdG9wKCk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4dENoZWNrZXJT
dGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQogewogICAgIG1f
dGV4dENoZWNrZXJTdGF0ZSA9IHRleHRDaGVja2VyU3RhdGU7CkluZGV4OiBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmgJKHJldmlzaW9uIDc1MDIyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNhY2hlTW9k
ZWwuaCIKICNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5o
IgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnku
aCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtU
YWJsZS5oIgpAQCAtMTMzLDYgKzEzNCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUNs
ZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25DYWNoZSgpOwog
CisgICAgdm9pZCBzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlKTsKKyAgICB2b2lkIHN0b3BNZW1vcnlT
YW1wbGVyKCk7CisKICAgICB2b2lkIGNhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQp
OwogCiAgICAgdm9pZCBzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUm
KTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZp
c2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw5IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3Mg
ewogCiAgICAgQ2xlYXJSZXNvdXJjZUNhY2hlcygpOwogICAgIENsZWFyQXBwbGljYXRpb25DYWNo
ZSgpOworICAgIAorICAgIHZvaWQgU3RhcnRNZW1vcnlTYW1wbGVyKFdlYktpdDo6U2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIFdURjo6U3RyaW5nIHNhbXBsZUxv
Z0ZpbGVQYXRoLCBkb3VibGUgaW50ZXJ2YWwpOworICAgIHZvaWQgU3RvcE1lbW9yeVNhbXBsZXIo
KTsKIAogICAgICMgRG93bmxvYWRzLiBUaGlzIHNob3VsZCByZWFsbHkgYmUgaW4gYSBEb3dubG9h
ZC5tZXNzYWdlcy5pbiwgYnV0IGl0IHNlZW1lZCB1bm5lY2Vzc2FyeSB0byBjcmVhdGUgYSBuZXcg
ZmlsZSBqdXN0IGZvcgogICAgICMgYSBzaW5nbGUgbWVzc2FnZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77969</attachid>
            <date>2011-01-04 21:22:32 -0800</date>
            <delta_ts>2011-01-04 23:48:49 -0800</delta_ts>
            <desc>fix typo</desc>
            <filename>webkit2MemorySampler.txt</filename>
            <type>text/plain</type>
            <size>41701</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS84NjQ5NjE3PiBNaWdyYXRlIG1lbW9yeSB0cmFja2luZyBmcm9tIFNh
ZmFyaSB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwNzk5IEFkZCBNZW1vcnkgU2FtcGxlciB0byBXZWJLaXQKKyAgICAgICAgCisgICAg
ICAgIEFkZCBhIHNhbXBsZXIgZm9yIHByaW50aW5nIG9mZiBwcm9jZXNzIG1lbW9yeSBzdGF0aXN0
aWNzLgorICAgICAgICBFeHBvcnQgZmlsZSBtb2RlLgorCisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisKIDIwMTEtMDEtMDQgIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzUwMjIp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC03NjksNiArNzY5
LDcgQEAgX19aTjdXZWJDb3JlOEZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlOEdyYWRpZW50MTJh
ZGRDb2xvclN0b3BFZlJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18x
MEZsb2F0UG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAorX19a
TjdXZWJDb3JlOG9wZW5GaWxlRVJLTjNXVEY2U3RyaW5nRU5TXzEyRmlsZU9wZW5Nb2RlRQogX19a
TjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5n
czE1c2V0V2ViR0xFbmFibGVkRWIKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5p
ZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2NDk2MTc+IE1pZ3JhdGUgbWVt
b3J5IHRyYWNraW5nIGZyb20gU2FmYXJpIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3OTkgQWRkIE1lbW9yeSBTYW1wbGVyIHRvIFdl
YktpdAorICAgICAgICAKKyAgICAgICAgQWRkIGEgc2FtcGxlciBmb3IgcHJpbnRpbmcgb2ZmIHBy
b2Nlc3MgbWVtb3J5IHN0YXRpc3RpY3MuCisgICAgICAgIFRoaXMgdG9vbCBjYW4gdHJhY2s6Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgV2ViQ29yZQorICAgICAgICAgICAgICAg
ICAgIC0gRmFzdE1hbGxvYyBhbGxvY2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBv
ciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAg
ICAgICAgICAtIEdhcmJhZ2UgY29sbGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1
c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAgICAgICAgIC0gU3RhY2sgYnl0ZXMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdHRlZCBvbmx5ISkKKyAgICAgICAgICAgICAg
ICAgICAtIEpJVCBDb2RlIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0
ZWQgb25seSEpCisgICAgICAgICAgICAgICAgTWFsbG9jIHpvbmVzCisgICAgICAgICAgICAgICAg
ICAgLSBJbiB1c2UgYnl0ZXMgZm9yIHRoZSBmb2xsb3dpbmcgem9uZXM6CisgICAgICAgICAgICAg
ICAgICAgICAgICogRGVmYXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNl
IG9yIGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgKiBEaXNwQ29uIHpvbmUgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAg
ICAgICAgICAgICAqIFB1cmdhYmxlIHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVz
ZSBvciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgVGFzayBJbmZvCisgICAgICAgICAgICAg
ICAgICAgLSBSZXNpZGVudCBzaXplIG1lbW9yeSAoUlNJWkUpCisgICAgICAgIAorICAgICAgICAg
ICAgICAgIERhdGEgY29sbGVjdGVkIGlzIGR1bXBlZCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAg
ICAgICAKKyAgICAgICAgQ3JlYXRlIGEgc2FuZGJveCBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4KKyAg
ICAgICAgKiBTaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25NYWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUpOgorICAgICAgICAKKyAg
ICAgICAgTWVtb3J5IFNhbXBsZXIgZmlsZXMKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1dl
Yk1lbW9yeVNhbXBsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2Ft
cGxlcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6V2ViTWVt
b3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0YXJ0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0b3ApOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZW1vcnlTYW1wbGVyOjppc1J1bm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1v
cnlTYW1wbGVyOjppbml0aWFsaXplVGVtcExvZ0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjppbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYk1lbW9yeVNhbXBsZXI6OndyaXRlSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnNhbXBsZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjpzdG9wVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9y
eVNhbXBsZXI6OmFwcGVuZEN1cnJlbnRNZW1vcnlVc2FnZVRvRmlsZSk6CisgICAgICAgICogU2hh
cmVkL1dlYk1lbW9yeVNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVN5c3RlbU1hbGxvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnByb2Nlc3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5
U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgCisgICAgICAgIEFQSSB0byBzdGFydCBh
bmQgc3RvcCBVSVByb2Nlc3MgYW5kIFdlYlByb2Nlc3Mgc2FtcGxpbmcuCisgICAgICAgIAorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0
U3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVy
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgIAorICAg
ICAgICBTZW5kIG1lc3NhZ2VzIHRvIFdlYlByb2Nlc3MgdG8gc3RhcnQgYW5kIHN0b3AgbWVtb3J5
IHNhbXBsaW5nLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6c3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJD
b250ZXh0Lmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnN0YXJ0TWVtb3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnN0b3BNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTEt
MDEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAkocmV2
aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoV0VCX1BST0NF
U1NfU0FOREJPWCkKIHR5cGVkZWYgc3RydWN0IF9fV0tTYW5kYm94RXh0ZW5zaW9uKiBXS1NhbmRi
b3hFeHRlbnNpb25SZWY7CkBAIC02OSw2ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBIYW5kbGUmKTsKICAgICBz
dGF0aWMgdm9pZCBjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhh
bmRsZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShj
b25zdCBTdHJpbmcmIHByZWZpeCwgVHlwZSB0eXBlLCBIYW5kbGUmKTsKICAgICB+U2FuZGJveEV4
dGVuc2lvbigpOwogCiAgICAgYm9vbCBpbnZhbGlkYXRlKCk7CkBAIC04OSw2ICs5MSw3IEBAIGlu
bGluZSB2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6ZW4KIGlubGluZSBib29sIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhh
bmRsZSYpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBQYXNzUmVmUHRyPFNhbmRib3hFeHRlbnNp
b24+IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShjb25zdCBIYW5kbGUmKSB7IHJldHVybiAwOyB9
CiBpbmxpbmUgdm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5n
JiBwYXRoLCBUeXBlIHR5cGUsIEhhbmRsZSYpIHsgfQoraW5saW5lIFN0cmluZyBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4
LCBUeXBlIHR5cGUsIEhhbmRsZSYpIHtyZXR1cm4gU3RyaW5nKCk7fQogaW5saW5lIFNhbmRib3hF
eHRlbnNpb246On5TYW5kYm94RXh0ZW5zaW9uKCkgeyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0
ZW5zaW9uOjppbnZhbGlkYXRlKCkgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZSgpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYktpdDIvU2hh
cmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dl
Yk1lbW9yeVNhbXBsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViTWVt
b3J5U2FtcGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgi
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIgKnNo
YXJlZE1lbW9yeVNhbXBsZXIgPSAwOworCitXZWJNZW1vcnlTYW1wbGVyKiBXZWJNZW1vcnlTYW1w
bGVyOjpzaGFyZWQoKQoreworICAgIGlmICghc2hhcmVkTWVtb3J5U2FtcGxlcikKKyAgICAgICAg
c2hhcmVkTWVtb3J5U2FtcGxlciA9IG5ldyBXZWJNZW1vcnlTYW1wbGVyKCk7CisgICAgcmV0dXJu
IHNoYXJlZE1lbW9yeVNhbXBsZXI7Cit9CisKK1dlYk1lbW9yeVNhbXBsZXI6OldlYk1lbW9yeVNh
bXBsZXIoKSAKKyAgICA6IG1fc2FtcGxlVGltZXIodGhpcywgJldlYk1lbW9yeVNhbXBsZXI6OnNh
bXBsZVRpbWVyRmlyZWQpCisgICAgLCBtX3N0b3BUaW1lcih0aGlzLCAmV2ViTWVtb3J5U2FtcGxl
cjo6c3RvcFRpbWVyRmlyZWQpCisgICAgLCBtX2lzUnVubmluZyhmYWxzZSkKKyAgICAsIG1fcnVu
bmluZ1RpbWUoMCkKK3sKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdGFydChjb25zdCBk
b3VibGUgaW50ZXJ2YWwpIAoreworICAgIGlmIChtX2lzUnVubmluZykgCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpbml0aWFsaXplVGVtcExvZ0ZpbGUoKTsKKyAgICBpbml0aWFsaXplVGlt
ZXJzKGludGVydmFsKTsKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdGFydChjb25zdCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgc2FtcGxlTG9nRmlsZVBhdGgsIGNvbnN0IENGVGltZUludGVydmFsIGludGVydmFsKSAKK3sK
KyAgICBpZiAobV9pc1J1bm5pbmcpIAorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYg
d2UgYXJlIG9uIGEgc3lzdGVtIHdpdGhvdXQgU2FuZGJveEV4dGVuc2lvbiB0aGUgaGFuZGxlIGFu
ZCBmaWxlbmFtZSB3aWxsIGJlIGVtcHR5CisgICAgaWYgKHNhbXBsZUxvZ0ZpbGVQYXRoLmlzRW1w
dHkoKSkgeworICAgICAgICBzdGFydChpbnRlcnZhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgICAgIAorICAgIGluaXRpYWxpemVTYW5kYm94ZWRMb2dGaWxlKHNhbXBsZUxvZ0ZpbGVI
YW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoKTsKKyAgICBpbml0aWFsaXplVGltZXJzKGludGVydmFs
KTsKKyAgIAorfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OmluaXRpYWxpemVUaW1lcnMoZG91
YmxlIGludGVydmFsKQoreworICAgIG1fc2FtcGxlVGltZXIuc3RhcnRSZXBlYXRpbmcoMSk7Cisg
ICAgcHJpbnRmKCJTdGFydGVkIG1lbW9yeSBzYW1wbGVyIGZvciBwcm9jZXNzICVzIiwgcHJvY2Vz
c05hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoaW50ZXJ2YWwgPiAwKSB7CisgICAgICAg
IG1fc3RvcFRpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7CisgICAgICAgIHByaW50ZigiIGZv
ciBhIGludGVydmFsIG9mICVnIHNlY29uZHMiLCBpbnRlcnZhbCk7CisgICAgfQorICAgIHByaW50
ZigiOyBTYW1wbGVyIGxvZyBmaWxlIHN0b3JlZCBhdDogJXNcbiIsIG1fc2FtcGxlTG9nRmlsZVBh
dGgudXRmOCgpLmRhdGEoKSk7CisgICAgbV9ydW5uaW5nVGltZSA9IGludGVydmFsOworICAgIG1f
aXNSdW5uaW5nID0gdHJ1ZTsKK30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpzdG9wKCkgCit7
CisgICAgaWYgKCFtX2lzUnVubmluZykgCisgICAgICAgIHJldHVybjsKKyAgICBtX3NhbXBsZVRp
bWVyLnN0b3AoKTsKKyAgICBtX3NhbXBsZUxvZ0ZpbGUgPSAwOworICAgIHByaW50ZigiU3RvcHBl
ZCBtZW1vcnkgc2FtcGxlciBmb3IgcHJvY2VzcyAlc1xuIiwgcHJvY2Vzc05hbWUoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAvLyBGbHVzaCBzdGRvdXQgYnVmZmVyIHNvIHB5dGhvbiBzY3JpcHQgY2Fu
IGJlIGd1YXJhbnRlZWQgdG8gcmVhZCB1cCB0byB0aGlzIHBvaW50LgorICAgIGZmbHVzaChzdGRv
dXQpOworICAgIG1faXNSdW5uaW5nID0gZmFsc2U7CisgICAgCisgICAgaWYobV9zdG9wVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9zdG9wVGltZXIuc3RvcCgpOworICAgIAorICAgIGlmICht
X3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNpb24pIHsKKyAgICAgICAgbV9zYW1wbGVMb2dTYW5kYm94
RXh0ZW5zaW9uLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fc2FtcGxlTG9nU2FuZGJveEV4dGVu
c2lvbiA9IDA7CisgICAgfSAgICAKK30KKworYm9vbCBXZWJNZW1vcnlTYW1wbGVyOjppc1J1bm5p
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzUnVubmluZzsKK30KKyAgICAKK3ZvaWQgV2Vi
TWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRlbXBMb2dGaWxlKCkKK3sKKyAgICBtX3NhbXBsZUxv
Z0ZpbGVQYXRoID0gU3RyaW5nKChvcGVuVGVtcG9yYXJ5RmlsZShwcm9jZXNzTmFtZSgpLnV0Zjgo
KS5kYXRhKCksIG1fc2FtcGxlTG9nRmlsZSkpLmRhdGEoKSk7CisgICAgd3JpdGVIZWFkZXJzKCk7
Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVNhbmRib3hlZExvZ0ZpbGUo
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBj
b25zdCBTdHJpbmcmIHNhbXBsZUxvZ0ZpbGVQYXRoKQoreworICAgIG1fc2FtcGxlTG9nU2FuZGJv
eEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShzYW1wbGVMb2dTYW5kYm94SGFu
ZGxlKTsKKyAgICBpZiAobV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICBtX3Nh
bXBsZUxvZ1NhbmRib3hFeHRlbnNpb24tPmNvbnN1bWUoKTsKKyAgICBtX3NhbXBsZUxvZ0ZpbGVQ
YXRoID0gc2FtcGxlTG9nRmlsZVBhdGg7CisgICAgbV9zYW1wbGVMb2dGaWxlID0gb3BlbkZpbGUo
bV9zYW1wbGVMb2dGaWxlUGF0aCwgT3BlbkZvcldyaXRlKTsKKyAgICB3cml0ZUhlYWRlcnMoKTsK
K30KKwordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjp3cml0ZUhlYWRlcnMoKQoreworICAgIFN0cmlu
ZyBwcm9jZXNzRGV0YWlscyA9IFN0cmluZygiUHJvY2VzczogIik7CisgICAgcHJvY2Vzc0RldGFp
bHMuYXBwZW5kKHByb2Nlc3NOYW1lKCkpOworICAgIHByb2Nlc3NEZXRhaWxzLmFwcGVuZChTdHJp
bmcoIlxuIikpOworICAgIHdyaXRlVG9GaWxlKG1fc2FtcGxlTG9nRmlsZSwgcHJvY2Vzc0RldGFp
bHMudXRmOCgpLmRhdGEoKSwgcHJvY2Vzc0RldGFpbHMudXRmOCgpLmxlbmd0aCgpKTsKKyAgICAK
KyAgICBtX3NlcGFyYXRvciA9IFN0cmluZygiXHQiKTsgICAgCisgICAgU3RyaW5nIGhlYWRlciA9
IFN0cmluZygpOyAKKyAgICBXZWJNZW1vcnlTdGF0aXN0aWNzIHN0YXRzID0gc2FtcGxlV2ViS2l0
KCk7CisgICAgaWYgKCFzdGF0cy5rZXlzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRzLmtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGhlYWRl
ci5hcHBlbmQobV9zZXBhcmF0b3IpOworICAgICAgICAgICAgaGVhZGVyLmFwcGVuZChzdGF0cy5r
ZXlzW2ldLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorICAgIGhlYWRlci5hcHBl
bmQoU3RyaW5nKCJcbiIpKTsKKyAgICB3cml0ZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUsIGhlYWRl
ci51dGY4KCkuZGF0YSgpLCBoZWFkZXIudXRmOCgpLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJN
ZW1vcnlTYW1wbGVyOjpzYW1wbGVUaW1lckZpcmVkKFRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+KikK
K3sKKyAgICBhcHBlbmRDdXJyZW50TWVtb3J5VXNhZ2VUb0ZpbGUobV9zYW1wbGVMb2dGaWxlKTsg
Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6c3RvcFRpbWVyRmlyZWQoVGltZXI8V2ViTWVt
b3J5U2FtcGxlcj4qKQoreworICAgIGlmICghbV9pc1J1bm5pbmcpCisgICAgICAgIHJldHVybjsK
KyAgICBwcmludGYoIiVnIHNlY29uZHMgZWxhcHNlZC4gU3RvcHBpbmcgbWVtb3J5IHNhbXBsZXIu
Li5cbiIsIG1fcnVubmluZ1RpbWUpOworICAgIHN0b3AoKTsKK30KKwordm9pZCBXZWJNZW1vcnlT
YW1wbGVyOjphcHBlbmRDdXJyZW50TWVtb3J5VXNhZ2VUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
JiBmaWxlKQoreworICAgIC8vIENvbGxlY3Qgc3RhdGlzdGljcyBmcm9tIGFsbG9jYXRvcnMgYW5k
IGdldCBSU0laRSBtZXRyaWMKKyAgICBTdHJpbmcgc3RhdFN0cmluZyA9IFN0cmluZygpOyAKKyAg
ICBXZWJNZW1vcnlTdGF0aXN0aWNzIG1lbW9yeVN0YXRzID0gc2FtcGxlV2ViS2l0KCk7CisKKyAg
ICBpZiAoIW1lbW9yeVN0YXRzLnZhbHVlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RhdFN0cmlu
Zy5hcHBlbmQobV9zZXBhcmF0b3IpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
bW9yeVN0YXRzLnZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgc3RhdFN0cmluZy5h
cHBlbmQobV9zZXBhcmF0b3IpOworICAgICAgICAgICAgc3RhdFN0cmluZy5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoIiVsdSIsIG1lbW9yeVN0YXRzLnZhbHVlc1tpXSkpOworICAgICAgICB9CisgICAg
fQorICAgIHN0YXRTdHJpbmcuYXBwZW5kKFN0cmluZygiXG4iKSk7CisgICAgd3JpdGVUb0ZpbGUo
bV9zYW1wbGVMb2dGaWxlLCBzdGF0U3RyaW5nLnV0ZjgoKS5kYXRhKCksIHN0YXRTdHJpbmcudXRm
OCgpLmxlbmd0aCgpKTsKK30KKworfQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2Ft
cGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAko
cmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisg
KiAgVGhlIE1lbW9yeVNhbXBsZXIgY2xhc3Mgc2FtcGxlcyBhIG51bWJlciBvZiBpbnRlcm5hbCBh
bmQgZXh0ZXJuYWwgbWVtb3J5IAorICogIG1ldHJpY3MgZXZlcnkgc2Vjb25kIHdoaWxlIHJ1bm5p
bmcuIFNhbXBsZSBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZS4gCisgKiAgU2FtcGxpbmcg
b2NjdXJzIG92ZXIgYSBkdXJhdGlvbiBzcGVjaWZpZWQgd2hlbiBzdGFydGVkLiBJZiBkdXJhdGlv
biBpcyBzZXQgCisgKiAgdG8gMCAoZGVmYXVsdCksIHRoZSBtZW1vcnkgc2FtcGxlciB3aWxsIHJ1
biBpbmRlZmluaXRlbHkgdW50aWwgdGhlIHN0b3AgCisgKiAgZnVuY3Rpb24gaXMgY2FsbGVkLiBN
ZW1vcnlTYW1wbGVyIGFsbG93cyB0aGUgb3B0aW9uIG9mIHNhbXBsaW5nICJpbiB1c2UiIAorICog
IG1lbW9yeSAoY29tbWl0dGVkIG1lbW9yeSBtaW51cyBmcmVlIGxpc3QgYnl0ZSBjb3VudCkgb3Ig
Y29tbWl0dGVkIG1lbW9yeSBmb3IKKyAqICBhbnkgYWxsb2NhdG9yIHdoaWNoIGtlZXBzIGEgZnJl
ZSBsaXN0LiBUaGlzIGluY2x1ZGVzIEZhc3RNYWxsb2MgYW5kIHRoZSAKKyAqICBKYXZhU2NyaXB0
Q29yZSBoZWFwIGF0IHRoaXMgdGltZS4KKyAqICBUaGUgZm9sbG93aW5nIG1lbW9yeSBtZXRyaWNz
IGFyZSByZWNvcmRlZDoKKyAqCisgKiAgICAgIFdlYkNvcmUKKyAqICAgICAgICAgIC0gRmFzdE1h
bGxvYyBhbGxvY2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQp
CisgKiAgICAgIEphdmFTY3JpcHRDb3JlCisgKiAgICAgICAgICAtIEdhcmJhZ2UgY29sbGVjdG9y
IGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICogICAgICAg
ICAgLSBTdGFjayBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWl0dGVk
IG9ubHkhKQorICogICAgICAgICAgLSBKSVQgQ29kZSBieXRlcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29tbWl0dGVkIG9ubHkhKQorICogICAgICBNYWxsb2Mgem9uZXMKKyAqICAgICAg
ICAgIC0gSW4gdXNlIGJ5dGVzIGZvciB0aGUgZm9sbG93aW5nIHpvbmVzOgorICogICAgICAgICAg
ICAgICogRGVmYXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNv
bW1pdHRlZCkKKyAqICAgICAgICAgICAgICAqIERpc3BDb24gem9uZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgICAgICAgICAgKiBQdXJnYWJs
ZSB6b25lICAgICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICog
ICAgICBUYXNrIEluZm8KKyAqICAgICAgICAgIC0gUmVzaWRlbnQgc2l6ZSBtZW1vcnkgKFJTSVpF
KQorICovCisKKyNpZm5kZWYgV2ViTWVtb3J5U2FtcGxlcl9oCisjZGVmaW5lIFdlYk1lbW9yeVNh
bXBsZXJfaAorCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvVGltZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RydWN0IFN5c3RlbU1hbGxvY1N0YXRzOworCitzdHJ1Y3QgV2ViTWVtb3J5
U3RhdGlzdGljcworeworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgVmVjdG9yPHNpemVf
dD4gdmFsdWVzOworfTsKKyAgICAKK2NsYXNzIFdlYk1lbW9yeVNhbXBsZXIgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworCitwdWJsaWM6CisgICAgc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIqIHNoYXJl
ZCgpOworICAgIHZvaWQgc3RhcnQoY29uc3QgZG91YmxlIGludGVydmFsPTApOworICAgIHZvaWQg
c3RhcnQoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgZG91YmxlIGludGVydmFsPTApOworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNSdW5u
aW5nKCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIFdlYk1lbW9yeVNhbXBsZXIoKTsKKyAg
ICB+V2ViTWVtb3J5U2FtcGxlcigpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVRlbXBMb2dG
aWxlKCk7CisgICAgdm9pZCBpbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZShjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHdyaXRlSGVhZGVy
cygpOworICAgIHZvaWQgaW5pdGlhbGl6ZVRpbWVycyhkb3VibGUpOworICAgIHZvaWQgc2FtcGxl
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopOworICAgIHZvaWQg
c3RvcFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8V2ViTWVtb3J5U2FtcGxlcj4qKTsKKyAgICB2
b2lkIGFwcGVuZEN1cnJlbnRNZW1vcnlVc2FnZVRvRmlsZShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVI
YW5kbGUmKTsKKyAgICAKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBzYW1wbGVTeXN0ZW1NYWxsb2Mo
KSBjb25zdDsKKyAgICBzaXplX3Qgc2FtcGxlUHJvY2Vzc0NvbW1pdHRlZEJ5dGVzKCkgY29uc3Q7
CisgICAgV2ViTWVtb3J5U3RhdGlzdGljcyBzYW1wbGVXZWJLaXQoKSBjb25zdDsKKyAgICBTdHJp
bmcgcHJvY2Vzc05hbWUoKSBjb25zdDsKKyAgICAKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgbV9zYW1wbGVMb2dGaWxlOworICAgIFN0cmluZyBtX3NhbXBsZUxvZ0ZpbGVQYXRoOwor
ICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKKyAgICBXZWJDb3JlOjpUaW1lcjxXZWJNZW1vcnlTYW1w
bGVyPiBtX3NhbXBsZVRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+
IG1fc3RvcFRpbWVyOworICAgIGJvb2wgbV9pc1J1bm5pbmc7CisgICAgZG91YmxlIG1fcnVubmlu
Z1RpbWU7CisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FtcGxlTG9nU2FuZGJveEV4
dGVuc2lvbjsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9tYWMvU2Fu
ZGJveEV4dGVuc2lvbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9tYWMvU2Fu
ZGJveEV4dGVuc2lvbk1hYy5tbQkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1NoYXJlZC9t
YWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwz
MCBAQCB2b2lkIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShjb25zCiAgICAgQVNTRVJU
KCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKICAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5z
aW9uID0gV0tTYW5kYm94RXh0ZW5zaW9uQ3JlYXRlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKS5kYXRhKCksIHdrU2FuZGJveEV4dGVuc2lvblR5cGUodHlwZSkpOwogfQorICAgIAorU3Ry
aW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3Qg
U3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJU
KCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKKyAgICAKKyAgICBWZWN0b3I8Y2hhcj4gcGF0
aChQQVRIX01BWCk7CisgICAgaWYgKCFjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwg
cGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IAorICAgIC8vIFNocmluayB0aGUgdmVjdG9yLiAgIAorICAgIHBhdGguc2hyaW5rKHN0cmxlbihw
YXRoLmRhdGEoKSkpOworICAgIEFTU0VSVChwYXRoLmxhc3QoKSA9PSAnLycpOworICAgIAorICAg
IC8vIEFwcGVuZCB0aGUgZmlsZSBuYW1lLiAgICAKKyAgICBwYXRoLmFwcGVuZChwcmVmaXgudXRm
OCgpLmRhdGEoKSwgcHJlZml4Lmxlbmd0aCgpKTsKKyAgICBwYXRoLmFwcGVuZCgnXDAnKTsKKyAg
ICAKKyAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uID0gV0tTYW5kYm94RXh0ZW5zaW9uQ3Jl
YXRlKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoLmRhdGEoKSkuZGF0YSgpLCB3a1NhbmRi
b3hFeHRlbnNpb25UeXBlKHR5cGUpKTsKKworICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVu
c2lvbikgeworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBTdHJp
bmcocGF0aC5kYXRhKCkpOworfQogCiBTYW5kYm94RXh0ZW5zaW9uOjpTYW5kYm94RXh0ZW5zaW9u
KGNvbnN0IEhhbmRsZSYgaGFuZGxlKQogICAgIDogbV9zYW5kYm94RXh0ZW5zaW9uKGhhbmRsZS5t
X3NhbmRib3hFeHRlbnNpb24pCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2Ft
cGxlci5tYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNh
bXBsZXIubWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9y
eVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWVtb3J5U3RhdGlzdGljcy5oPgorI2luY2x1
ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvdGFzay5oPgorI2luY2x1ZGUgPG1hY2gv
bWFjaF90eXBlcy5oPgorI2luY2x1ZGUgPG1hbGxvYy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBu
YW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisgICAgCitzdHJ1Y3QgU3lzdGVtTWFsbG9jU3RhdHMgeworICAgIG1hbGxvY19zdGF0aXN0aWNz
X3QgZGVmYXVsdE1hbGxvY1pvbmVTdGF0czsKKyAgICBtYWxsb2Nfc3RhdGlzdGljc190IGRpc3Bh
dGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0YXRzOworICAgIG1hbGxvY19zdGF0aXN0aWNzX3Qg
cHVyZ2VhYmxlTWFsbG9jWm9uZVN0YXRzOworfTsKKworU3lzdGVtTWFsbG9jU3RhdHMgV2ViTWVt
b3J5U2FtcGxlcjo6c2FtcGxlU3lzdGVtTWFsbG9jKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29u
c3QgY2hhciogZGVmYXVsdE1hbGxvY1pvbmVOYW1lID0gIkRlZmF1bHRNYWxsb2Nab25lIjsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lTmFtZSA9
ICJEaXNwYXRjaENvbnRpbnVhdGlvbnMiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwdXJnZWFi
bGVNYWxsb2Nab25lTmFtZSA9ICJEZWZhdWx0UHVyZ2VhYmxlTWFsbG9jWm9uZSI7CisgICAgU3lz
dGVtTWFsbG9jU3RhdHMgbWFsbG9jU3RhdHM7CisgICAgdm1fYWRkcmVzc190KiB6b25lczsKKyAg
ICB1bnNpZ25lZCBjb3VudDsKKyAgICAKKyAgICAvLyBaZXJvIG91dCB0aGUgc3RydWN0dXJlcyBp
biBjYXNlIGEgem9uZSBpcyBtaXNzaW5nCisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBzdGF0czsK
KyAgICBzdGF0cy5ibG9ja3NfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5zaXplX2luX3VzZSA9IDA7
CisgICAgc3RhdHMubWF4X3NpemVfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5zaXplX2FsbG9jYXRl
ZCA9IDA7CisgICAgbWFsbG9jU3RhdHMuZGVmYXVsdE1hbGxvY1pvbmVTdGF0cyA9IHN0YXRzOwor
ICAgIG1hbGxvY1N0YXRzLmRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZVN0YXRzID0gc3Rh
dHM7CisgICAgbWFsbG9jU3RhdHMucHVyZ2VhYmxlTWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7Cisg
ICAgCisgICAgbWFsbG9jX2dldF9hbGxfem9uZXMobWFjaF90YXNrX3NlbGYoKSwgMCwgJnpvbmVz
LCAmY291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg
ICAgICAgIGlmIChjb25zdCBjaGFyKiBuYW1lID0gbWFsbG9jX2dldF96b25lX25hbWUocmVpbnRl
cnByZXRfY2FzdDxtYWxsb2Nfem9uZV90Kj4oem9uZXNbaV0pKSkgeworICAgICAgICAgICAgc3Rh
dHMuYmxvY2tzX2luX3VzZSA9IDA7CisgICAgICAgICAgICBzdGF0cy5zaXplX2luX3VzZSA9IDA7
CisgICAgICAgICAgICBzdGF0cy5tYXhfc2l6ZV9pbl91c2UgPSAwOworICAgICAgICAgICAgc3Rh
dHMuc2l6ZV9hbGxvY2F0ZWQgPSAwOwkKKyAgICAgICAgICAgIG1hbGxvY196b25lX3N0YXRpc3Rp
Y3MocmVpbnRlcnByZXRfY2FzdDxtYWxsb2Nfem9uZV90Kj4oem9uZXNbaV0pLCAmc3RhdHMpOwor
ICAgICAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgZGVmYXVsdE1hbGxvY1pvbmVOYW1lKSkKKyAg
ICAgICAgICAgICAgICBtYWxsb2NTdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7
CisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKG5hbWUsIGRpc3BhdGNoQ29udGludWF0aW9u
TWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLmRpc3BhdGNoQ29u
dGludWF0aW9uTWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7CisgICAgICAgICAgICBlbHNlIGlmICgh
c3RyY21wKG5hbWUsIHB1cmdlYWJsZU1hbGxvY1pvbmVOYW1lKSkKKyAgICAgICAgICAgICAgICBt
YWxsb2NTdGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gbWFsbG9jU3RhdHM7Cit9CisKK3NpemVfdCBXZWJNZW1vcnlTYW1w
bGVyOjpzYW1wbGVQcm9jZXNzQ29tbWl0dGVkQnl0ZXMoKSBjb25zdAoreworICAgIHRhc2tfYmFz
aWNfaW5mb182NCB0YXNrSW5mbzsKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IGNvdW50ID0g
VEFTS19CQVNJQ19JTkZPXzY0X0NPVU5UOworICAgIHRhc2tfaW5mbyhtYWNoX3Rhc2tfc2VsZigp
LCBUQVNLX0JBU0lDX0lORk9fNjQsIHJlaW50ZXJwcmV0X2Nhc3Q8dGFza19pbmZvX3Q+KCZ0YXNr
SW5mbyksICZjb3VudCk7CisgICAgcmV0dXJuIHRhc2tJbmZvLnJlc2lkZW50X3NpemU7Cit9CisK
K1N0cmluZyBXZWJNZW1vcnlTYW1wbGVyOjpwcm9jZXNzTmFtZSgpIGNvbnN0Cit7CisgICAgTlNT
dHJpbmcgKmFwcE5hbWUgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJd
OworICAgIGlmICghYXBwTmFtZSkKKyAgICAgICAgYXBwTmFtZSA9IFtbTlNQcm9jZXNzSW5mbyBw
cm9jZXNzSW5mb10gcHJvY2Vzc05hbWVdOworICAgIHJldHVybiBTdHJpbmcoYXBwTmFtZSk7Cit9
CisgIAorV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVXZWJLaXQo
KSBjb25zdAoreworICAgIHNpemVfdCB0b3RhbEJ5dGVzSW5Vc2UgPSAwLCB0b3RhbEJ5dGVzQ29t
bWl0dGVkID0gMDsgCisgICAgCisgICAgV2ViTWVtb3J5U3RhdGlzdGljcyB3ZWJLaXRNZW1vcnlT
dGF0czsKKyAgICAKKyAgICBGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGlj
cyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKKyAgICBzaXplX3QgZmFzdE1hbGxvY0J5
dGVzSW5Vc2UgPSBmYXN0TWFsbG9jU3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVzIC0gZmFzdE1h
bGxvY1N0YXRpc3RpY3MuZnJlZUxpc3RCeXRlczsKKyAgICBzaXplX3QgZmFzdE1hbGxvY0J5dGVz
Q29tbWl0dGVkID0gZmFzdE1hbGxvY1N0YXRpc3RpY3MuY29tbWl0dGVkVk1CeXRlczsKKyAgICB0
b3RhbEJ5dGVzSW5Vc2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CisgICAgdG90YWxCeXRlc0Nv
bW1pdHRlZCArPSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBIZWFwOjpTdGF0aXN0aWNzIGhlYXBNZW1v
cnlTdGF0cyA9IGhlYXBTdGF0aXN0aWNzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gaGVhcE1lbW9yeVN0YXRzLnNpemUg
LSBoZWFwTWVtb3J5U3RhdHMuZnJlZTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVk
ID0gaGVhcE1lbW9yeVN0YXRzLnNpemU7CisgICAgdG90YWxCeXRlc0luVXNlICs9IGpzY0hlYXBC
eXRlc0luVXNlOworICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0ganNjSGVhcEJ5dGVzQ29tbWl0
dGVkOworICAgIAorICAgIEdsb2JhbE1lbW9yeVN0YXRpc3RpY3MgZ2xvYmFsTWVtb3J5U3RhdHMg
PSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7CisgICAgdG90YWxCeXRlc0luVXNlICs9IGdsb2Jh
bE1lbW9yeVN0YXRzLnN0YWNrQnl0ZXMgKyBnbG9iYWxNZW1vcnlTdGF0cy5KSVRCeXRlczsKKyAg
ICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGdsb2JhbE1lbW9yeVN0YXRzLnN0YWNrQnl0ZXMgKyBn
bG9iYWxNZW1vcnlTdGF0cy5KSVRCeXRlczsKKyAgICAKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBz
eXN0ZW1TdGF0cyA9IHNhbXBsZVN5c3RlbU1hbGxvYygpOworICAgIAorICAgIHNpemVfdCBkZWZh
dWx0TWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0
YXRzLnNpemVfaW5fdXNlOworICAgIHNpemVfdCBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pv
bmVCeXRlc0luVXNlID0gc3lzdGVtU3RhdHMuZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25l
U3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0lu
VXNlID0gc3lzdGVtU3RhdHMucHVyZ2VhYmxlTWFsbG9jWm9uZVN0YXRzLnNpemVfaW5fdXNlOwor
ICAgIHNpemVfdCBkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkID0gc3lzdGVtU3RhdHMu
ZGVmYXVsdE1hbGxvY1pvbmVTdGF0cy5zaXplX2FsbG9jYXRlZDsKKyAgICBzaXplX3QgZGlzcGF0
Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5kaXNw
YXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVTdGF0cy5zaXplX2FsbG9jYXRlZDsKKyAgICBzaXpl
X3QgcHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkID0gc3lzdGVtU3RhdHMucHVyZ2Vh
YmxlTWFsbG9jWm9uZVN0YXRzLnNpemVfYWxsb2NhdGVkOworICAgIHRvdGFsQnl0ZXNJblVzZSAr
PSBkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzSW5Vc2UgKyBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxv
Y1pvbmVCeXRlc0luVXNlICsgcHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzSW5Vc2U7CisgICAgdG90
YWxCeXRlc0NvbW1pdHRlZCArPSBkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVkICsgZGlz
cGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgKyBwdXJnZWFibGVNYWxs
b2Nab25lQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgc2l6ZV90IHJlc2lkZW50U2l6ZSA9IHNh
bXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcygpOworCisgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRU
aW1lKCk7CisgICAgICAgIAorICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmlu
ZygiVGltZXN0YW1wIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQobm93
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlRvdGFsIEJ5dGVz
IG9mIE1lbW9yeSBJbiBVc2UiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVu
ZCh0b3RhbEJ5dGVzSW5Vc2UpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0
cmluZygiRmFzdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52
YWx1ZXMuYXBwZW5kKGZhc3RNYWxsb2NCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy5rZXlzLmFwcGVuZChTdHJpbmcoIkRlZmF1bHQgTWFsbG9jIFpvbmUgQnl0ZXMiKSk7CisgICAg
d2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzSW5V
c2UpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGlzcGF0Y2gg
Q29udGludWF0aW9uIE1hbGxvYyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRz
LnZhbHVlcy5hcHBlbmQoZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNJblVzZSk7
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJQdXJnZWFibGUgTWFs
bG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChw
dXJnZWFibGVNYWxsb2Nab25lQnl0ZXNJblVzZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5
cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0IEhlYXAgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVt
b3J5U3RhdHMudmFsdWVzLmFwcGVuZChqc2NIZWFwQnl0ZXNJblVzZSk7CisgICAgd2ViS2l0TWVt
b3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJUb3RhbCBCeXRlcyBvZiBDb21taXR0ZWQgTWVt
b3J5IikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQodG90YWxCeXRlc0Nv
bW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJGYXN0
IE1hbGxvYyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBl
bmQoZmFzdE1hbGxvY0J5dGVzQ29tbWl0dGVkKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlz
LmFwcGVuZChTdHJpbmcoIkRlZmF1bHQgTWFsbG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0
TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChkZWZhdWx0TWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVk
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkRpc3BhdGNoIENv
bnRpbnVhdGlvbiBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52
YWx1ZXMuYXBwZW5kKGRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzQ29tbWl0dGVk
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlB1cmdlYWJsZSBN
YWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5k
KHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0NvbW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3Rh
dHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0IEhlYXAgQnl0ZXMiKSk7CisgICAgd2Vi
S2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChqc2NIZWFwQnl0ZXNDb21taXR0ZWQpOworICAg
IHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiSmF2YVNjcmlwdCBTdGFjayBC
eXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGdsb2JhbE1lbW9y
eVN0YXRzLnN0YWNrQnl0ZXMpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0
cmluZygiSmF2YVNjcmlwdCBKSVQgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFs
dWVzLmFwcGVuZChnbG9iYWxNZW1vcnlTdGF0cy5KSVRCeXRlcyk7CisgICAgd2ViS2l0TWVtb3J5
U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJSZXNpZGVudCBTaXplIikpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQocmVzaWRlbnRTaXplKTsKKyAgICAKKyAgICByZXR1cm4g
d2ViS2l0TWVtb3J5U3RhdHM7Cit9CisgICAgCit9CisKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L1dlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRl
eHQuY3BwCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW1tdXRhYmxl
QXJyYXkuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1
ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAi
VGV4dENoZWNrZXIuaCIKICNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5oIgpAQCAtMzYsMTIgKzM3LDE0IEBACiAjaW5jbHVkZSAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1w
bGVyLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9MYW5ndWFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KIAogI2lmbmRlZiBOREVCVUcKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtD
b3VudGVyLmg+CkBAIC04Niw2ICs4OSw4IEBAIFdlYkNvbnRleHQ6OldlYkNvbnRleHQoUHJvY2Vz
c01vZGVsIHByb2MKICAgICAsIG1fY2FjaGVNb2RlbChDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIp
CiAgICAgLCBtX2NsZWFyUmVzb3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzKGZhbHNlKQogICAg
ICwgbV9jbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JOZXdXZWJQcm9jZXNzKGZhbHNlKQorICAgICwg
bV9tZW1vcnlTYW1wbGVyRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fbWVtb3J5U2FtcGxlckludGVy
dmFsKDE0MDAuMCkKICAgICAsIG1fZGF0YWJhc2VNYW5hZ2VyUHJveHkoV2ViRGF0YWJhc2VNYW5h
Z2VyUHJveHk6OmNyZWF0ZSh0aGlzKSkKICNpZiBQTEFURk9STShXSU4pCiAgICAgLCBtX3Nob3Vs
ZFBhaW50TmF0aXZlQ29udHJvbHModHJ1ZSkKQEAgLTE5NSw2ICsyMDAsMTkgQEAgdm9pZCBXZWJD
b250ZXh0Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaQogICAgIEFTU0VSVF9VTlVTRUQocHJvY2Vz
cywgcHJvY2VzcyA9PSBtX3Byb2Nlc3MpOwogCiAgICAgbV92aXNpdGVkTGlua1Byb3ZpZGVyLnBy
b2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoKTsKKyAgICAKKyAgICAvLyBTb21ldGltZXMgdGhlIG1l
bW9yeVNhbXBsZXIgZ2V0cyBpbml0aWFsaXplZCBhZnRlciBwcm9jZXNzIGluaXRpYWxpemF0aW9u
IGhhcyBoYXBwZW5lZCBidXQgYmVmb3JlIHRoZSBwcm9jZXNzIGhhcyBmaW5pc2hlZCBsYXVuY2hp
bmcKKyAgICAvLyBzbyBjaGVjayBpZiBpdCBuZWVkcyB0byBiZSBzdGFydGVkIGhlcmUKKyAgICBp
ZihtX21lbW9yeVNhbXBsZXJFbmFibGVkKSB7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW1wbGVMb2dTYW5kYm94SGFuZGxlOworICAgICAgICAvLyB3YXkgdG8gZ2V0IG5hbWUg
b2YgcHJvY2VzcyBmcm9tIFVJIHNpZGU/CisgICAgICAgIAorICAgICAgICBkb3VibGUgbm93ID0g
V1RGOjpjdXJyZW50VGltZSgpOworICAgICAgICBTdHJpbmcgc2FtcGxlTG9nRmlsZVBhdGggPSBT
dHJpbmc6OmZvcm1hdCgiV2ViUHJvY2VzcyVsbHUiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obm93
KSk7CisgICAgICAgIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShzYW1wbGVMb2dGaWxlUGF0aCwgU2FuZGJveEV4dGVuc2lv
bjo6V3JpdGVPbmx5LCBzYW1wbGVMb2dTYW5kYm94SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RhcnRNZW1vcnlTYW1wbGVy
KHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBtX21lbW9yeVNhbXBs
ZXJJbnRlcnZhbCksIDApOworICAgIH0KIH0KIAogdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlk
Q2xvc2UoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAtNTIxLDUgKzUzOSw0MiBAQCB2b2lk
IFdlYkNvbnRleHQ6OmNsZWFyQXBwbGljYXRpb25DYWNoZSgpCiAKICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNsZWFyQXBwbGljYXRpb25DYWNoZSgpLCAwKTsKIH0K
KyAgICAKK3ZvaWQgV2ViQ29udGV4dDo6c3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IGRvdWJsZSBp
bnRlcnZhbCkKK3sgICAgCisgICAgLy8gRm9yIG5ldyBXZWJQcm9jZXNzZXMgd2Ugd2lsbCBhbHNv
IHdhbnQgdG8gc3RhcnQgdGhlIE1lbW9yeSBTYW1wbGVyCisgICAgbV9tZW1vcnlTYW1wbGVyRW5h
YmxlZCA9IHRydWU7CisgICAgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAg
ICAKKyAgICAvLyBGb3IgVUlQcm9jZXNzCisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCkt
PnN0YXJ0KGludGVydmFsKTsKKyAgICAKKyAgICBpZiAoIWhhc1ZhbGlkUHJvY2VzcygpKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gRm9yIFdlYlByb2Nlc3MKKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9nU2FuZGJveEhhbmRsZTsgICAgCisgICAg
ZG91YmxlIG5vdyA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICBTdHJpbmcgc2FtcGxlTG9nRmls
ZVBhdGggPSBTdHJpbmc6OmZvcm1hdCgiV2ViUHJvY2VzcyVsbHUiLCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obm93KSk7CisgICAgc2FtcGxlTG9nRmlsZVBhdGggPSBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKHNhbXBsZUxvZ0ZpbGVQYXRoLCBTYW5kYm94RXh0
ZW5zaW9uOjpXcml0ZU9ubHksIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUpOworICAgIAorICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RhcnRNZW1vcnlTYW1wbGVyKHNh
bXBsZUxvZ1NhbmRib3hIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBpbnRlcnZhbCksIDApOwor
fQorCit2b2lkIFdlYkNvbnRleHQ6OnN0b3BNZW1vcnlTYW1wbGVyKCkKK3sgICAgCisgICAgLy8g
Rm9yIFdlYlByb2Nlc3MKKyAgICBtX21lbW9yeVNhbXBsZXJFbmFibGVkID0gZmFsc2U7CisgICAg
CisgICAgLy8gRm9yIFVJUHJvY2VzcworICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5z
dG9wKCk7CisgICAgCisgICAgaWYgKCFoYXNWYWxpZFByb2Nlc3MoKSkgeworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U3RvcE1lbW9yeVNhbXBsZXIoKSwgMCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOSBAQCBw
dWJsaWM6CiAgICAgQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9jYWNo
ZU1vZGVsOyB9CiAgICAgdm9pZCBjbGVhclJlc291cmNlQ2FjaGVzKCk7CiAgICAgdm9pZCBjbGVh
ckFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0TWVtb3J5U2FtcGxlcihj
b25zdCBkb3VibGUgaW50ZXJ2YWwpOworICAgIHZvaWQgc3RvcE1lbW9yeVNhbXBsZXIoKTsKIAog
I2lmIFBMQVRGT1JNKFdJTikKICAgICB2b2lkIHNldFNob3VsZFBhaW50TmF0aXZlQ29udHJvbHMo
Ym9vbCk7CkBAIC0xODYsNiArMTg5LDkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9jbGVhclJl
c291cmNlQ2FjaGVzRm9yTmV3V2ViUHJvY2VzczsKICAgICBib29sIG1fY2xlYXJBcHBsaWNhdGlv
bkNhY2hlRm9yTmV3V2ViUHJvY2VzczsKKyAgICAKKyAgICBib29sIG1fbWVtb3J5U2FtcGxlckVu
YWJsZWQ7CisgICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsOwogCiAgICAgUmVmUHRy
PFdlYkRhdGFiYXNlTWFuYWdlclByb3h5PiBtX2RhdGFiYXNlTWFuYWdlclByb3h5OwogCkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDc1MDIyKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU1LDMgKzE1NSwxMyBAQCBXS0RhdGFiYXNlTWFuYWdlclJlZiBXS0NvbnRleHRHZXREYXRhYmFz
CiB7CiAgICAgcmV0dXJuIHRvQVBJKHRvSW1wbChjb250ZXh0UmVmKS0+ZGF0YWJhc2VNYW5hZ2Vy
UHJveHkoKSk7CiB9CisKK3ZvaWQgV0tDb250ZXh0U3RhcnRNZW1vcnlTYW1wbGVyKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS0RvdWJsZVJlZiBpbnRlcnZhbCkKK3sKKyAgICB0b0ltcGwoY29u
dGV4dFJlZiktPnN0YXJ0TWVtb3J5U2FtcGxlcih0b0ltcGwoaW50ZXJ2YWwpLT52YWx1ZSgpKTsK
K30KKwordm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRleHRSZWYgY29udGV4
dFJlZikKK3sKKyAgICB0b0ltcGwoY29udGV4dFJlZiktPnN0b3BNZW1vcnlTYW1wbGVyKCk7Cit9
CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAkocmV2aXNpb24gNzUwMjIpCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE3LDYgKzExNyw5IEBAIFdLX0VYUE9SVCBXS0NhY2hlTW9kZWwgV0tDb250ZXh0R2V0Q2FjaGUK
IAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJSZXNvdXJjZUNhY2hlcyhXS0NvbnRleHRS
ZWYgY29udGV4dCk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckFwcGxpY2F0aW9uQ2Fj
aGUoV0tDb250ZXh0UmVmIGNvbnRleHQpOworICAgIAorV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0
U3RhcnRNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0RvdWJsZVJlZiBpbnRl
cnZhbCk7CitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdG9wTWVtb3J5U2FtcGxlcihXS0NvbnRl
eHRSZWYgY29udGV4dCk7CiAKIFdLX0VYUE9SVCBXS0RhdGFiYXNlTWFuYWdlclJlZiBXS0NvbnRl
eHRHZXREYXRhYmFzZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCkluZGV4OiBXZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzUwMjIpCisr
KyBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjYyLDYgKzI2Miw5IEBACiAJCTc2MkI3NDhEMTIwQkM3NUMwMDgxOTMzOSAvKiBXS1By
ZWZlcmVuY2VzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOERD
MkVGNTMwNDg2QTY5NDAwOThCMjE2IC8qIEluZm9QbGlzdC5zdHJpbmdzIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODlDMTY2NkZFODQxMTU4QzAyQUFD
MDcgLyogSW5mb1BsaXN0LnN0cmluZ3MgKi87IH07CiAJCThEQzJFRjU3MDQ4NkE2OTQwMDk4QjIx
NiAvKiBDb2NvYS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxMDU4QzdCMUZFQTU1ODVFMTFDQTJDQkIgLyogQ29jb2EuZnJhbWV3b3Jr
ICovOyB9OworCQk5MDk4NTRFQzEyQkM0RTE3MDAwQUQwODAgLyogV2ViTWVtb3J5U2FtcGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDU2MjBF
ODEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5jcHAgKi87IH07CisJCTkwOTg1
NEVEMTJCQzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYg
LyogV2ViTWVtb3J5U2FtcGxlci5oICovOyB9OworCQk5MDk4NTRFRTEyQkM0RTE4MDAwQUQwODAg
LyogV2ViTWVtb3J5U2FtcGxlci5tYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MDU2MjBFNTEyQkMyNDc2MDAwNzk5QjYgLyogV2ViTWVtb3J5U2Ft
cGxlci5tYWMubW0gKi87IH07CiAJCTkzNUVFQjlCMTI3NzYxN0MwMDMzMjJCOCAvKiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzNUVFQjk4MTI3NzYxNkQwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdEl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk5MzVFRUI5RTEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1
RUVCOTUxMjc3NjE2RDAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCAqLzsg
fTsKIAkJOTM1RUVCOUYxMjc3NjFBQzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVFRUI5
NjEyNzc2MTZEMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTQzLDYgKzk0Niw5IEBA
CiAJCTc2MkI3NDg0MTIwQkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REMyRUY1QTA0ODZBNjk0MDA5OEIyMTYgLyog
SW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gSW5mby5wbGlzdDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERDMkVGNUIwNDg2QTY5NDAwOThCMjE2IC8q
IFdlYktpdDIuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
V2ViS2l0Mi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJ
CTkwNTYyMEU1MTJCQzI0NzYwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYk1lbW9yeVNhbXBsZXIubWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MDU2MjBFODEyQkMyNDhCMDAwNzk5
QjYgLyogV2ViTWVtb3J5U2FtcGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJNZW1vcnlTYW1wbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTA1NjIwRTkxMkJDMjQ4QjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTWVtb3J5U2FtcGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzVFRUI4RjEyNzc2MTVEMDAzMzIyQjggLyogSW5qZWN0ZWRC
dW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzVFRUI5MDEyNzc2MTVEMDAzMzIyQjggLyogSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0
ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTM1RUVCOTExMjc3NjE1RDAwMzMyMkI4IC8qIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1
bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY2Myw2ICsxNjY5LDggQEAKIAkJCQlCQ0NGNkFCQTEyQzkxRUY5MDA4RjlDMzUgLyogV2Vi
SW1hZ2UuY3BwICovLAogCQkJCUJDQ0Y2QUJCMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5o
ICovLAogCQkJCUMwMzM3REQyMTI3QTJBMEUwMDhGRjRGNCAvKiBXZWJLZXlib2FyZEV2ZW50LmNw
cCAqLywKKwkJCQk5MDU2MjBFODEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5j
cHAgKi8sCisJCQkJOTA1NjIwRTkxMkJDMjQ4QjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIu
aCAqLywKIAkJCQlDMDMzN0RBRjEyN0EyOEQwMDA4RkY0RjQgLyogV2ViTW91c2VFdmVudC5jcHAg
Ki8sCiAJCQkJQkNGNjlGOTgxMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRpb25EYXRhU3Rv
cmUuaCAqLywKIAkJCQlCQzMzREQ2NzEyMzg0NjQ2MDAzNjBGM0YgLyogV2ViTnVtYmVyLmggKi8s
CkBAIC0yMTU0LDYgKzIxNjIsNyBAQAogCQkJCUJDRTIzMjYyMTIyQzZDRjMwMEQ1QzM1QSAvKiBX
ZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gKi8sCiAJCQkJQkMxMTFCNUIxMTJGNjI5ODAwMzM3
QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5oICovLAogCQkJCUJDMTExQjVDMTEyRjYyOTgwMDMzN0JB
QiAvKiBXZWJFdmVudEZhY3RvcnkubW0gKi8sCisJCQkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2
IC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tICovLAogCQkJCUJDRTIzMUMwMTIyQzQ2NkUwMEQ1
QzM1QSAvKiBXZWJVUkxSZXF1ZXN0TWFjLm1tICovLAogCQkJCUJDOTBBMUQ1MTIyREQ2NkEwMEND
OEM1MCAvKiBXZWJVUkxSZXNwb25zZU1hYy5tbSAqLywKIAkJCQkxQUFCNEFBOTEyOTZGMTU0MDAy
Mzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbk1hYy5tbSAqLywKQEAgLTI4MjksNiArMjgzOCw3IEBA
CiAJCQkJMUE0QTlGMzMxMkI4NDRFMjAwOEZFOTg0IC8qIFBsdWdpblF1aXJrcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4NThBMjAxMkMwMzU3QjAwRURFQjJFIC8qIFdlYlJlc291cmNlTG9hZENs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBNDE3Q0IxMkMwMENDQTAwMkJFNjdCIC8qIFRl
eHRDaGVja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MDk4NTRFRDEyQkM0RTE4MDAwQUQwODAg
LyogV2ViTWVtb3J5U2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBNDFBQjUxMkMwMkVD
NDAwMkJFNjdCIC8qIFNlbGVjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGNjcy
RDEyQzdFREY3MDA4RjlDMzUgLyogT3JpZ2luQW5kRGF0YWJhc2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0NGNkFCRDEyQzkxRUY5MDA4RjlDMzUgLyogV2ViSW1hZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtMzI2Myw2ICszMjczLDggQEAKIAkJCQkxQTRBOUM5QTEyQjgyMUNEMDA4RkU5ODQgLyog
TmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzg1OEEyMTEy
QzAzNTdCMDBFREVCMkUgLyogV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBQTQxN0VGMTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTkwOTg1NEVDMTJCQzRFMTcwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1w
bGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkwOTg1NEVFMTJCQzRFMTgwMDBBRDA4MCAvKiBX
ZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Y2NzMzMTJDN0Yx
NUMwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNDRjZBQkMxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQ0Y2QUMyMTJDOTFGMzQwMDhGOUMzNSAvKiBXS0ltYWdlLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gNzUwMjIpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEw
ICszMSwxMiBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oIgogI2luY2x1ZGUgIlJ1bkxv
b3AuaCIKKyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4
dE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViRGF0YWJhc2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRl
ICJXZWJNZW1vcnlTYW1wbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaCIKQEAgLTYxMSw2ICs2MTMsMTYgQEAgdm9pZCBXZWJQcm9jZXNzOjpjYW5jZWxEb3dubG9h
ZCh1aW50NjRfdAogICAgIERvd25sb2FkTWFuYWdlcjo6c2hhcmVkKCkuY2FuY2VsRG93bmxvYWQo
ZG93bmxvYWRJRCk7CiB9CiAKK3ZvaWQgV2ViUHJvY2Vzczo6c3RhcnRNZW1vcnlTYW1wbGVyKGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FtcGxlTG9nRmlsZUhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBzYW1wbGVMb2dGaWxlUGF0aCwgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwp
Cit7CisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0YXJ0KHNhbXBsZUxvZ0ZpbGVI
YW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBpbnRlcnZhbCk7Cit9CisgICAgCit2b2lkIFdlYlBy
b2Nlc3M6OnN0b3BNZW1vcnlTYW1wbGVyKCkKK3sKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFy
ZWQoKS0+c3RvcCgpOworfQorCiB2b2lkIFdlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUo
Y29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSkKIHsKICAgICBtX3RleHRD
aGVja2VyU3RhdGUgPSB0ZXh0Q2hlY2tlclN0YXRlOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDYWNoZU1vZGVsLmgi
CiAjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNp
bmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAj
aW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGUu
aCIKQEAgLTEzMyw2ICsxMzQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1DbGVhclJl
c291cmNlQ2FjaGVzKCk7CiAgICAgdm9pZCBjbGVhckFwcGxpY2F0aW9uQ2FjaGUoKTsKIAorICAg
IHZvaWQgc3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IGRvdWJsZSk7CisgICAgdm9pZCBzdG9wTWVtb3J5U2FtcGxl
cigpOworCiAgICAgdm9pZCBjYW5jZWxEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElEKTsKIAog
ICAgIHZvaWQgc2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJik7Cklu
ZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24g
NzUwMjIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOSBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzIHsKIAog
ICAgIENsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICBDbGVhckFwcGxpY2F0aW9uQ2FjaGUoKTsK
KyAgICAKKyAgICB2b2lkIFN0YXJ0TWVtb3J5U2FtcGxlcihXZWJLaXQ6OlNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBzYW1wbGVMb2dGaWxlSGFuZGxlLCBXVEY6OlN0cmluZyBzYW1wbGVMb2dGaWxl
UGF0aCwgZG91YmxlIGludGVydmFsKTsKKyAgICB2b2lkIFN0b3BNZW1vcnlTYW1wbGVyKCk7CiAK
ICAgICAjIERvd25sb2Fkcy4gVGhpcyBzaG91bGQgcmVhbGx5IGJlIGluIGEgRG93bmxvYWQubWVz
c2FnZXMuaW4sIGJ1dCBpdCBzZWVtZWQgdW5uZWNlc3NhcnkgdG8gY3JlYXRlIGEgbmV3IGZpbGUg
anVzdCBmb3IKICAgICAjIGEgc2luZ2xlIG1lc3NhZ2UuCg==
</data>
<flag name="review"
          id="69210"
          type_id="1"
          status="-"
          setter="slewis"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77971</attachid>
            <date>2011-01-04 23:08:06 -0800</date>
            <delta_ts>2011-01-04 23:48:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>webkit2MemorySampler.txt</filename>
            <type>text/plain</type>
            <size>42152</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS84NjQ5NjE3PiBNaWdyYXRlIG1lbW9yeSB0cmFja2luZyBmcm9tIFNh
ZmFyaSB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwNzk5IEFkZCBNZW1vcnkgU2FtcGxlciB0byBXZWJLaXQKKyAgICAgICAgCisgICAg
ICAgIEFkZCBhIHNhbXBsZXIgZm9yIHByaW50aW5nIG9mZiBwcm9jZXNzIG1lbW9yeSBzdGF0aXN0
aWNzLgorICAgICAgICBFeHBvcnQgZmlsZSBtb2RlLgorCisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisKIDIwMTEtMDEtMDQgIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzUwMjIp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC03NjksNiArNzY5
LDcgQEAgX19aTjdXZWJDb3JlOEZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlOEdyYWRpZW50MTJh
ZGRDb2xvclN0b3BFZlJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18x
MEZsb2F0UG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAorX19a
TjdXZWJDb3JlOG9wZW5GaWxlRVJLTjNXVEY2U3RyaW5nRU5TXzEyRmlsZU9wZW5Nb2RlRQogX19a
TjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5n
czE1c2V0V2ViR0xFbmFibGVkRWIKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5p
ZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2NDk2MTc+IE1pZ3JhdGUgbWVt
b3J5IHRyYWNraW5nIGZyb20gU2FmYXJpIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3OTkgQWRkIE1lbW9yeSBTYW1wbGVyIHRvIFdl
YktpdAorICAgICAgICAKKyAgICAgICAgQWRkIGEgc2FtcGxlciBmb3IgcHJpbnRpbmcgb2ZmIHBy
b2Nlc3MgbWVtb3J5IHN0YXRpc3RpY3MuCisgICAgICAgIFRoaXMgdG9vbCBjYW4gdHJhY2s6Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgV2ViQ29yZQorICAgICAgICAgICAgICAg
ICAgIC0gRmFzdE1hbGxvYyBhbGxvY2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBv
ciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAg
ICAgICAgICAtIEdhcmJhZ2UgY29sbGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1
c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAgICAgICAgIC0gU3RhY2sgYnl0ZXMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdHRlZCBvbmx5ISkKKyAgICAgICAgICAgICAg
ICAgICAtIEpJVCBDb2RlIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0
ZWQgb25seSEpCisgICAgICAgICAgICAgICAgTWFsbG9jIHpvbmVzCisgICAgICAgICAgICAgICAg
ICAgLSBJbiB1c2UgYnl0ZXMgZm9yIHRoZSBmb2xsb3dpbmcgem9uZXM6CisgICAgICAgICAgICAg
ICAgICAgICAgICogRGVmYXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNl
IG9yIGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgKiBEaXNwQ29uIHpvbmUgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAg
ICAgICAgICAgICAqIFB1cmdhYmxlIHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVz
ZSBvciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgVGFzayBJbmZvCisgICAgICAgICAgICAg
ICAgICAgLSBSZXNpZGVudCBzaXplIG1lbW9yeSAoUlNJWkUpCisgICAgICAgIAorICAgICAgICAg
ICAgICAgIERhdGEgY29sbGVjdGVkIGlzIGR1bXBlZCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAg
ICAgICAKKyAgICAgICAgQ3JlYXRlIGEgc2FuZGJveCBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4KKyAg
ICAgICAgKiBTaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25NYWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUpOgorICAgICAgICAKKyAg
ICAgICAgTWVtb3J5IFNhbXBsZXIgZmlsZXMKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1dl
Yk1lbW9yeVNhbXBsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2Ft
cGxlcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6V2ViTWVt
b3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0YXJ0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0b3ApOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZW1vcnlTYW1wbGVyOjppc1J1bm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1v
cnlTYW1wbGVyOjppbml0aWFsaXplVGVtcExvZ0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjppbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYk1lbW9yeVNhbXBsZXI6OndyaXRlSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnNhbXBsZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjpzdG9wVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9y
eVNhbXBsZXI6OmFwcGVuZEN1cnJlbnRNZW1vcnlVc2FnZVRvRmlsZSk6CisgICAgICAgICogU2hh
cmVkL1dlYk1lbW9yeVNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVN5c3RlbU1hbGxvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnByb2Nlc3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5
U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgCisgICAgICAgIEFQSSB0byBzdGFydCBh
bmQgc3RvcCBVSVByb2Nlc3MgYW5kIFdlYlByb2Nlc3Mgc2FtcGxpbmcuCisgICAgICAgIAorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0
U3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVy
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgIAorICAg
ICAgICBTZW5kIG1lc3NhZ2VzIHRvIFdlYlByb2Nlc3MgdG8gc3RhcnQgYW5kIHN0b3AgbWVtb3J5
IHNhbXBsaW5nLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6c3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJD
b250ZXh0Lmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnN0YXJ0TWVtb3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnN0b3BNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTEt
MDEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgJKHJldmlzaW9uIDc1MDIyKQorKysgV2Vi
S2l0Mi9XZWJLaXQyUHJlZml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBAIHN0
YXRpYyBjb25zdCB0eXBlJiBuYW1lKCkgXAogCiAjZGVmaW5lIEVOQUJMRV9QTFVHSU5fUFJPQ0VT
UyAxCiAKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIEVOQUJMRV9NRU1PUllfU0FNUExFUiAx
CisjZW5kaWYKKwogI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogCiAjaWZk
ZWYgX19PQkpDX18KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDc1
MDIyKQorKysgV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRC
T1gpCiB0eXBlZGVmIHN0cnVjdCBfX1dLU2FuZGJveEV4dGVuc2lvbiogV0tTYW5kYm94RXh0ZW5z
aW9uUmVmOwpAQCAtNjksNiArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTYW5kYm94RXh0ZW5zaW9uPiBjcmVhdGUoY29uc3QgSGFuZGxlJik7CiAgICAgc3RhdGljIHZv
aWQgY3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgVHlwZSB0eXBlLCBIYW5kbGUmKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3Ry
aW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJik7CiAgICAgflNhbmRib3hFeHRlbnNpb24o
KTsKIAogICAgIGJvb2wgaW52YWxpZGF0ZSgpOwpAQCAtODksNiArOTEsNyBAQCBpbmxpbmUgdm9p
ZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU6OmVuCiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBIYW5kbGUmKSB7
IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGUoY29uc3QgSGFuZGxlJikgeyByZXR1cm4gMDsgfQogaW5saW5l
IHZvaWQgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
VHlwZSB0eXBlLCBIYW5kbGUmKSB7IH0KK2lubGluZSBTdHJpbmcgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgVHlwZSB0
eXBlLCBIYW5kbGUmKSB7cmV0dXJuIFN0cmluZygpO30KIGlubGluZSBTYW5kYm94RXh0ZW5zaW9u
Ojp+U2FuZGJveEV4dGVuc2lvbigpIHsgfQogaW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6
aW52YWxpZGF0ZSgpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNp
b246OmNvbnN1bWUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJN
ZW1vcnlTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlT
YW1wbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBs
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5oIgorCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBXZWJNZW1vcnlTYW1wbGVyICpzaGFyZWRNZW1v
cnlTYW1wbGVyID0gMDsKKworV2ViTWVtb3J5U2FtcGxlciogV2ViTWVtb3J5U2FtcGxlcjo6c2hh
cmVkKCkKK3sKKyAgICBpZiAoIXNoYXJlZE1lbW9yeVNhbXBsZXIpCisgICAgICAgIHNoYXJlZE1l
bW9yeVNhbXBsZXIgPSBuZXcgV2ViTWVtb3J5U2FtcGxlcigpOworICAgIHJldHVybiBzaGFyZWRN
ZW1vcnlTYW1wbGVyOworfQorCitXZWJNZW1vcnlTYW1wbGVyOjpXZWJNZW1vcnlTYW1wbGVyKCkg
CisgICAgOiBtX3NhbXBsZVRpbWVyKHRoaXMsICZXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVUaW1l
ckZpcmVkKQorICAgICwgbV9zdG9wVGltZXIodGhpcywgJldlYk1lbW9yeVNhbXBsZXI6OnN0b3BU
aW1lckZpcmVkKQorICAgICwgbV9pc1J1bm5pbmcoZmFsc2UpCisgICAgLCBtX3J1bm5pbmdUaW1l
KDApCit7Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6c3RhcnQoY29uc3QgZG91YmxlIGlu
dGVydmFsKSAKK3sKKyAgICBpZiAobV9pc1J1bm5pbmcpIAorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaW5pdGlhbGl6ZVRlbXBMb2dGaWxlKCk7CisgICAgaW5pdGlhbGl6ZVRpbWVycyhpbnRl
cnZhbCk7Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6c3RhcnQoY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWxlSGFuZGxlLCBjb25zdCBTdHJpbmcmIHNhbXBs
ZUxvZ0ZpbGVQYXRoLCBjb25zdCBkb3VibGUgaW50ZXJ2YWwpIAoreworICAgIGlmIChtX2lzUnVu
bmluZykgCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgb24gYSBzeXN0
ZW0gd2l0aG91dCBTYW5kYm94RXh0ZW5zaW9uIHRoZSBoYW5kbGUgYW5kIGZpbGVuYW1lIHdpbGwg
YmUgZW1wdHkKKyAgICBpZiAoc2FtcGxlTG9nRmlsZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAg
IHN0YXJ0KGludGVydmFsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAg
aW5pdGlhbGl6ZVNhbmRib3hlZExvZ0ZpbGUoc2FtcGxlTG9nRmlsZUhhbmRsZSwgc2FtcGxlTG9n
RmlsZVBhdGgpOworICAgIGluaXRpYWxpemVUaW1lcnMoaW50ZXJ2YWwpOworICAgCit9CisKK3Zv
aWQgV2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyhkb3VibGUgaW50ZXJ2YWwpCit7
CisgICAgbV9zYW1wbGVUaW1lci5zdGFydFJlcGVhdGluZygxKTsKKyAgICBwcmludGYoIlN0YXJ0
ZWQgbWVtb3J5IHNhbXBsZXIgZm9yIHByb2Nlc3MgJXMiLCBwcm9jZXNzTmFtZSgpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGlmIChpbnRlcnZhbCA+IDApIHsKKyAgICAgICAgbV9zdG9wVGltZXIuc3Rh
cnRPbmVTaG90KGludGVydmFsKTsKKyAgICAgICAgcHJpbnRmKCIgZm9yIGEgaW50ZXJ2YWwgb2Yg
JWcgc2Vjb25kcyIsIGludGVydmFsKTsKKyAgICB9CisgICAgcHJpbnRmKCI7IFNhbXBsZXIgbG9n
IGZpbGUgc3RvcmVkIGF0OiAlc1xuIiwgbV9zYW1wbGVMb2dGaWxlUGF0aC51dGY4KCkuZGF0YSgp
KTsKKyAgICBtX3J1bm5pbmdUaW1lID0gaW50ZXJ2YWw7CisgICAgbV9pc1J1bm5pbmcgPSB0cnVl
OworfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OnN0b3AoKSAKK3sKKyAgICBpZiAoIW1faXNS
dW5uaW5nKSAKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2FtcGxlVGltZXIuc3RvcCgpOworICAg
IG1fc2FtcGxlTG9nRmlsZSA9IDA7CisgICAgcHJpbnRmKCJTdG9wcGVkIG1lbW9yeSBzYW1wbGVy
IGZvciBwcm9jZXNzICVzXG4iLCBwcm9jZXNzTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIC8v
IEZsdXNoIHN0ZG91dCBidWZmZXIgc28gcHl0aG9uIHNjcmlwdCBjYW4gYmUgZ3VhcmFudGVlZCB0
byByZWFkIHVwIHRvIHRoaXMgcG9pbnQuCisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgbV9pc1J1
bm5pbmcgPSBmYWxzZTsKKyAgICAKKyAgICBpZihtX3N0b3BUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3N0b3BUaW1lci5zdG9wKCk7CisgICAgCisgICAgaWYgKG1fc2FtcGxlTG9nU2FuZGJv
eEV4dGVuc2lvbikgeworICAgICAgICBtX3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNpb24tPmludmFs
aWRhdGUoKTsKKyAgICAgICAgbV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uID0gMDsKKyAgICB9
ICAgIAorfQorCitib29sIFdlYk1lbW9yeVNhbXBsZXI6OmlzUnVubmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faXNSdW5uaW5nOworfQorICAgIAordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpp
bml0aWFsaXplVGVtcExvZ0ZpbGUoKQoreworICAgIG1fc2FtcGxlTG9nRmlsZVBhdGggPSBTdHJp
bmcoKG9wZW5UZW1wb3JhcnlGaWxlKHByb2Nlc3NOYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zYW1w
bGVMb2dGaWxlKSkuZGF0YSgpKTsKKyAgICB3cml0ZUhlYWRlcnMoKTsKK30KKwordm9pZCBXZWJN
ZW1vcnlTYW1wbGVyOjppbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZShjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUsIGNvbnN0IFN0cmluZyYgc2Ft
cGxlTG9nRmlsZVBhdGgpCit7CisgICAgbV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUpOworICAgIGlmICht
X3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNpb24pCisgICAgICAgIG1fc2FtcGxlTG9nU2FuZGJveEV4
dGVuc2lvbi0+Y29uc3VtZSgpOworICAgIG1fc2FtcGxlTG9nRmlsZVBhdGggPSBzYW1wbGVMb2dG
aWxlUGF0aDsKKyAgICBtX3NhbXBsZUxvZ0ZpbGUgPSBvcGVuRmlsZShtX3NhbXBsZUxvZ0ZpbGVQ
YXRoLCBPcGVuRm9yV3JpdGUpOworICAgIHdyaXRlSGVhZGVycygpOworfQorCit2b2lkIFdlYk1l
bW9yeVNhbXBsZXI6OndyaXRlSGVhZGVycygpCit7CisgICAgU3RyaW5nIHByb2Nlc3NEZXRhaWxz
ID0gU3RyaW5nKCJQcm9jZXNzOiAiKTsKKyAgICBwcm9jZXNzRGV0YWlscy5hcHBlbmQocHJvY2Vz
c05hbWUoKSk7CisgICAgcHJvY2Vzc0RldGFpbHMuYXBwZW5kKFN0cmluZygiXG4iKSk7CisgICAg
d3JpdGVUb0ZpbGUobV9zYW1wbGVMb2dGaWxlLCBwcm9jZXNzRGV0YWlscy51dGY4KCkuZGF0YSgp
LCBwcm9jZXNzRGV0YWlscy51dGY4KCkubGVuZ3RoKCkpOworICAgIAorICAgIG1fc2VwYXJhdG9y
ID0gU3RyaW5nKCJcdCIpOyAgICAKKyAgICBTdHJpbmcgaGVhZGVyID0gU3RyaW5nKCk7IAorICAg
IFdlYk1lbW9yeVN0YXRpc3RpY3Mgc3RhdHMgPSBzYW1wbGVXZWJLaXQoKTsKKyAgICBpZiAoIXN0
YXRzLmtleXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Rh
dHMua2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaGVhZGVyLmFwcGVuZChtX3NlcGFy
YXRvcik7CisgICAgICAgICAgICBoZWFkZXIuYXBwZW5kKHN0YXRzLmtleXNbaV0udXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaGVhZGVyLmFwcGVuZChTdHJpbmcoIlxuIikp
OworICAgIHdyaXRlVG9GaWxlKG1fc2FtcGxlTG9nRmlsZSwgaGVhZGVyLnV0ZjgoKS5kYXRhKCks
IGhlYWRlci51dGY4KCkubGVuZ3RoKCkpOworfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OnNh
bXBsZVRpbWVyRmlyZWQoVGltZXI8V2ViTWVtb3J5U2FtcGxlcj4qKQoreworICAgIGFwcGVuZEN1
cnJlbnRNZW1vcnlVc2FnZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUpOyAKK30KKwordm9pZCBXZWJN
ZW1vcnlTYW1wbGVyOjpzdG9wVGltZXJGaXJlZChUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopCit7
CisgICAgaWYgKCFtX2lzUnVubmluZykKKyAgICAgICAgcmV0dXJuOworICAgIHByaW50ZigiJWcg
c2Vjb25kcyBlbGFwc2VkLiBTdG9wcGluZyBtZW1vcnkgc2FtcGxlci4uLlxuIiwgbV9ydW5uaW5n
VGltZSk7CisgICAgc3RvcCgpOworfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OmFwcGVuZEN1
cnJlbnRNZW1vcnlVc2FnZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGZpbGUpCit7CisgICAg
Ly8gQ29sbGVjdCBzdGF0aXN0aWNzIGZyb20gYWxsb2NhdG9ycyBhbmQgZ2V0IFJTSVpFIG1ldHJp
YworICAgIFN0cmluZyBzdGF0U3RyaW5nID0gU3RyaW5nKCk7IAorICAgIFdlYk1lbW9yeVN0YXRp
c3RpY3MgbWVtb3J5U3RhdHMgPSBzYW1wbGVXZWJLaXQoKTsKKworICAgIGlmICghbWVtb3J5U3Rh
dHMudmFsdWVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0U3RyaW5nLmFwcGVuZChtX3NlcGFy
YXRvcik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWVtb3J5U3RhdHMudmFsdWVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGF0U3RyaW5nLmFwcGVuZChtX3NlcGFyYXRv
cik7CisgICAgICAgICAgICBzdGF0U3RyaW5nLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiJWx1Iiwg
bWVtb3J5U3RhdHMudmFsdWVzW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3RhdFN0cmlu
Zy5hcHBlbmQoU3RyaW5nKCJcbiIpKTsKKyAgICB3cml0ZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUs
IHN0YXRTdHJpbmcudXRmOCgpLmRhdGEoKSwgc3RhdFN0cmluZy51dGY4KCkubGVuZ3RoKCkpOwor
fQorCit9CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBUaGUgTWVtb3J5U2Ft
cGxlciBjbGFzcyBzYW1wbGVzIGEgbnVtYmVyIG9mIGludGVybmFsIGFuZCBleHRlcm5hbCBtZW1v
cnkgCisgKiAgbWV0cmljcyBldmVyeSBzZWNvbmQgd2hpbGUgcnVubmluZy4gU2FtcGxlIGRhdGEg
aXMgd3JpdHRlbiB0byBhIGxvZyBmaWxlLiAKKyAqICBTYW1wbGluZyBvY2N1cnMgb3ZlciBhIGR1
cmF0aW9uIHNwZWNpZmllZCB3aGVuIHN0YXJ0ZWQuIElmIGR1cmF0aW9uIGlzIHNldCAKKyAqICB0
byAwIChkZWZhdWx0KSwgdGhlIG1lbW9yeSBzYW1wbGVyIHdpbGwgcnVuIGluZGVmaW5pdGVseSB1
bnRpbCB0aGUgc3RvcCAKKyAqICBmdW5jdGlvbiBpcyBjYWxsZWQuIE1lbW9yeVNhbXBsZXIgYWxs
b3dzIHRoZSBvcHRpb24gb2Ygc2FtcGxpbmcgImluIHVzZSIgCisgKiAgbWVtb3J5IChjb21taXR0
ZWQgbWVtb3J5IG1pbnVzIGZyZWUgbGlzdCBieXRlIGNvdW50KSBvciBjb21taXR0ZWQgbWVtb3J5
IGZvcgorICogIGFueSBhbGxvY2F0b3Igd2hpY2gga2VlcHMgYSBmcmVlIGxpc3QuIFRoaXMgaW5j
bHVkZXMgRmFzdE1hbGxvYyBhbmQgdGhlIAorICogIEphdmFTY3JpcHRDb3JlIGhlYXAgYXQgdGhp
cyB0aW1lLgorICogIFRoZSBmb2xsb3dpbmcgbWVtb3J5IG1ldHJpY3MgYXJlIHJlY29yZGVkOgor
ICoKKyAqICAgICAgV2ViQ29yZQorICogICAgICAgICAgLSBGYXN0TWFsbG9jIGFsbG9jYXRpb25z
IGJ5dGVzICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAqICAgICAgSmF2YVNj
cmlwdENvcmUKKyAqICAgICAgICAgIC0gR2FyYmFnZSBjb2xsZWN0b3IgaGVhcCBieXRlcyAgICAg
ICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgICAgICAtIFN0YWNrIGJ5dGVz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0ZWQgb25seSEpCisgKiAgICAg
ICAgICAtIEpJVCBDb2RlIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0
ZWQgb25seSEpCisgKiAgICAgIE1hbGxvYyB6b25lcworICogICAgICAgICAgLSBJbiB1c2UgYnl0
ZXMgZm9yIHRoZSBmb2xsb3dpbmcgem9uZXM6CisgKiAgICAgICAgICAgICAgKiBEZWZhdWx0IHpv
bmUgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICogICAg
ICAgICAgICAgICogRGlzcENvbiB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNl
IG9yIGNvbW1pdHRlZCkKKyAqICAgICAgICAgICAgICAqIFB1cmdhYmxlIHpvbmUgICAgICAgICAg
ICAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgIFRhc2sgSW5mbwor
ICogICAgICAgICAgLSBSZXNpZGVudCBzaXplIG1lbW9yeSAoUlNJWkUpCisgKi8KKworI2lmbmRl
ZiBXZWJNZW1vcnlTYW1wbGVyX2gKKyNkZWZpbmUgV2ViTWVtb3J5U2FtcGxlcl9oCisKKyNpbmNs
dWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1
Y3QgU3lzdGVtTWFsbG9jU3RhdHM7CisKK3N0cnVjdCBXZWJNZW1vcnlTdGF0aXN0aWNzCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4ga2V5czsKKyAgICBWZWN0b3I8c2l6ZV90PiB2YWx1ZXM7Cit9Owor
ICAgIAorY2xhc3MgV2ViTWVtb3J5U2FtcGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgV2ViTWVtb3J5U2FtcGxlciogc2hhcmVkKCk7CisgICAgdm9pZCBz
dGFydChjb25zdCBkb3VibGUgaW50ZXJ2YWw9MCk7CisgICAgdm9pZCBzdGFydChjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBkb3VibGUgaW50ZXJ2
YWw9MCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc1J1bm5pbmcoKSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgV2ViTWVtb3J5U2FtcGxlcigpOworICAgIH5XZWJNZW1vcnlTYW1w
bGVyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplVGVtcExvZ0ZpbGUoKTsKKyAgICB2b2lk
IGluaXRpYWxpemVTYW5kYm94ZWRMb2dGaWxlKGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgd3JpdGVIZWFkZXJzKCk7CisgICAgdm9pZCBp
bml0aWFsaXplVGltZXJzKGRvdWJsZSk7CisgICAgdm9pZCBzYW1wbGVUaW1lckZpcmVkKFdlYkNv
cmU6OlRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+Kik7CisgICAgdm9pZCBzdG9wVGltZXJGaXJlZChX
ZWJDb3JlOjpUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopOworICAgIHZvaWQgYXBwZW5kQ3VycmVu
dE1lbW9yeVVzYWdlVG9GaWxlKFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSYpOworICAgIAor
ICAgIFN5c3RlbU1hbGxvY1N0YXRzIHNhbXBsZVN5c3RlbU1hbGxvYygpIGNvbnN0OworICAgIHNp
emVfdCBzYW1wbGVQcm9jZXNzQ29tbWl0dGVkQnl0ZXMoKSBjb25zdDsKKyAgICBXZWJNZW1vcnlT
dGF0aXN0aWNzIHNhbXBsZVdlYktpdCgpIGNvbnN0OworICAgIFN0cmluZyBwcm9jZXNzTmFtZSgp
IGNvbnN0OworICAgIAorICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX3NhbXBsZUxv
Z0ZpbGU7CisgICAgU3RyaW5nIG1fc2FtcGxlTG9nRmlsZVBhdGg7CisgICAgU3RyaW5nIG1fc2Vw
YXJhdG9yOworICAgIFdlYkNvcmU6OlRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+IG1fc2FtcGxlVGlt
ZXI7CisgICAgV2ViQ29yZTo6VGltZXI8V2ViTWVtb3J5U2FtcGxlcj4gbV9zdG9wVGltZXI7Cisg
ICAgYm9vbCBtX2lzUnVubmluZzsKKyAgICBkb3VibGUgbV9ydW5uaW5nVGltZTsKKyAgICBSZWZQ
dHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uOworfTsKKwor
fQorCisjZW5kaWYKSW5kZXg6IFdlYktpdDIvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5zaW9uTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5zaW9uTWFj
Lm1tCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5z
aW9uTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDMwIEBAIHZvaWQgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnMKICAgICBBU1NFUlQoIWhhbmRsZS5tX3NhbmRi
b3hFeHRlbnNpb24pOwogICAgIGhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24gPSBXS1NhbmRib3hF
eHRlbnNpb25DcmVhdGUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgd2tT
YW5kYm94RXh0ZW5zaW9uVHlwZSh0eXBlKSk7CiB9CisgICAgCitTdHJpbmcgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwg
VHlwZSB0eXBlLCBIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NhbmRi
b3hFeHRlbnNpb24pOworICAgIAorICAgIFZlY3RvcjxjaGFyPiBwYXRoKFBBVEhfTUFYKTsKKyAg
ICBpZiAoIWNvbmZzdHIoX0NTX0RBUldJTl9VU0VSX1RFTVBfRElSLCBwYXRoLmRhdGEoKSwgcGF0
aC5zaXplKCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgCisgICAgLy8gU2hyaW5r
IHRoZSB2ZWN0b3IuICAgCisgICAgcGF0aC5zaHJpbmsoc3RybGVuKHBhdGguZGF0YSgpKSk7Cisg
ICAgQVNTRVJUKHBhdGgubGFzdCgpID09ICcvJyk7CisgICAgCisgICAgLy8gQXBwZW5kIHRoZSBm
aWxlIG5hbWUuICAgIAorICAgIHBhdGguYXBwZW5kKHByZWZpeC51dGY4KCkuZGF0YSgpLCBwcmVm
aXgubGVuZ3RoKCkpOworICAgIHBhdGguYXBwZW5kKCdcMCcpOworICAgIAorICAgIGhhbmRsZS5t
X3NhbmRib3hFeHRlbnNpb24gPSBXS1NhbmRib3hFeHRlbnNpb25DcmVhdGUoZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGguZGF0YSgpKS5kYXRhKCksIHdrU2FuZGJveEV4dGVuc2lvblR5cGUo
dHlwZSkpOworCisgICAgaWYgKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSB7CisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZyhwYXRoLmRhdGEoKSk7
Cit9CiAKIFNhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNpb24oY29uc3QgSGFuZGxlJiBo
YW5kbGUpCiAgICAgOiBtX3NhbmRib3hFeHRlbnNpb24oaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lv
bikKSW5kZXg6IFdlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICovCisKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+
CisjaW5jbHVkZSA8bWFjaC90YXNrLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3R5cGVzLmg+Cisj
aW5jbHVkZSA8bWFsbG9jL21hbGxvYy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1
c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0cnVjdCBT
eXN0ZW1NYWxsb2NTdGF0cyB7CisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBkZWZhdWx0TWFsbG9j
Wm9uZVN0YXRzOworICAgIG1hbGxvY19zdGF0aXN0aWNzX3QgZGlzcGF0Y2hDb250aW51YXRpb25N
YWxsb2Nab25lU3RhdHM7CisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBwdXJnZWFibGVNYWxsb2Na
b25lU3RhdHM7Cit9OworCitTeXN0ZW1NYWxsb2NTdGF0cyBXZWJNZW1vcnlTYW1wbGVyOjpzYW1w
bGVTeXN0ZW1NYWxsb2MoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0
TWFsbG9jWm9uZU5hbWUgPSAiRGVmYXVsdE1hbGxvY1pvbmUiOworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVOYW1lID0gIkRpc3BhdGNoQ29udGlu
dWF0aW9ucyI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHB1cmdlYWJsZU1hbGxvY1pvbmVOYW1l
ID0gIkRlZmF1bHRQdXJnZWFibGVNYWxsb2Nab25lIjsKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBt
YWxsb2NTdGF0czsKKyAgICB2bV9hZGRyZXNzX3QqIHpvbmVzOworICAgIHVuc2lnbmVkIGNvdW50
OworICAgIAorICAgIC8vIFplcm8gb3V0IHRoZSBzdHJ1Y3R1cmVzIGluIGNhc2UgYSB6b25lIGlz
IG1pc3NpbmcKKyAgICBtYWxsb2Nfc3RhdGlzdGljc190IHN0YXRzOworICAgIHN0YXRzLmJsb2Nr
c19pbl91c2UgPSAwOworICAgIHN0YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5tYXhf
c2l6ZV9pbl91c2UgPSAwOworICAgIHN0YXRzLnNpemVfYWxsb2NhdGVkID0gMDsKKyAgICBtYWxs
b2NTdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7CisgICAgbWFsbG9jU3RhdHMu
ZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICBtYWxsb2NT
dGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAKKyAgICBtYWxsb2Nf
Z2V0X2FsbF96b25lcyhtYWNoX3Rhc2tfc2VsZigpLCAwLCAmem9uZXMsICZjb3VudCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGNvbnN0
IGNoYXIqIG5hbWUgPSBtYWxsb2NfZ2V0X3pvbmVfbmFtZShyZWludGVycHJldF9jYXN0PG1hbGxv
Y196b25lX3QqPih6b25lc1tpXSkpKSB7CisgICAgICAgICAgICBzdGF0cy5ibG9ja3NfaW5fdXNl
ID0gMDsKKyAgICAgICAgICAgIHN0YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICAgICAgICAgIHN0
YXRzLm1heF9zaXplX2luX3VzZSA9IDA7CisgICAgICAgICAgICBzdGF0cy5zaXplX2FsbG9jYXRl
ZCA9IDA7CQorICAgICAgICAgICAgbWFsbG9jX3pvbmVfc3RhdGlzdGljcyhyZWludGVycHJldF9j
YXN0PG1hbGxvY196b25lX3QqPih6b25lc1tpXSksICZzdGF0cyk7CisgICAgICAgICAgICBpZiAo
IXN0cmNtcChuYW1lLCBkZWZhdWx0TWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1h
bGxvY1N0YXRzLmRlZmF1bHRNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCFzdHJjbXAobmFtZSwgZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lTmFtZSkp
CisgICAgICAgICAgICAgICAgbWFsbG9jU3RhdHMuZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Na
b25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgcHVy
Z2VhYmxlTWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLnB1cmdl
YWJsZU1hbGxvY1pvbmVTdGF0cyA9IHN0YXRzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBtYWxsb2NTdGF0czsKK30KKworc2l6ZV90IFdlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVByb2Nl
c3NDb21taXR0ZWRCeXRlcygpIGNvbnN0Cit7CisgICAgdGFza19iYXNpY19pbmZvXzY0IHRhc2tJ
bmZvOworICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgY291bnQgPSBUQVNLX0JBU0lDX0lORk9f
NjRfQ09VTlQ7CisgICAgdGFza19pbmZvKG1hY2hfdGFza19zZWxmKCksIFRBU0tfQkFTSUNfSU5G
T182NCwgcmVpbnRlcnByZXRfY2FzdDx0YXNrX2luZm9fdD4oJnRhc2tJbmZvKSwgJmNvdW50KTsK
KyAgICByZXR1cm4gdGFza0luZm8ucmVzaWRlbnRfc2l6ZTsKK30KKworU3RyaW5nIFdlYk1lbW9y
eVNhbXBsZXI6OnByb2Nlc3NOYW1lKCkgY29uc3QKK3sKKyAgICBOU1N0cmluZyAqYXBwTmFtZSA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CisgICAgaWYgKCFhcHBO
YW1lKQorICAgICAgICBhcHBOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9j
ZXNzTmFtZV07CisgICAgcmV0dXJuIFN0cmluZyhhcHBOYW1lKTsKK30KKyAgCitXZWJNZW1vcnlT
dGF0aXN0aWNzIFdlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVdlYktpdCgpIGNvbnN0Cit7CisgICAg
c2l6ZV90IHRvdGFsQnl0ZXNJblVzZSA9IDAsIHRvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOyAKKyAg
ICAKKyAgICBXZWJNZW1vcnlTdGF0aXN0aWNzIHdlYktpdE1lbW9yeVN0YXRzOworICAgIAorICAg
IEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFs
bG9jU3RhdGlzdGljcygpOworICAgIHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNJblVzZSA9IGZhc3RN
YWxsb2NTdGF0aXN0aWNzLmNvbW1pdHRlZFZNQnl0ZXMgLSBmYXN0TWFsbG9jU3RhdGlzdGljcy5m
cmVlTGlzdEJ5dGVzOworICAgIHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQgPSBmYXN0
TWFsbG9jU3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVzOworICAgIHRvdGFsQnl0ZXNJblVzZSAr
PSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RN
YWxsb2NCeXRlc0NvbW1pdHRlZDsKKyAgICAKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEhlYXA6OlN0YXRpc3RpY3MgaGVhcE1lbW9yeVN0YXRzID0gaGVhcFN0
YXRpc3RpY3MoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzaXplX3Qg
anNjSGVhcEJ5dGVzSW5Vc2UgPSBoZWFwTWVtb3J5U3RhdHMuc2l6ZSAtIGhlYXBNZW1vcnlTdGF0
cy5mcmVlOworICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBoZWFwTWVtb3J5U3Rh
dHMuc2l6ZTsKKyAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5dGVzSW5Vc2U7CisgICAg
dG90YWxCeXRlc0NvbW1pdHRlZCArPSBqc2NIZWFwQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAg
R2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0
YXRpc3RpY3MoKTsKKyAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZ2xvYmFsTWVtb3J5U3RhdHMuc3Rh
Y2tCeXRlcyArIGdsb2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzOworICAgIHRvdGFsQnl0ZXNDb21t
aXR0ZWQgKz0gZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRlcyArIGdsb2JhbE1lbW9yeVN0YXRz
LkpJVEJ5dGVzOworICAgIAorICAgIFN5c3RlbU1hbGxvY1N0YXRzIHN5c3RlbVN0YXRzID0gc2Ft
cGxlU3lzdGVtTWFsbG9jKCk7CisgICAgCisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25lQnl0
ZXNJblVzZSA9IHN5c3RlbVN0YXRzLmRlZmF1bHRNYWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7
CisgICAgc2l6ZV90IGRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBz
eXN0ZW1TdGF0cy5kaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVTdGF0cy5zaXplX2luX3Vz
ZTsKKyAgICBzaXplX3QgcHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0
cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IGRlZmF1
bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5kZWZhdWx0TWFsbG9jWm9u
ZVN0YXRzLnNpemVfYWxsb2NhdGVkOworICAgIHNpemVfdCBkaXNwYXRjaENvbnRpbnVhdGlvbk1h
bGxvY1pvbmVCeXRlc0NvbW1pdHRlZCA9IHN5c3RlbVN0YXRzLmRpc3BhdGNoQ29udGludWF0aW9u
TWFsbG9jWm9uZVN0YXRzLnNpemVfYWxsb2NhdGVkOworICAgIHNpemVfdCBwdXJnZWFibGVNYWxs
b2Nab25lQnl0ZXNDb21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3Rh
dHMuc2l6ZV9hbGxvY2F0ZWQ7CisgICAgdG90YWxCeXRlc0luVXNlICs9IGRlZmF1bHRNYWxsb2Na
b25lQnl0ZXNJblVzZSArIGRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2Ug
KyBwdXJnZWFibGVNYWxsb2Nab25lQnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVk
ICs9IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgKyBkaXNwYXRjaENvbnRpbnVhdGlv
bk1hbGxvY1pvbmVCeXRlc0NvbW1pdHRlZCArIHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0NvbW1p
dHRlZDsKKyAgICAKKyAgICBzaXplX3QgcmVzaWRlbnRTaXplID0gc2FtcGxlUHJvY2Vzc0NvbW1p
dHRlZEJ5dGVzKCk7CisKKyAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAg
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJUaW1lc3RhbXAiKSk7
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChub3cpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiVG90YWwgQnl0ZXMgb2YgTWVtb3J5IEluIFVz
ZSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHRvdGFsQnl0ZXNJblVz
ZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJGYXN0IE1hbGxv
YyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZmFz
dE1hbGxvY0J5dGVzSW5Vc2UpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0
cmluZygiRGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy52YWx1ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSk7CisgICAgd2ViS2l0
TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJEaXNwYXRjaCBDb250aW51YXRpb24gTWFs
bG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChk
aXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1v
cnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlB1cmdlYWJsZSBNYWxsb2MgWm9uZSBCeXRlcyIp
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHB1cmdlYWJsZU1hbGxvY1pv
bmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmco
IkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMu
YXBwZW5kKGpzY0hlYXBCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFw
cGVuZChTdHJpbmcoIlRvdGFsIEJ5dGVzIG9mIENvbW1pdHRlZCBNZW1vcnkiKSk7CisgICAgd2Vi
S2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZCh0b3RhbEJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3
ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkZhc3QgTWFsbG9jIFpvbmUgQnl0
ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChmYXN0TWFsbG9jQnl0
ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygi
RGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1
ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGlzcGF0Y2ggQ29udGludWF0aW9uIE1hbGxv
YyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZGlz
cGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiUHVyZ2VhYmxlIE1hbGxvYyBab25lIEJ5dGVz
IikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQocHVyZ2VhYmxlTWFsbG9j
Wm9uZUJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChT
dHJpbmcoIkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52
YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRlc0NvbW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3Rh
dHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0IFN0YWNrIEJ5dGVzIikpOworICAgIHdl
YktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRl
cyk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0
IEpJVCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGdsb2Jh
bE1lbW9yeVN0YXRzLkpJVEJ5dGVzKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVu
ZChTdHJpbmcoIlJlc2lkZW50IFNpemUiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVz
LmFwcGVuZChyZXNpZGVudFNpemUpOworICAgIAorICAgIHJldHVybiB3ZWJLaXRNZW1vcnlTdGF0
czsKK30KKyAgICAKK30KKwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHJldmlzaW9u
IDc1MDIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgor
I2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgog
I2luY2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2Fn
ZUtpbmRzLmgiCkBAIC0zNiwxMiArMzcsMTQgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUg
IldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01h
bmFnZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiAjaWZu
ZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KQEAgLTg2
LDYgKzg5LDggQEAgV2ViQ29udGV4dDo6V2ViQ29udGV4dChQcm9jZXNzTW9kZWwgcHJvYwogICAg
ICwgbV9jYWNoZU1vZGVsKENhY2hlTW9kZWxEb2N1bWVudFZpZXdlcikKICAgICAsIG1fY2xlYXJS
ZXNvdXJjZUNhY2hlc0Zvck5ld1dlYlByb2Nlc3MoZmFsc2UpCiAgICAgLCBtX2NsZWFyQXBwbGlj
YXRpb25DYWNoZUZvck5ld1dlYlByb2Nlc3MoZmFsc2UpCisgICAgLCBtX21lbW9yeVNhbXBsZXJF
bmFibGVkKGZhbHNlKQorICAgICwgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwoMTQwMC4wKQogICAg
ICwgbV9kYXRhYmFzZU1hbmFnZXJQcm94eShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Y3JlYXRl
KHRoaXMpKQogI2lmIFBMQVRGT1JNKFdJTikKICAgICAsIG1fc2hvdWxkUGFpbnROYXRpdmVDb250
cm9scyh0cnVlKQpAQCAtMTk1LDYgKzIwMCwxOSBAQCB2b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NE
aWRGaW5pc2hMYXVuY2hpCiAgICAgQVNTRVJUX1VOVVNFRChwcm9jZXNzLCBwcm9jZXNzID09IG1f
cHJvY2Vzcyk7CiAKICAgICBtX3Zpc2l0ZWRMaW5rUHJvdmlkZXIucHJvY2Vzc0RpZEZpbmlzaExh
dW5jaGluZygpOworICAgIAorICAgIC8vIFNvbWV0aW1lcyB0aGUgbWVtb3J5U2FtcGxlciBnZXRz
IGluaXRpYWxpemVkIGFmdGVyIHByb2Nlc3MgaW5pdGlhbGl6YXRpb24gaGFzIGhhcHBlbmVkIGJ1
dCBiZWZvcmUgdGhlIHByb2Nlc3MgaGFzIGZpbmlzaGVkIGxhdW5jaGluZworICAgIC8vIHNvIGNo
ZWNrIGlmIGl0IG5lZWRzIHRvIGJlIHN0YXJ0ZWQgaGVyZQorICAgIGlmKG1fbWVtb3J5U2FtcGxl
ckVuYWJsZWQpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ1Nh
bmRib3hIYW5kbGU7CisgICAgICAgIC8vIHdheSB0byBnZXQgbmFtZSBvZiBwcm9jZXNzIGZyb20g
VUkgc2lkZT8KKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBub3cgPSBXVEY6OmN1cnJlbnRUaW1l
KCk7CisgICAgICAgIFN0cmluZyBzYW1wbGVMb2dGaWxlUGF0aCA9IFN0cmluZzo6Zm9ybWF0KCJX
ZWJQcm9jZXNzJWxsdSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihub3cpKTsKKyAgICAgICAgc2Ft
cGxlTG9nRmlsZVBhdGggPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3Jh
cnlGaWxlKHNhbXBsZUxvZ0ZpbGVQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpXcml0ZU9ubHksIHNh
bXBsZUxvZ1NhbmRib3hIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBsZXIoc2FtcGxlTG9nU2FuZGJv
eEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIG1fbWVtb3J5U2FtcGxlckludGVydmFsKSwgMCk7
CisgICAgfQogfQogCiB2b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNz
UHJveHkqIHByb2Nlc3MpCkBAIC01MjEsNSArNTM5LDQyIEBAIHZvaWQgV2ViQ29udGV4dDo6Y2xl
YXJBcHBsaWNhdGlvbkNhY2hlKCkKIAogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6Q2xlYXJBcHBsaWNhdGlvbkNhY2hlKCksIDApOwogfQorICAgIAordm9pZCBXZWJD
b250ZXh0OjpzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgZG91YmxlIGludGVydmFsKQoreyAgICAK
KyAgICAvLyBGb3IgbmV3IFdlYlByb2Nlc3NlcyB3ZSB3aWxsIGFsc28gd2FudCB0byBzdGFydCB0
aGUgTWVtb3J5IFNhbXBsZXIKKyAgICBtX21lbW9yeVNhbXBsZXJFbmFibGVkID0gdHJ1ZTsKKyAg
ICBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCA9IGludGVydmFsOworICAgIAorICAgIC8vIEZvciBV
SVByb2Nlc3MKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RhcnQoaW50ZXJ2YWwp
OworICAgIAorICAgIGlmICghaGFzVmFsaWRQcm9jZXNzKCkpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICAvLyBGb3IgV2ViUHJvY2VzcworICAgIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBzYW1wbGVMb2dTYW5kYm94SGFuZGxlOyAgICAKKyAgICBkb3VibGUgbm93ID0gV1RG
OjpjdXJyZW50VGltZSgpOworICAgIFN0cmluZyBzYW1wbGVMb2dGaWxlUGF0aCA9IFN0cmluZzo6
Zm9ybWF0KCJXZWJQcm9jZXNzJWxsdSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihub3cpKTsKKyAg
ICBzYW1wbGVMb2dGaWxlUGF0aCA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRl
bXBvcmFyeUZpbGUoc2FtcGxlTG9nRmlsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OldyaXRlT25s
eSwgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7CisgICAgCisgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBsZXIoc2FtcGxlTG9nU2FuZGJveEhh
bmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKSwgMCk7Cit9CisKK3ZvaWQgV2ViQ29u
dGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIoKQoreyAgICAKKyAgICAvLyBGb3IgV2ViUHJvY2Vzcwor
ICAgIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBGb3IgVUlQ
cm9jZXNzCisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0b3AoKTsKKyAgICAKKyAg
ICBpZiAoIWhhc1ZhbGlkUHJvY2VzcygpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2Ft
cGxlcigpLCAwKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dC5oCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw5IEBAIHB1YmxpYzoKICAgICBDYWNo
ZU1vZGVsIGNhY2hlTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTW9kZWw7IH0KICAgICB2
b2lkIGNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25DYWNo
ZSgpOworICAgIAorICAgIHZvaWQgc3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IGRvdWJsZSBpbnRl
cnZhbCk7CisgICAgdm9pZCBzdG9wTWVtb3J5U2FtcGxlcigpOwogCiAjaWYgUExBVEZPUk0oV0lO
KQogICAgIHZvaWQgc2V0U2hvdWxkUGFpbnROYXRpdmVDb250cm9scyhib29sKTsKQEAgLTE4Niw2
ICsxODksOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2NsZWFyUmVzb3VyY2VDYWNoZXNGb3JO
ZXdXZWJQcm9jZXNzOwogICAgIGJvb2wgbV9jbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JOZXdXZWJQ
cm9jZXNzOworICAgIAorICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZDsKKyAgICBkb3Vi
bGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWw7CiAKICAgICBSZWZQdHI8V2ViRGF0YWJhc2VNYW5h
Z2VyUHJveHk+IG1fZGF0YWJhc2VNYW5hZ2VyUHJveHk7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsMyArMTU1LDEzIEBA
IFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldERhdGFiYXMKIHsKICAgICByZXR1cm4g
dG9BUEkodG9JbXBsKGNvbnRleHRSZWYpLT5kYXRhYmFzZU1hbmFnZXJQcm94eSgpKTsKIH0KKwor
dm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLRG91YmxlUmVmIGludGVydmFsKQoreworICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c3RhcnRN
ZW1vcnlTYW1wbGVyKHRvSW1wbChpbnRlcnZhbCktPnZhbHVlKCkpOworfQorCit2b2lkIFdLQ29u
dGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQoreworICAgIHRv
SW1wbChjb250ZXh0UmVmKS0+c3RvcE1lbW9yeVNhbXBsZXIoKTsKK30KSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5oCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDkgQEAg
V0tfRVhQT1JUIFdLQ2FjaGVNb2RlbCBXS0NvbnRleHRHZXRDYWNoZQogCiBXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRDbGVhclJlc291cmNlQ2FjaGVzKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQXBwbGljYXRpb25DYWNoZShXS0NvbnRleHRSZWYg
Y29udGV4dCk7CisgICAgCitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBs
ZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG91YmxlUmVmIGludGVydmFsKTsKK1dLX0VYUE9S
VCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0KTsK
IAogV0tfRVhQT1JUIFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldERhdGFiYXNlTWFu
YWdlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNiArMjYy
LDkgQEAKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4
NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4REMyRUY1MzA0ODZBNjk0MDA5
OEIyMTYgLyogSW5mb1BsaXN0LnN0cmluZ3MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4OUMxNjY2RkU4NDExNThDMDJBQUMwNyAvKiBJbmZvUGxpc3Qu
c3RyaW5ncyAqLzsgfTsKIAkJOERDMkVGNTcwNDg2QTY5NDAwOThCMjE2IC8qIENvY29hLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDEw
NThDN0IxRkVBNTU4NUUxMUNBMkNCQiAvKiBDb2NvYS5mcmFtZXdvcmsgKi87IH07CisJCTkwOTg1
NEVDMTJCQzRFMTcwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU4MTJCQzI0OEIwMDA3OTlC
NiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLzsgfTsKKwkJOTA5ODU0RUQxMkJDNEUxODAwMEFE
MDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU5MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1w
bGVyLmggKi87IH07CisJCTkwOTg1NEVFMTJCQzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1w
bGVyLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkwNTYyMEU1MTJCQzI0NzYwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSAqLzsg
fTsKIAkJOTM1RUVCOUIxMjc3NjE3QzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1
RUVCOTgxMjc3NjE2RDAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNUVFQjlF
MTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVFRUI5NTEyNzc2MTZEMDAz
MzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwICovOyB9OwogCQk5MzVFRUI5RjEy
Nzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUVFQjk2MTI3NzYxNkQwMDMzMjJC
OCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NDMsNiArOTQ2LDkgQEAKIAkJNzYyQjc0ODQxMjBC
QkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCThEQzJFRjVBMDQ4NkE2OTQwMDk4QjIxNiAvKiBJbmZvLnBsaXN0ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4REMyRUY1QjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0Mi5mcmFtZXdv
cmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXQyLmZyYW1ld29y
azsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJOTA1NjIwRTUxMkJDMjQ3
NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTWVtb3J5U2FtcGxlci5tYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTkwNTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlT
YW1wbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk1lbW9y
eVNhbXBsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MDU2MjBFOTEyQkMy
NDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJNZW1vcnlTYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzNUVFQjhGMTI3NzYxNUQwMDMzMjJCOCAvKiBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJk
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1
bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
NUVFQjkwMTI3NzYxNUQwMDMzMjJCOCAvKiBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3
YXJkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzVFRUI5MTEyNzc2MTVE
MDAzMzIyQjggLyogSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRM
aXN0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjYzLDYgKzE2Njks
OCBAQAogCQkJCUJDQ0Y2QUJBMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5jcHAgKi8sCiAJ
CQkJQkNDRjZBQkIxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdlLmggKi8sCiAJCQkJQzAzMzdE
RDIxMjdBMkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQuY3BwICovLAorCQkJCTkwNTYy
MEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLywKKwkJCQk5MDU2
MjBFOTEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5oICovLAogCQkJCUMwMzM3
REFGMTI3QTI4RDAwMDhGRjRGNCAvKiBXZWJNb3VzZUV2ZW50LmNwcCAqLywKIAkJCQlCQ0Y2OUY5
ODExNzZDRUQ2MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGFTdG9yZS5oICovLAogCQkJCUJD
MzNERDY3MTIzODQ2NDYwMDM2MEYzRiAvKiBXZWJOdW1iZXIuaCAqLywKQEAgLTIxNTQsNiArMjE2
Miw3IEBACiAJCQkJQkNFMjMyNjIxMjJDNkNGMzAwRDVDMzVBIC8qIFdlYkNvcmVBcmd1bWVudENv
ZGVyc01hYy5tbSAqLywKIAkJCQlCQzExMUI1QjExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRG
YWN0b3J5LmggKi8sCiAJCQkJQkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFj
dG9yeS5tbSAqLywKKwkJCQk5MDU2MjBFNTEyQkMyNDc2MDAwNzk5QjYgLyogV2ViTWVtb3J5U2Ft
cGxlci5tYWMubW0gKi8sCiAJCQkJQkNFMjMxQzAxMjJDNDY2RTAwRDVDMzVBIC8qIFdlYlVSTFJl
cXVlc3RNYWMubW0gKi8sCiAJCQkJQkM5MEExRDUxMjJERDY2QTAwQ0M4QzUwIC8qIFdlYlVSTFJl
c3BvbnNlTWFjLm1tICovLAogCQkJCTFBQUI0QUE5MTI5NkYxNTQwMDIzOTUyRiAvKiBTYW5kYm94
RXh0ZW5zaW9uTWFjLm1tICovLApAQCAtMjgyOSw2ICsyODM4LDcgQEAKIAkJCQkxQTRBOUYzMzEy
Qjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg1
OEEyMDEyQzAzNTdCMDBFREVCMkUgLyogV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTkwOTg1NEVEMTJCQzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1w
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogU2Vs
ZWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2NzJEMTJDN0VERjcwMDhGOUMz
NSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2QUJEMTJD
OTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjYzLDYgKzMy
NzMsOCBAQAogCQkJCTFBNEE5QzlBMTJCODIxQ0QwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1v
ZHVsZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDODU4QTIxMTJDMDM1N0IwMEVERUIyRSAv
KiBXZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBNDE3RUYx
MkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTA5ODU0RUMxMkJDNEUxNzAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJOTA5ODU0RUUxMkJDNEUxODAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIu
bWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjY3MzMxMkM3RjE1QzAwOEY5QzM1IC8qIE9y
aWdpbkFuZERhdGFiYXNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGNkFCQzEyQzkxRUY5
MDA4RjlDMzUgLyogV2ViSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjZBQzIxMkM5
MUYzNDAwOEY5QzM1IC8qIFdLSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEyIEBACiAjaW5j
bHVkZSAiSW5qZWN0ZWRCdW5kbGVNZXNzYWdlS2luZHMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUg
IlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU1h
bmFnZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBs
ZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtNjExLDYg
KzYxMywyMCBAQCB2b2lkIFdlYlByb2Nlc3M6OmNhbmNlbERvd25sb2FkKHVpbnQ2NF90CiAgICAg
RG93bmxvYWRNYW5hZ2VyOjpzaGFyZWQoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElEKTsKIH0K
IAordm9pZCBXZWJQcm9jZXNzOjpzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWxlSGFuZGxlLCBjb25zdCBTdHJpbmcmIHNhbXBsZUxv
Z0ZpbGVQYXRoLCBjb25zdCBkb3VibGUgaW50ZXJ2YWwpCit7CisjaWYgRU5BQkxFKE1FTU9SWV9T
QU1QTEVSKSAgICAKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RhcnQoc2FtcGxl
TG9nRmlsZUhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKTsKKyNlbmRpZgorfQor
ICAgIAordm9pZCBXZWJQcm9jZXNzOjpzdG9wTWVtb3J5U2FtcGxlcigpCit7CisjaWYgRU5BQkxF
KE1FTU9SWV9TQU1QTEVSKQorICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7
CisjZW5kaWYKK30KKwogdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0
IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiB7CiAgICAgbV90ZXh0Q2hlY2tl
clN0YXRlID0gdGV4dENoZWNrZXJTdGF0ZTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAko
cmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgogI2lu
Y2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCisjaW5jbHVk
ZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1
ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKICNpbmNsdWRlICJWaXNpdGVkTGlua1RhYmxlLmgiCkBA
IC0xMzMsNiArMTM0LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtQ2xlYXJSZXNvdXJj
ZUNhY2hlcygpOwogICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkNhY2hlKCk7CiAKKyAgICB2b2lk
IHN0YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBkb3VibGUpOworICAgIHZvaWQgc3RvcE1lbW9yeVNhbXBsZXIoKTsK
KwogICAgIHZvaWQgY2FuY2VsRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCk7CiAKICAgICB2
b2lkIHNldFRleHRDaGVja2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYpOwpJbmRleDog
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1MDIy
KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyB7CiAKICAgICBD
bGVhclJlc291cmNlQ2FjaGVzKCk7CiAgICAgQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKCk7CisgICAg
CisgICAgdm9pZCBTdGFydE1lbW9yeVNhbXBsZXIoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgc2FtcGxlTG9nRmlsZUhhbmRsZSwgV1RGOjpTdHJpbmcgc2FtcGxlTG9nRmlsZVBhdGgs
IGRvdWJsZSBpbnRlcnZhbCk7CisgICAgdm9pZCBTdG9wTWVtb3J5U2FtcGxlcigpOwogCiAgICAg
IyBEb3dubG9hZHMuIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbiBhIERvd25sb2FkLm1lc3NhZ2Vz
LmluLCBidXQgaXQgc2VlbWVkIHVubmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIG5ldyBmaWxlIGp1c3Qg
Zm9yCiAgICAgIyBhIHNpbmdsZSBtZXNzYWdlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77976</attachid>
            <date>2011-01-04 23:48:49 -0800</date>
            <delta_ts>2011-01-05 22:43:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>webkit2MemorySampler.txt</filename>
            <type>text/plain</type>
            <size>42224</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS84NjQ5NjE3PiBNaWdyYXRlIG1lbW9yeSB0cmFja2luZyBmcm9tIFNh
ZmFyaSB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwNzk5IEFkZCBNZW1vcnkgU2FtcGxlciB0byBXZWJLaXQKKyAgICAgICAgCisgICAg
ICAgIEFkZCBhIHNhbXBsZXIgZm9yIHByaW50aW5nIG9mZiBwcm9jZXNzIG1lbW9yeSBzdGF0aXN0
aWNzLgorICAgICAgICBFeHBvcnQgZmlsZSBtb2RlLgorCisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisKIDIwMTEtMDEtMDQgIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzUwMjIp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC03NjksNiArNzY5
LDcgQEAgX19aTjdXZWJDb3JlOEZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlOEdyYWRpZW50MTJh
ZGRDb2xvclN0b3BFZlJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18x
MEZsb2F0UG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAorX19a
TjdXZWJDb3JlOG9wZW5GaWxlRVJLTjNXVEY2U3RyaW5nRU5TXzEyRmlsZU9wZW5Nb2RlRQogX19a
TjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5n
czE1c2V0V2ViR0xFbmFibGVkRWIKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTAyOCkKKysrIFdlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDEtMDQgIFN0ZXBoYW5p
ZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2NDk2MTc+IE1pZ3JhdGUgbWVt
b3J5IHRyYWNraW5nIGZyb20gU2FmYXJpIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3OTkgQWRkIE1lbW9yeSBTYW1wbGVyIHRvIFdl
YktpdAorICAgICAgICAKKyAgICAgICAgQWRkIGEgc2FtcGxlciBmb3IgcHJpbnRpbmcgb2ZmIHBy
b2Nlc3MgbWVtb3J5IHN0YXRpc3RpY3MuCisgICAgICAgIFRoaXMgdG9vbCBjYW4gdHJhY2s6Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgV2ViQ29yZQorICAgICAgICAgICAgICAg
ICAgIC0gRmFzdE1hbGxvYyBhbGxvY2F0aW9ucyBieXRlcyAgICAgICAgICAgICAgKGluIHVzZSBv
ciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAg
ICAgICAgICAtIEdhcmJhZ2UgY29sbGVjdG9yIGhlYXAgYnl0ZXMgICAgICAgICAgICAgIChpbiB1
c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAgICAgICAgIC0gU3RhY2sgYnl0ZXMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdHRlZCBvbmx5ISkKKyAgICAgICAgICAgICAg
ICAgICAtIEpJVCBDb2RlIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0
ZWQgb25seSEpCisgICAgICAgICAgICAgICAgTWFsbG9jIHpvbmVzCisgICAgICAgICAgICAgICAg
ICAgLSBJbiB1c2UgYnl0ZXMgZm9yIHRoZSBmb2xsb3dpbmcgem9uZXM6CisgICAgICAgICAgICAg
ICAgICAgICAgICogRGVmYXVsdCB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNl
IG9yIGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgKiBEaXNwQ29uIHpvbmUgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICAgICAgICAgICAg
ICAgICAgICAgICAqIFB1cmdhYmxlIHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAgKGluIHVz
ZSBvciBjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgVGFzayBJbmZvCisgICAgICAgICAgICAg
ICAgICAgLSBSZXNpZGVudCBzaXplIG1lbW9yeSAoUlNJWkUpCisgICAgICAgIAorICAgICAgICAg
ICAgICAgIERhdGEgY29sbGVjdGVkIGlzIGR1bXBlZCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAg
ICAgICAKKyAgICAgICAgQ3JlYXRlIGEgc2FuZGJveCBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4KKyAg
ICAgICAgKiBTaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25NYWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUpOgorICAgICAgICAKKyAg
ICAgICAgTWVtb3J5IFNhbXBsZXIgZmlsZXMKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1dl
Yk1lbW9yeVNhbXBsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2Ft
cGxlcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6V2ViTWVt
b3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0YXJ0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnN0b3ApOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZW1vcnlTYW1wbGVyOjppc1J1bm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1v
cnlTYW1wbGVyOjppbml0aWFsaXplVGVtcExvZ0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjppbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYk1lbW9yeVNhbXBsZXI6OndyaXRlSGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnNhbXBsZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZW1vcnlTYW1wbGVyOjpzdG9wVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9y
eVNhbXBsZXI6OmFwcGVuZEN1cnJlbnRNZW1vcnlVc2FnZVRvRmlsZSk6CisgICAgICAgICogU2hh
cmVkL1dlYk1lbW9yeVNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVN5c3RlbU1hbGxvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNh
bXBsZXI6OnNhbXBsZVByb2Nlc3NDb21taXR0ZWRCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lbW9yeVNhbXBsZXI6OnByb2Nlc3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5
U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgCisgICAgICAgIEFQSSB0byBzdGFydCBh
bmQgc3RvcCBVSVByb2Nlc3MgYW5kIFdlYlByb2Nlc3Mgc2FtcGxpbmcuCisgICAgICAgIAorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0
U3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVy
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Lmg6CisgICAgICAgIAorICAg
ICAgICBTZW5kIG1lc3NhZ2VzIHRvIFdlYlByb2Nlc3MgdG8gc3RhcnQgYW5kIHN0b3AgbWVtb3J5
IHNhbXBsaW5nLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6c3RhcnRNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJD
b250ZXh0Lmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OnN0YXJ0TWVtb3J5U2FtcGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnN0b3BNZW1vcnlTYW1wbGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKIDIwMTEt
MDEtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyUHJlZml4LmgJKHJldmlzaW9uIDc1MDIyKQorKysgV2Vi
S2l0Mi9XZWJLaXQyUHJlZml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBAIHN0
YXRpYyBjb25zdCB0eXBlJiBuYW1lKCkgXAogCiAjZGVmaW5lIEVOQUJMRV9QTFVHSU5fUFJPQ0VT
UyAxCiAKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIEVOQUJMRV9NRU1PUllfU0FNUExFUiAx
CisjZW5kaWYKKwogI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogCiAjaWZk
ZWYgX19PQkpDX18KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDc1
MDIyKQorKysgV2ViS2l0Mi9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRC
T1gpCiB0eXBlZGVmIHN0cnVjdCBfX1dLU2FuZGJveEV4dGVuc2lvbiogV0tTYW5kYm94RXh0ZW5z
aW9uUmVmOwpAQCAtNjksNiArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTYW5kYm94RXh0ZW5zaW9uPiBjcmVhdGUoY29uc3QgSGFuZGxlJik7CiAgICAgc3RhdGljIHZv
aWQgY3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgVHlwZSB0eXBlLCBIYW5kbGUmKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3Ry
aW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwgSGFuZGxlJik7CiAgICAgflNhbmRib3hFeHRlbnNpb24o
KTsKIAogICAgIGJvb2wgaW52YWxpZGF0ZSgpOwpAQCAtODksNiArOTEsNyBAQCBpbmxpbmUgdm9p
ZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU6OmVuCiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBIYW5kbGUmKSB7
IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGUoY29uc3QgSGFuZGxlJikgeyByZXR1cm4gMDsgfQogaW5saW5l
IHZvaWQgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
VHlwZSB0eXBlLCBIYW5kbGUmKSB7IH0KK2lubGluZSBTdHJpbmcgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgVHlwZSB0
eXBlLCBIYW5kbGUmKSB7cmV0dXJuIFN0cmluZygpO30KIGlubGluZSBTYW5kYm94RXh0ZW5zaW9u
Ojp+U2FuZGJveEV4dGVuc2lvbigpIHsgfQogaW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6
aW52YWxpZGF0ZSgpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNp
b246OmNvbnN1bWUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJN
ZW1vcnlTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlT
YW1wbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBs
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5oIgorCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBXZWJNZW1vcnlTYW1wbGVyICpzaGFyZWRNZW1v
cnlTYW1wbGVyID0gMDsKKworV2ViTWVtb3J5U2FtcGxlciogV2ViTWVtb3J5U2FtcGxlcjo6c2hh
cmVkKCkKK3sKKyAgICBpZiAoIXNoYXJlZE1lbW9yeVNhbXBsZXIpCisgICAgICAgIHNoYXJlZE1l
bW9yeVNhbXBsZXIgPSBuZXcgV2ViTWVtb3J5U2FtcGxlcigpOworICAgIHJldHVybiBzaGFyZWRN
ZW1vcnlTYW1wbGVyOworfQorCitXZWJNZW1vcnlTYW1wbGVyOjpXZWJNZW1vcnlTYW1wbGVyKCkg
CisgICAgOiBtX3NhbXBsZVRpbWVyKHRoaXMsICZXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVUaW1l
ckZpcmVkKQorICAgICwgbV9zdG9wVGltZXIodGhpcywgJldlYk1lbW9yeVNhbXBsZXI6OnN0b3BU
aW1lckZpcmVkKQorICAgICwgbV9pc1J1bm5pbmcoZmFsc2UpCisgICAgLCBtX3J1bm5pbmdUaW1l
KDApCit7Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6c3RhcnQoY29uc3QgZG91YmxlIGlu
dGVydmFsKSAKK3sKKyAgICBpZiAobV9pc1J1bm5pbmcpIAorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaW5pdGlhbGl6ZVRlbXBMb2dGaWxlKCk7CisgICAgaW5pdGlhbGl6ZVRpbWVycyhpbnRl
cnZhbCk7Cit9CisKK3ZvaWQgV2ViTWVtb3J5U2FtcGxlcjo6c3RhcnQoY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWxlSGFuZGxlLCBjb25zdCBTdHJpbmcmIHNhbXBs
ZUxvZ0ZpbGVQYXRoLCBjb25zdCBkb3VibGUgaW50ZXJ2YWwpIAoreworICAgIGlmIChtX2lzUnVu
bmluZykgCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgb24gYSBzeXN0
ZW0gd2l0aG91dCBTYW5kYm94RXh0ZW5zaW9uIHRoZSBoYW5kbGUgYW5kIGZpbGVuYW1lIHdpbGwg
YmUgZW1wdHkKKyAgICBpZiAoc2FtcGxlTG9nRmlsZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAg
IHN0YXJ0KGludGVydmFsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAg
aW5pdGlhbGl6ZVNhbmRib3hlZExvZ0ZpbGUoc2FtcGxlTG9nRmlsZUhhbmRsZSwgc2FtcGxlTG9n
RmlsZVBhdGgpOworICAgIGluaXRpYWxpemVUaW1lcnMoaW50ZXJ2YWwpOworICAgCit9CisKK3Zv
aWQgV2ViTWVtb3J5U2FtcGxlcjo6aW5pdGlhbGl6ZVRpbWVycyhkb3VibGUgaW50ZXJ2YWwpCit7
CisgICAgbV9zYW1wbGVUaW1lci5zdGFydFJlcGVhdGluZygxKTsKKyAgICBwcmludGYoIlN0YXJ0
ZWQgbWVtb3J5IHNhbXBsZXIgZm9yIHByb2Nlc3MgJXMiLCBwcm9jZXNzTmFtZSgpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGlmIChpbnRlcnZhbCA+IDApIHsKKyAgICAgICAgbV9zdG9wVGltZXIuc3Rh
cnRPbmVTaG90KGludGVydmFsKTsKKyAgICAgICAgcHJpbnRmKCIgZm9yIGEgaW50ZXJ2YWwgb2Yg
JWcgc2Vjb25kcyIsIGludGVydmFsKTsKKyAgICB9CisgICAgcHJpbnRmKCI7IFNhbXBsZXIgbG9n
IGZpbGUgc3RvcmVkIGF0OiAlc1xuIiwgbV9zYW1wbGVMb2dGaWxlUGF0aC51dGY4KCkuZGF0YSgp
KTsKKyAgICBtX3J1bm5pbmdUaW1lID0gaW50ZXJ2YWw7CisgICAgbV9pc1J1bm5pbmcgPSB0cnVl
OworfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OnN0b3AoKSAKK3sKKyAgICBpZiAoIW1faXNS
dW5uaW5nKSAKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2FtcGxlVGltZXIuc3RvcCgpOworICAg
IG1fc2FtcGxlTG9nRmlsZSA9IDA7CisgICAgcHJpbnRmKCJTdG9wcGVkIG1lbW9yeSBzYW1wbGVy
IGZvciBwcm9jZXNzICVzXG4iLCBwcm9jZXNzTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIC8v
IEZsdXNoIHN0ZG91dCBidWZmZXIgc28gcHl0aG9uIHNjcmlwdCBjYW4gYmUgZ3VhcmFudGVlZCB0
byByZWFkIHVwIHRvIHRoaXMgcG9pbnQuCisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgbV9pc1J1
bm5pbmcgPSBmYWxzZTsKKyAgICAKKyAgICBpZihtX3N0b3BUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3N0b3BUaW1lci5zdG9wKCk7CisgICAgCisgICAgaWYgKG1fc2FtcGxlTG9nU2FuZGJv
eEV4dGVuc2lvbikgeworICAgICAgICBtX3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNpb24tPmludmFs
aWRhdGUoKTsKKyAgICAgICAgbV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uID0gMDsKKyAgICB9
ICAgIAorfQorCitib29sIFdlYk1lbW9yeVNhbXBsZXI6OmlzUnVubmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faXNSdW5uaW5nOworfQorICAgIAordm9pZCBXZWJNZW1vcnlTYW1wbGVyOjpp
bml0aWFsaXplVGVtcExvZ0ZpbGUoKQoreworICAgIG1fc2FtcGxlTG9nRmlsZVBhdGggPSBTdHJp
bmcoKG9wZW5UZW1wb3JhcnlGaWxlKHByb2Nlc3NOYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zYW1w
bGVMb2dGaWxlKSkuZGF0YSgpKTsKKyAgICB3cml0ZUhlYWRlcnMoKTsKK30KKwordm9pZCBXZWJN
ZW1vcnlTYW1wbGVyOjppbml0aWFsaXplU2FuZGJveGVkTG9nRmlsZShjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUsIGNvbnN0IFN0cmluZyYgc2Ft
cGxlTG9nRmlsZVBhdGgpCit7CisgICAgbV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUpOworICAgIGlmICht
X3NhbXBsZUxvZ1NhbmRib3hFeHRlbnNpb24pCisgICAgICAgIG1fc2FtcGxlTG9nU2FuZGJveEV4
dGVuc2lvbi0+Y29uc3VtZSgpOworICAgIG1fc2FtcGxlTG9nRmlsZVBhdGggPSBzYW1wbGVMb2dG
aWxlUGF0aDsKKyAgICBtX3NhbXBsZUxvZ0ZpbGUgPSBvcGVuRmlsZShtX3NhbXBsZUxvZ0ZpbGVQ
YXRoLCBPcGVuRm9yV3JpdGUpOworICAgIHdyaXRlSGVhZGVycygpOworfQorCit2b2lkIFdlYk1l
bW9yeVNhbXBsZXI6OndyaXRlSGVhZGVycygpCit7CisgICAgU3RyaW5nIHByb2Nlc3NEZXRhaWxz
ID0gU3RyaW5nKCJQcm9jZXNzOiAiKTsKKyAgICBwcm9jZXNzRGV0YWlscy5hcHBlbmQocHJvY2Vz
c05hbWUoKSk7CisgICAgcHJvY2Vzc0RldGFpbHMuYXBwZW5kKFN0cmluZygiXG4iKSk7CisgICAg
d3JpdGVUb0ZpbGUobV9zYW1wbGVMb2dGaWxlLCBwcm9jZXNzRGV0YWlscy51dGY4KCkuZGF0YSgp
LCBwcm9jZXNzRGV0YWlscy51dGY4KCkubGVuZ3RoKCkpOworICAgIAorICAgIG1fc2VwYXJhdG9y
ID0gU3RyaW5nKCJcdCIpOyAgICAKKyAgICBTdHJpbmcgaGVhZGVyID0gU3RyaW5nKCk7IAorICAg
IFdlYk1lbW9yeVN0YXRpc3RpY3Mgc3RhdHMgPSBzYW1wbGVXZWJLaXQoKTsKKyAgICBpZiAoIXN0
YXRzLmtleXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Rh
dHMua2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaGVhZGVyLmFwcGVuZChtX3NlcGFy
YXRvcik7CisgICAgICAgICAgICBoZWFkZXIuYXBwZW5kKHN0YXRzLmtleXNbaV0udXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaGVhZGVyLmFwcGVuZChTdHJpbmcoIlxuIikp
OworICAgIHdyaXRlVG9GaWxlKG1fc2FtcGxlTG9nRmlsZSwgaGVhZGVyLnV0ZjgoKS5kYXRhKCks
IGhlYWRlci51dGY4KCkubGVuZ3RoKCkpOworfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OnNh
bXBsZVRpbWVyRmlyZWQoVGltZXI8V2ViTWVtb3J5U2FtcGxlcj4qKQoreworICAgIGFwcGVuZEN1
cnJlbnRNZW1vcnlVc2FnZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUpOyAKK30KKwordm9pZCBXZWJN
ZW1vcnlTYW1wbGVyOjpzdG9wVGltZXJGaXJlZChUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopCit7
CisgICAgaWYgKCFtX2lzUnVubmluZykKKyAgICAgICAgcmV0dXJuOworICAgIHByaW50ZigiJWcg
c2Vjb25kcyBlbGFwc2VkLiBTdG9wcGluZyBtZW1vcnkgc2FtcGxlci4uLlxuIiwgbV9ydW5uaW5n
VGltZSk7CisgICAgc3RvcCgpOworfQorCit2b2lkIFdlYk1lbW9yeVNhbXBsZXI6OmFwcGVuZEN1
cnJlbnRNZW1vcnlVc2FnZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGZpbGUpCit7CisgICAg
Ly8gQ29sbGVjdCBzdGF0aXN0aWNzIGZyb20gYWxsb2NhdG9ycyBhbmQgZ2V0IFJTSVpFIG1ldHJp
YworICAgIFN0cmluZyBzdGF0U3RyaW5nID0gU3RyaW5nKCk7IAorICAgIFdlYk1lbW9yeVN0YXRp
c3RpY3MgbWVtb3J5U3RhdHMgPSBzYW1wbGVXZWJLaXQoKTsKKworICAgIGlmICghbWVtb3J5U3Rh
dHMudmFsdWVzLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0U3RyaW5nLmFwcGVuZChtX3NlcGFy
YXRvcik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWVtb3J5U3RhdHMudmFsdWVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGF0U3RyaW5nLmFwcGVuZChtX3NlcGFyYXRv
cik7CisgICAgICAgICAgICBzdGF0U3RyaW5nLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiJWx1Iiwg
bWVtb3J5U3RhdHMudmFsdWVzW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3RhdFN0cmlu
Zy5hcHBlbmQoU3RyaW5nKCJcbiIpKTsKKyAgICB3cml0ZVRvRmlsZShtX3NhbXBsZUxvZ0ZpbGUs
IHN0YXRTdHJpbmcudXRmOCgpLmRhdGEoKSwgc3RhdFN0cmluZy51dGY4KCkubGVuZ3RoKCkpOwor
fQorCit9CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICBUaGUgTWVtb3J5U2Ft
cGxlciBjbGFzcyBzYW1wbGVzIGEgbnVtYmVyIG9mIGludGVybmFsIGFuZCBleHRlcm5hbCBtZW1v
cnkgCisgKiAgbWV0cmljcyBldmVyeSBzZWNvbmQgd2hpbGUgcnVubmluZy4gU2FtcGxlIGRhdGEg
aXMgd3JpdHRlbiB0byBhIGxvZyBmaWxlLiAKKyAqICBTYW1wbGluZyBvY2N1cnMgb3ZlciBhIGR1
cmF0aW9uIHNwZWNpZmllZCB3aGVuIHN0YXJ0ZWQuIElmIGR1cmF0aW9uIGlzIHNldCAKKyAqICB0
byAwIChkZWZhdWx0KSwgdGhlIG1lbW9yeSBzYW1wbGVyIHdpbGwgcnVuIGluZGVmaW5pdGVseSB1
bnRpbCB0aGUgc3RvcCAKKyAqICBmdW5jdGlvbiBpcyBjYWxsZWQuIE1lbW9yeVNhbXBsZXIgYWxs
b3dzIHRoZSBvcHRpb24gb2Ygc2FtcGxpbmcgImluIHVzZSIgCisgKiAgbWVtb3J5IChjb21taXR0
ZWQgbWVtb3J5IG1pbnVzIGZyZWUgbGlzdCBieXRlIGNvdW50KSBvciBjb21taXR0ZWQgbWVtb3J5
IGZvcgorICogIGFueSBhbGxvY2F0b3Igd2hpY2gga2VlcHMgYSBmcmVlIGxpc3QuIFRoaXMgaW5j
bHVkZXMgRmFzdE1hbGxvYyBhbmQgdGhlIAorICogIEphdmFTY3JpcHRDb3JlIGhlYXAgYXQgdGhp
cyB0aW1lLgorICogIFRoZSBmb2xsb3dpbmcgbWVtb3J5IG1ldHJpY3MgYXJlIHJlY29yZGVkOgor
ICoKKyAqICAgICAgV2ViQ29yZQorICogICAgICAgICAgLSBGYXN0TWFsbG9jIGFsbG9jYXRpb25z
IGJ5dGVzICAgICAgICAgICAgICAoaW4gdXNlIG9yIGNvbW1pdHRlZCkKKyAqICAgICAgSmF2YVNj
cmlwdENvcmUKKyAqICAgICAgICAgIC0gR2FyYmFnZSBjb2xsZWN0b3IgaGVhcCBieXRlcyAgICAg
ICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgICAgICAtIFN0YWNrIGJ5dGVz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0ZWQgb25seSEpCisgKiAgICAg
ICAgICAtIEpJVCBDb2RlIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXR0
ZWQgb25seSEpCisgKiAgICAgIE1hbGxvYyB6b25lcworICogICAgICAgICAgLSBJbiB1c2UgYnl0
ZXMgZm9yIHRoZSBmb2xsb3dpbmcgem9uZXM6CisgKiAgICAgICAgICAgICAgKiBEZWZhdWx0IHpv
bmUgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiB1c2Ugb3IgY29tbWl0dGVkKQorICogICAg
ICAgICAgICAgICogRGlzcENvbiB6b25lICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gdXNl
IG9yIGNvbW1pdHRlZCkKKyAqICAgICAgICAgICAgICAqIFB1cmdhYmxlIHpvbmUgICAgICAgICAg
ICAgICAgICAgICAgICAgKGluIHVzZSBvciBjb21taXR0ZWQpCisgKiAgICAgIFRhc2sgSW5mbwor
ICogICAgICAgICAgLSBSZXNpZGVudCBzaXplIG1lbW9yeSAoUlNJWkUpCisgKi8KKworI2lmbmRl
ZiBXZWJNZW1vcnlTYW1wbGVyX2gKKyNkZWZpbmUgV2ViTWVtb3J5U2FtcGxlcl9oCisKKyNpbmNs
dWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1
Y3QgU3lzdGVtTWFsbG9jU3RhdHM7CisKK3N0cnVjdCBXZWJNZW1vcnlTdGF0aXN0aWNzCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4ga2V5czsKKyAgICBWZWN0b3I8c2l6ZV90PiB2YWx1ZXM7Cit9Owor
ICAgIAorY2xhc3MgV2ViTWVtb3J5U2FtcGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgV2ViTWVtb3J5U2FtcGxlciogc2hhcmVkKCk7CisgICAgdm9pZCBz
dGFydChjb25zdCBkb3VibGUgaW50ZXJ2YWw9MCk7CisgICAgdm9pZCBzdGFydChjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBkb3VibGUgaW50ZXJ2
YWw9MCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc1J1bm5pbmcoKSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgV2ViTWVtb3J5U2FtcGxlcigpOworICAgIH5XZWJNZW1vcnlTYW1w
bGVyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplVGVtcExvZ0ZpbGUoKTsKKyAgICB2b2lk
IGluaXRpYWxpemVTYW5kYm94ZWRMb2dGaWxlKGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgd3JpdGVIZWFkZXJzKCk7CisgICAgdm9pZCBp
bml0aWFsaXplVGltZXJzKGRvdWJsZSk7CisgICAgdm9pZCBzYW1wbGVUaW1lckZpcmVkKFdlYkNv
cmU6OlRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+Kik7CisgICAgdm9pZCBzdG9wVGltZXJGaXJlZChX
ZWJDb3JlOjpUaW1lcjxXZWJNZW1vcnlTYW1wbGVyPiopOworICAgIHZvaWQgYXBwZW5kQ3VycmVu
dE1lbW9yeVVzYWdlVG9GaWxlKFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSYpOworICAgIAor
ICAgIFN5c3RlbU1hbGxvY1N0YXRzIHNhbXBsZVN5c3RlbU1hbGxvYygpIGNvbnN0OworICAgIHNp
emVfdCBzYW1wbGVQcm9jZXNzQ29tbWl0dGVkQnl0ZXMoKSBjb25zdDsKKyAgICBXZWJNZW1vcnlT
dGF0aXN0aWNzIHNhbXBsZVdlYktpdCgpIGNvbnN0OworICAgIFN0cmluZyBwcm9jZXNzTmFtZSgp
IGNvbnN0OworICAgIAorICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX3NhbXBsZUxv
Z0ZpbGU7CisgICAgU3RyaW5nIG1fc2FtcGxlTG9nRmlsZVBhdGg7CisgICAgU3RyaW5nIG1fc2Vw
YXJhdG9yOworICAgIFdlYkNvcmU6OlRpbWVyPFdlYk1lbW9yeVNhbXBsZXI+IG1fc2FtcGxlVGlt
ZXI7CisgICAgV2ViQ29yZTo6VGltZXI8V2ViTWVtb3J5U2FtcGxlcj4gbV9zdG9wVGltZXI7Cisg
ICAgYm9vbCBtX2lzUnVubmluZzsKKyAgICBkb3VibGUgbV9ydW5uaW5nVGltZTsKKyAgICBSZWZQ
dHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW1wbGVMb2dTYW5kYm94RXh0ZW5zaW9uOworfTsKKwor
fQorCisjZW5kaWYKSW5kZXg6IFdlYktpdDIvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5zaW9uTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5zaW9uTWFj
Lm1tCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5z
aW9uTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDMwIEBAIHZvaWQgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnMKICAgICBBU1NFUlQoIWhhbmRsZS5tX3NhbmRi
b3hFeHRlbnNpb24pOwogICAgIGhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24gPSBXS1NhbmRib3hF
eHRlbnNpb25DcmVhdGUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgd2tT
YW5kYm94RXh0ZW5zaW9uVHlwZSh0eXBlKSk7CiB9CisgICAgCitTdHJpbmcgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwg
VHlwZSB0eXBlLCBIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NhbmRi
b3hFeHRlbnNpb24pOworICAgIAorICAgIFZlY3RvcjxjaGFyPiBwYXRoKFBBVEhfTUFYKTsKKyAg
ICBpZiAoIWNvbmZzdHIoX0NTX0RBUldJTl9VU0VSX1RFTVBfRElSLCBwYXRoLmRhdGEoKSwgcGF0
aC5zaXplKCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgCisgICAgLy8gU2hyaW5r
IHRoZSB2ZWN0b3IuICAgCisgICAgcGF0aC5zaHJpbmsoc3RybGVuKHBhdGguZGF0YSgpKSk7Cisg
ICAgQVNTRVJUKHBhdGgubGFzdCgpID09ICcvJyk7CisgICAgCisgICAgLy8gQXBwZW5kIHRoZSBm
aWxlIG5hbWUuICAgIAorICAgIHBhdGguYXBwZW5kKHByZWZpeC51dGY4KCkuZGF0YSgpLCBwcmVm
aXgubGVuZ3RoKCkpOworICAgIHBhdGguYXBwZW5kKCdcMCcpOworICAgIAorICAgIGhhbmRsZS5t
X3NhbmRib3hFeHRlbnNpb24gPSBXS1NhbmRib3hFeHRlbnNpb25DcmVhdGUoZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGguZGF0YSgpKS5kYXRhKCksIHdrU2FuZGJveEV4dGVuc2lvblR5cGUo
dHlwZSkpOworCisgICAgaWYgKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSB7CisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZyhwYXRoLmRhdGEoKSk7
Cit9CiAKIFNhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNpb24oY29uc3QgSGFuZGxlJiBo
YW5kbGUpCiAgICAgOiBtX3NhbmRib3hFeHRlbnNpb24oaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lv
bikKSW5kZXg6IFdlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICovCisKKyNpbmNsdWRlICJXZWJNZW1vcnlTYW1wbGVyLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+
CisjaW5jbHVkZSA8bWFjaC90YXNrLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3R5cGVzLmg+Cisj
aW5jbHVkZSA8bWFsbG9jL21hbGxvYy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1
c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0cnVjdCBT
eXN0ZW1NYWxsb2NTdGF0cyB7CisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBkZWZhdWx0TWFsbG9j
Wm9uZVN0YXRzOworICAgIG1hbGxvY19zdGF0aXN0aWNzX3QgZGlzcGF0Y2hDb250aW51YXRpb25N
YWxsb2Nab25lU3RhdHM7CisgICAgbWFsbG9jX3N0YXRpc3RpY3NfdCBwdXJnZWFibGVNYWxsb2Na
b25lU3RhdHM7Cit9OworCitTeXN0ZW1NYWxsb2NTdGF0cyBXZWJNZW1vcnlTYW1wbGVyOjpzYW1w
bGVTeXN0ZW1NYWxsb2MoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0
TWFsbG9jWm9uZU5hbWUgPSAiRGVmYXVsdE1hbGxvY1pvbmUiOworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVOYW1lID0gIkRpc3BhdGNoQ29udGlu
dWF0aW9ucyI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHB1cmdlYWJsZU1hbGxvY1pvbmVOYW1l
ID0gIkRlZmF1bHRQdXJnZWFibGVNYWxsb2Nab25lIjsKKyAgICBTeXN0ZW1NYWxsb2NTdGF0cyBt
YWxsb2NTdGF0czsKKyAgICB2bV9hZGRyZXNzX3QqIHpvbmVzOworICAgIHVuc2lnbmVkIGNvdW50
OworICAgIAorICAgIC8vIFplcm8gb3V0IHRoZSBzdHJ1Y3R1cmVzIGluIGNhc2UgYSB6b25lIGlz
IG1pc3NpbmcKKyAgICBtYWxsb2Nfc3RhdGlzdGljc190IHN0YXRzOworICAgIHN0YXRzLmJsb2Nr
c19pbl91c2UgPSAwOworICAgIHN0YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICBzdGF0cy5tYXhf
c2l6ZV9pbl91c2UgPSAwOworICAgIHN0YXRzLnNpemVfYWxsb2NhdGVkID0gMDsKKyAgICBtYWxs
b2NTdGF0cy5kZWZhdWx0TWFsbG9jWm9uZVN0YXRzID0gc3RhdHM7CisgICAgbWFsbG9jU3RhdHMu
ZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICBtYWxsb2NT
dGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAKKyAgICBtYWxsb2Nf
Z2V0X2FsbF96b25lcyhtYWNoX3Rhc2tfc2VsZigpLCAwLCAmem9uZXMsICZjb3VudCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGNvbnN0
IGNoYXIqIG5hbWUgPSBtYWxsb2NfZ2V0X3pvbmVfbmFtZShyZWludGVycHJldF9jYXN0PG1hbGxv
Y196b25lX3QqPih6b25lc1tpXSkpKSB7CisgICAgICAgICAgICBzdGF0cy5ibG9ja3NfaW5fdXNl
ID0gMDsKKyAgICAgICAgICAgIHN0YXRzLnNpemVfaW5fdXNlID0gMDsKKyAgICAgICAgICAgIHN0
YXRzLm1heF9zaXplX2luX3VzZSA9IDA7CisgICAgICAgICAgICBzdGF0cy5zaXplX2FsbG9jYXRl
ZCA9IDA7CQorICAgICAgICAgICAgbWFsbG9jX3pvbmVfc3RhdGlzdGljcyhyZWludGVycHJldF9j
YXN0PG1hbGxvY196b25lX3QqPih6b25lc1tpXSksICZzdGF0cyk7CisgICAgICAgICAgICBpZiAo
IXN0cmNtcChuYW1lLCBkZWZhdWx0TWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1h
bGxvY1N0YXRzLmRlZmF1bHRNYWxsb2Nab25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCFzdHJjbXAobmFtZSwgZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lTmFtZSkp
CisgICAgICAgICAgICAgICAgbWFsbG9jU3RhdHMuZGlzcGF0Y2hDb250aW51YXRpb25NYWxsb2Na
b25lU3RhdHMgPSBzdGF0czsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgcHVy
Z2VhYmxlTWFsbG9jWm9uZU5hbWUpKQorICAgICAgICAgICAgICAgIG1hbGxvY1N0YXRzLnB1cmdl
YWJsZU1hbGxvY1pvbmVTdGF0cyA9IHN0YXRzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBtYWxsb2NTdGF0czsKK30KKworc2l6ZV90IFdlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVByb2Nl
c3NDb21taXR0ZWRCeXRlcygpIGNvbnN0Cit7CisgICAgdGFza19iYXNpY19pbmZvXzY0IHRhc2tJ
bmZvOworICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgY291bnQgPSBUQVNLX0JBU0lDX0lORk9f
NjRfQ09VTlQ7CisgICAgdGFza19pbmZvKG1hY2hfdGFza19zZWxmKCksIFRBU0tfQkFTSUNfSU5G
T182NCwgcmVpbnRlcnByZXRfY2FzdDx0YXNrX2luZm9fdD4oJnRhc2tJbmZvKSwgJmNvdW50KTsK
KyAgICByZXR1cm4gdGFza0luZm8ucmVzaWRlbnRfc2l6ZTsKK30KKworU3RyaW5nIFdlYk1lbW9y
eVNhbXBsZXI6OnByb2Nlc3NOYW1lKCkgY29uc3QKK3sKKyAgICBOU1N0cmluZyAqYXBwTmFtZSA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CisgICAgaWYgKCFhcHBO
YW1lKQorICAgICAgICBhcHBOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9j
ZXNzTmFtZV07CisgICAgcmV0dXJuIFN0cmluZyhhcHBOYW1lKTsKK30KKyAgCitXZWJNZW1vcnlT
dGF0aXN0aWNzIFdlYk1lbW9yeVNhbXBsZXI6OnNhbXBsZVdlYktpdCgpIGNvbnN0Cit7CisgICAg
c2l6ZV90IHRvdGFsQnl0ZXNJblVzZSA9IDAsIHRvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOyAKKyAg
ICAKKyAgICBXZWJNZW1vcnlTdGF0aXN0aWNzIHdlYktpdE1lbW9yeVN0YXRzOworICAgIAorICAg
IEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFs
bG9jU3RhdGlzdGljcygpOworICAgIHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNJblVzZSA9IGZhc3RN
YWxsb2NTdGF0aXN0aWNzLmNvbW1pdHRlZFZNQnl0ZXMgLSBmYXN0TWFsbG9jU3RhdGlzdGljcy5m
cmVlTGlzdEJ5dGVzOworICAgIHNpemVfdCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQgPSBmYXN0
TWFsbG9jU3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVzOworICAgIHRvdGFsQnl0ZXNJblVzZSAr
PSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RN
YWxsb2NCeXRlc0NvbW1pdHRlZDsKKyAgICAKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEhlYXA6OlN0YXRpc3RpY3MgaGVhcE1lbW9yeVN0YXRzID0gaGVhcFN0
YXRpc3RpY3MoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBzaXplX3Qg
anNjSGVhcEJ5dGVzSW5Vc2UgPSBoZWFwTWVtb3J5U3RhdHMuc2l6ZSAtIGhlYXBNZW1vcnlTdGF0
cy5mcmVlOworICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBoZWFwTWVtb3J5U3Rh
dHMuc2l6ZTsKKyAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5dGVzSW5Vc2U7CisgICAg
dG90YWxCeXRlc0NvbW1pdHRlZCArPSBqc2NIZWFwQnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAg
R2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0
YXRpc3RpY3MoKTsKKyAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZ2xvYmFsTWVtb3J5U3RhdHMuc3Rh
Y2tCeXRlcyArIGdsb2JhbE1lbW9yeVN0YXRzLkpJVEJ5dGVzOworICAgIHRvdGFsQnl0ZXNDb21t
aXR0ZWQgKz0gZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRlcyArIGdsb2JhbE1lbW9yeVN0YXRz
LkpJVEJ5dGVzOworICAgIAorICAgIFN5c3RlbU1hbGxvY1N0YXRzIHN5c3RlbVN0YXRzID0gc2Ft
cGxlU3lzdGVtTWFsbG9jKCk7CisgICAgCisgICAgc2l6ZV90IGRlZmF1bHRNYWxsb2Nab25lQnl0
ZXNJblVzZSA9IHN5c3RlbVN0YXRzLmRlZmF1bHRNYWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7
CisgICAgc2l6ZV90IGRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBz
eXN0ZW1TdGF0cy5kaXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVTdGF0cy5zaXplX2luX3Vz
ZTsKKyAgICBzaXplX3QgcHVyZ2VhYmxlTWFsbG9jWm9uZUJ5dGVzSW5Vc2UgPSBzeXN0ZW1TdGF0
cy5wdXJnZWFibGVNYWxsb2Nab25lU3RhdHMuc2l6ZV9pbl91c2U7CisgICAgc2l6ZV90IGRlZmF1
bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5kZWZhdWx0TWFsbG9jWm9u
ZVN0YXRzLnNpemVfYWxsb2NhdGVkOworICAgIHNpemVfdCBkaXNwYXRjaENvbnRpbnVhdGlvbk1h
bGxvY1pvbmVCeXRlc0NvbW1pdHRlZCA9IHN5c3RlbVN0YXRzLmRpc3BhdGNoQ29udGludWF0aW9u
TWFsbG9jWm9uZVN0YXRzLnNpemVfYWxsb2NhdGVkOworICAgIHNpemVfdCBwdXJnZWFibGVNYWxs
b2Nab25lQnl0ZXNDb21taXR0ZWQgPSBzeXN0ZW1TdGF0cy5wdXJnZWFibGVNYWxsb2Nab25lU3Rh
dHMuc2l6ZV9hbGxvY2F0ZWQ7CisgICAgdG90YWxCeXRlc0luVXNlICs9IGRlZmF1bHRNYWxsb2Na
b25lQnl0ZXNJblVzZSArIGRpc3BhdGNoQ29udGludWF0aW9uTWFsbG9jWm9uZUJ5dGVzSW5Vc2Ug
KyBwdXJnZWFibGVNYWxsb2Nab25lQnl0ZXNJblVzZTsKKyAgICB0b3RhbEJ5dGVzQ29tbWl0dGVk
ICs9IGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQgKyBkaXNwYXRjaENvbnRpbnVhdGlv
bk1hbGxvY1pvbmVCeXRlc0NvbW1pdHRlZCArIHB1cmdlYWJsZU1hbGxvY1pvbmVCeXRlc0NvbW1p
dHRlZDsKKyAgICAKKyAgICBzaXplX3QgcmVzaWRlbnRTaXplID0gc2FtcGxlUHJvY2Vzc0NvbW1p
dHRlZEJ5dGVzKCk7CisKKyAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAg
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJUaW1lc3RhbXAiKSk7
CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChub3cpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiVG90YWwgQnl0ZXMgb2YgTWVtb3J5IEluIFVz
ZSIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHRvdGFsQnl0ZXNJblVz
ZSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJGYXN0IE1hbGxv
YyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZmFz
dE1hbGxvY0J5dGVzSW5Vc2UpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0
cmluZygiRGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0
cy52YWx1ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNJblVzZSk7CisgICAgd2ViS2l0
TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJEaXNwYXRjaCBDb250aW51YXRpb24gTWFs
bG9jIFpvbmUgQnl0ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChk
aXNwYXRjaENvbnRpbnVhdGlvbk1hbGxvY1pvbmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1v
cnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIlB1cmdlYWJsZSBNYWxsb2MgWm9uZSBCeXRlcyIp
KTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKHB1cmdlYWJsZU1hbGxvY1pv
bmVCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmco
IkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMu
YXBwZW5kKGpzY0hlYXBCeXRlc0luVXNlKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFw
cGVuZChTdHJpbmcoIlRvdGFsIEJ5dGVzIG9mIENvbW1pdHRlZCBNZW1vcnkiKSk7CisgICAgd2Vi
S2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZCh0b3RhbEJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3
ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChTdHJpbmcoIkZhc3QgTWFsbG9jIFpvbmUgQnl0
ZXMiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVzLmFwcGVuZChmYXN0TWFsbG9jQnl0
ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygi
RGVmYXVsdCBNYWxsb2MgWm9uZSBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1
ZXMuYXBwZW5kKGRlZmF1bHRNYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiRGlzcGF0Y2ggQ29udGludWF0aW9uIE1hbGxv
YyBab25lIEJ5dGVzIikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZGlz
cGF0Y2hDb250aW51YXRpb25NYWxsb2Nab25lQnl0ZXNDb21taXR0ZWQpOworICAgIHdlYktpdE1l
bW9yeVN0YXRzLmtleXMuYXBwZW5kKFN0cmluZygiUHVyZ2VhYmxlIE1hbGxvYyBab25lIEJ5dGVz
IikpOworICAgIHdlYktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQocHVyZ2VhYmxlTWFsbG9j
Wm9uZUJ5dGVzQ29tbWl0dGVkKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVuZChT
dHJpbmcoIkphdmFTY3JpcHQgSGVhcCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52
YWx1ZXMuYXBwZW5kKGpzY0hlYXBCeXRlc0NvbW1pdHRlZCk7CisgICAgd2ViS2l0TWVtb3J5U3Rh
dHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0IFN0YWNrIEJ5dGVzIikpOworICAgIHdl
YktpdE1lbW9yeVN0YXRzLnZhbHVlcy5hcHBlbmQoZ2xvYmFsTWVtb3J5U3RhdHMuc3RhY2tCeXRl
cyk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMua2V5cy5hcHBlbmQoU3RyaW5nKCJKYXZhU2NyaXB0
IEpJVCBCeXRlcyIpKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy52YWx1ZXMuYXBwZW5kKGdsb2Jh
bE1lbW9yeVN0YXRzLkpJVEJ5dGVzKTsKKyAgICB3ZWJLaXRNZW1vcnlTdGF0cy5rZXlzLmFwcGVu
ZChTdHJpbmcoIlJlc2lkZW50IFNpemUiKSk7CisgICAgd2ViS2l0TWVtb3J5U3RhdHMudmFsdWVz
LmFwcGVuZChyZXNpZGVudFNpemUpOworICAgIAorICAgIHJldHVybiB3ZWJLaXRNZW1vcnlTdGF0
czsKK30KKyAgICAKK30KKwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHJldmlzaW9u
IDc1MDIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgor
I2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgog
I2luY2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2Fn
ZUtpbmRzLmgiCkBAIC0zNiwxMiArMzcsMTQgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUg
IldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01h
bmFnZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiAjaWZu
ZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KQEAgLTg2
LDYgKzg5LDggQEAgV2ViQ29udGV4dDo6V2ViQ29udGV4dChQcm9jZXNzTW9kZWwgcHJvYwogICAg
ICwgbV9jYWNoZU1vZGVsKENhY2hlTW9kZWxEb2N1bWVudFZpZXdlcikKICAgICAsIG1fY2xlYXJS
ZXNvdXJjZUNhY2hlc0Zvck5ld1dlYlByb2Nlc3MoZmFsc2UpCiAgICAgLCBtX2NsZWFyQXBwbGlj
YXRpb25DYWNoZUZvck5ld1dlYlByb2Nlc3MoZmFsc2UpCisgICAgLCBtX21lbW9yeVNhbXBsZXJF
bmFibGVkKGZhbHNlKQorICAgICwgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwoMTQwMC4wKQogICAg
ICwgbV9kYXRhYmFzZU1hbmFnZXJQcm94eShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Y3JlYXRl
KHRoaXMpKQogI2lmIFBMQVRGT1JNKFdJTikKICAgICAsIG1fc2hvdWxkUGFpbnROYXRpdmVDb250
cm9scyh0cnVlKQpAQCAtMTk1LDYgKzIwMCwxOSBAQCB2b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NE
aWRGaW5pc2hMYXVuY2hpCiAgICAgQVNTRVJUX1VOVVNFRChwcm9jZXNzLCBwcm9jZXNzID09IG1f
cHJvY2Vzcyk7CiAKICAgICBtX3Zpc2l0ZWRMaW5rUHJvdmlkZXIucHJvY2Vzc0RpZEZpbmlzaExh
dW5jaGluZygpOworICAgIAorICAgIC8vIFNvbWV0aW1lcyB0aGUgbWVtb3J5U2FtcGxlciBnZXRz
IGluaXRpYWxpemVkIGFmdGVyIHByb2Nlc3MgaW5pdGlhbGl6YXRpb24gaGFzIGhhcHBlbmVkIGJ1
dCBiZWZvcmUgdGhlIHByb2Nlc3MgaGFzIGZpbmlzaGVkIGxhdW5jaGluZworICAgIC8vIHNvIGNo
ZWNrIGlmIGl0IG5lZWRzIHRvIGJlIHN0YXJ0ZWQgaGVyZQorICAgIGlmKG1fbWVtb3J5U2FtcGxl
ckVuYWJsZWQpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ1Nh
bmRib3hIYW5kbGU7CisgICAgICAgIC8vIHdheSB0byBnZXQgbmFtZSBvZiBwcm9jZXNzIGZyb20g
VUkgc2lkZT8KKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBub3cgPSBXVEY6OmN1cnJlbnRUaW1l
KCk7CisgICAgICAgIFN0cmluZyBzYW1wbGVMb2dGaWxlUGF0aCA9IFN0cmluZzo6Zm9ybWF0KCJX
ZWJQcm9jZXNzJWxsdSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihub3cpKTsKKyAgICAgICAgc2Ft
cGxlTG9nRmlsZVBhdGggPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3Jh
cnlGaWxlKHNhbXBsZUxvZ0ZpbGVQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpXcml0ZU9ubHksIHNh
bXBsZUxvZ1NhbmRib3hIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBsZXIoc2FtcGxlTG9nU2FuZGJv
eEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIG1fbWVtb3J5U2FtcGxlckludGVydmFsKSwgMCk7
CisgICAgfQogfQogCiB2b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNz
UHJveHkqIHByb2Nlc3MpCkBAIC01MjEsNSArNTM5LDQ2IEBAIHZvaWQgV2ViQ29udGV4dDo6Y2xl
YXJBcHBsaWNhdGlvbkNhY2hlKCkKIAogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6Q2xlYXJBcHBsaWNhdGlvbkNhY2hlKCksIDApOwogfQorICAgIAordm9pZCBXZWJD
b250ZXh0OjpzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgZG91YmxlIGludGVydmFsKQoreyAgICAK
KyAgICAvLyBGb3IgbmV3IFdlYlByb2Nlc3NlcyB3ZSB3aWxsIGFsc28gd2FudCB0byBzdGFydCB0
aGUgTWVtb3J5IFNhbXBsZXIKKyAgICBtX21lbW9yeVNhbXBsZXJFbmFibGVkID0gdHJ1ZTsKKyAg
ICBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCA9IGludGVydmFsOworICAgIAorICAgIC8vIEZvciBV
SVByb2Nlc3MKKyNpZiBFTkFCTEUoTUVNT1JZX1NBTVBMRVIpCisgICAgV2ViTWVtb3J5U2FtcGxl
cjo6c2hhcmVkKCktPnN0YXJ0KGludGVydmFsKTsKKyNlbmRpZgorICAgIAorICAgIGlmICghaGFz
VmFsaWRQcm9jZXNzKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBG
b3IgV2ViUHJvY2VzcworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW1wbGVMb2dTYW5k
Ym94SGFuZGxlOyAgICAKKyAgICBkb3VibGUgbm93ID0gV1RGOjpjdXJyZW50VGltZSgpOworICAg
IFN0cmluZyBzYW1wbGVMb2dGaWxlUGF0aCA9IFN0cmluZzo6Zm9ybWF0KCJXZWJQcm9jZXNzJWxs
dSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihub3cpKTsKKyAgICBzYW1wbGVMb2dGaWxlUGF0aCA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoc2FtcGxlTG9n
RmlsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OldyaXRlT25seSwgc2FtcGxlTG9nU2FuZGJveEhh
bmRsZSk7CisgICAgCisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpT
dGFydE1lbW9yeVNhbXBsZXIoc2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBh
dGgsIGludGVydmFsKSwgMCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBs
ZXIoKQoreyAgICAKKyAgICAvLyBGb3IgV2ViUHJvY2VzcworICAgIG1fbWVtb3J5U2FtcGxlckVu
YWJsZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBGb3IgVUlQcm9jZXNzCisjaWYgRU5BQkxFKE1F
TU9SWV9TQU1QTEVSKQorICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7Cisj
ZW5kaWYKKyAgICAKKyAgICBpZiAoIWhhc1ZhbGlkUHJvY2VzcygpKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTdG9wTWVtb3J5U2FtcGxlcigpLCAwKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCShyZXZpc2lvbiA3NTAyMikKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw5IEBAIHB1
YmxpYzoKICAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
TW9kZWw7IH0KICAgICB2b2lkIGNsZWFyUmVzb3VyY2VDYWNoZXMoKTsKICAgICB2b2lkIGNsZWFy
QXBwbGljYXRpb25DYWNoZSgpOworICAgIAorICAgIHZvaWQgc3RhcnRNZW1vcnlTYW1wbGVyKGNv
bnN0IGRvdWJsZSBpbnRlcnZhbCk7CisgICAgdm9pZCBzdG9wTWVtb3J5U2FtcGxlcigpOwogCiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgc2V0U2hvdWxkUGFpbnROYXRpdmVDb250cm9scyhi
b29sKTsKQEAgLTE4Niw2ICsxODksOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2NsZWFyUmVz
b3VyY2VDYWNoZXNGb3JOZXdXZWJQcm9jZXNzOwogICAgIGJvb2wgbV9jbGVhckFwcGxpY2F0aW9u
Q2FjaGVGb3JOZXdXZWJQcm9jZXNzOworICAgIAorICAgIGJvb2wgbV9tZW1vcnlTYW1wbGVyRW5h
YmxlZDsKKyAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWw7CiAKICAgICBSZWZQdHI8
V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+IG1fZGF0YWJhc2VNYW5hZ2VyUHJveHk7CiAKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24gNzUwMjIpCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsMyArMTU1LDEzIEBAIFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldERhdGFiYXMK
IHsKICAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNvbnRleHRSZWYpLT5kYXRhYmFzZU1hbmFnZXJQ
cm94eSgpKTsKIH0KKwordm9pZCBXS0NvbnRleHRTdGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIFdLRG91YmxlUmVmIGludGVydmFsKQoreworICAgIHRvSW1wbChjb250
ZXh0UmVmKS0+c3RhcnRNZW1vcnlTYW1wbGVyKHRvSW1wbChpbnRlcnZhbCktPnZhbHVlKCkpOwor
fQorCit2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmKQoreworICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c3RvcE1lbW9yeVNhbXBsZXIoKTsKK30K
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCShyZXZpc2lvbiA3NTAyMikKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNiArMTE3LDkgQEAgV0tfRVhQT1JUIFdLQ2FjaGVNb2RlbCBXS0NvbnRleHRHZXRDYWNoZQog
CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclJlc291cmNlQ2FjaGVzKFdLQ29udGV4dFJl
ZiBjb250ZXh0KTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQXBwbGljYXRpb25DYWNo
ZShXS0NvbnRleHRSZWYgY29udGV4dCk7CisgICAgCitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRT
dGFydE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG91YmxlUmVmIGludGVy
dmFsKTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4
dFJlZiBjb250ZXh0KTsKIAogV0tfRVhQT1JUIFdLRGF0YWJhc2VNYW5hZ2VyUmVmIFdLQ29udGV4
dEdldERhdGFiYXNlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKSW5kZXg6IFdlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NTAyMikKKysr
IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjIsNiArMjYyLDkgQEAKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJl
ZmVyZW5jZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4REMy
RUY1MzA0ODZBNjk0MDA5OEIyMTYgLyogSW5mb1BsaXN0LnN0cmluZ3MgaW4gUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OUMxNjY2RkU4NDExNThDMDJBQUMw
NyAvKiBJbmZvUGxpc3Quc3RyaW5ncyAqLzsgfTsKIAkJOERDMkVGNTcwNDg2QTY5NDAwOThCMjE2
IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDEwNThDN0IxRkVBNTU4NUUxMUNBMkNCQiAvKiBDb2NvYS5mcmFtZXdvcmsg
Ki87IH07CisJCTkwOTg1NEVDMTJCQzRFMTcwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU4
MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLzsgfTsKKwkJOTA5ODU0
RUQxMkJDNEUxODAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU5MTJCQzI0OEIwMDA3OTlCNiAv
KiBXZWJNZW1vcnlTYW1wbGVyLmggKi87IH07CisJCTkwOTg1NEVFMTJCQzRFMTgwMDBBRDA4MCAv
KiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkwNTYyMEU1MTJCQzI0NzYwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1w
bGVyLm1hYy5tbSAqLzsgfTsKIAkJOTM1RUVCOUIxMjc3NjE3QzAwMzMyMkI4IC8qIFdLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM1RUVCOTgxMjc3NjE2RDAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0Zvcndh
cmRMaXN0SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzNUVFQjlFMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVF
RUI5NTEyNzc2MTZEMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwICovOyB9
OwogCQk5MzVFRUI5RjEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUVFQjk2
MTI3NzYxNkQwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NDMsNiArOTQ2LDkgQEAK
IAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThEQzJFRjVBMDQ4NkE2OTQwMDk4QjIxNiAvKiBJ
bmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REMyRUY1QjA0ODZBNjk0MDA5OEIyMTYgLyog
V2ViS2l0Mi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBX
ZWJLaXQyLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJ
OTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTWVtb3J5U2FtcGxlci5tYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwNTYyMEU4MTJCQzI0OEIwMDA3OTlC
NiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYk1lbW9yeVNhbXBsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZW1vcnlTYW1wbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzNUVFQjhGMTI3NzYxNUQwMDMzMjJCOCAvKiBJbmplY3RlZEJ1
bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzNUVFQjkwMTI3NzYxNUQwMDMzMjJCOCAvKiBJbmplY3RlZEJ1bmRsZUJh
Y2tGb3J3YXJkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3Rl
ZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzVFRUI5MTEyNzc2MTVEMDAzMzIyQjggLyogSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVu
ZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNjYzLDYgKzE2NjksOCBAQAogCQkJCUJDQ0Y2QUJBMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJ
bWFnZS5jcHAgKi8sCiAJCQkJQkNDRjZBQkIxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdlLmgg
Ki8sCiAJCQkJQzAzMzdERDIxMjdBMkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQuY3Bw
ICovLAorCQkJCTkwNTYyMEU4MTJCQzI0OEIwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLmNw
cCAqLywKKwkJCQk5MDU2MjBFOTEyQkMyNDhCMDAwNzk5QjYgLyogV2ViTWVtb3J5U2FtcGxlci5o
ICovLAogCQkJCUMwMzM3REFGMTI3QTI4RDAwMDhGRjRGNCAvKiBXZWJNb3VzZUV2ZW50LmNwcCAq
LywKIAkJCQlCQ0Y2OUY5ODExNzZDRUQ2MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGFTdG9y
ZS5oICovLAogCQkJCUJDMzNERDY3MTIzODQ2NDYwMDM2MEYzRiAvKiBXZWJOdW1iZXIuaCAqLywK
QEAgLTIxNTQsNiArMjE2Miw3IEBACiAJCQkJQkNFMjMyNjIxMjJDNkNGMzAwRDVDMzVBIC8qIFdl
YkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSAqLywKIAkJCQlCQzExMUI1QjExMkY2Mjk4MDAzMzdC
QUIgLyogV2ViRXZlbnRGYWN0b3J5LmggKi8sCiAJCQkJQkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFC
IC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLywKKwkJCQk5MDU2MjBFNTEyQkMyNDc2MDAwNzk5QjYg
LyogV2ViTWVtb3J5U2FtcGxlci5tYWMubW0gKi8sCiAJCQkJQkNFMjMxQzAxMjJDNDY2RTAwRDVD
MzVBIC8qIFdlYlVSTFJlcXVlc3RNYWMubW0gKi8sCiAJCQkJQkM5MEExRDUxMjJERDY2QTAwQ0M4
QzUwIC8qIFdlYlVSTFJlc3BvbnNlTWFjLm1tICovLAogCQkJCTFBQUI0QUE5MTI5NkYxNTQwMDIz
OTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uTWFjLm1tICovLApAQCAtMjgyOSw2ICsyODM4LDcgQEAK
IAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzg1OEEyMDEyQzAzNTdCMDBFREVCMkUgLyogV2ViUmVzb3VyY2VMb2FkQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4
dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkwOTg1NEVEMTJCQzRFMTgwMDBBRDA4MCAv
KiBXZWJNZW1vcnlTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MUFCNTEyQzAyRUM0
MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2NzJE
MTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDQ0Y2QUJEMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMjYzLDYgKzMyNzMsOCBAQAogCQkJCTFBNEE5QzlBMTJCODIxQ0QwMDhGRTk4NCAvKiBO
ZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDODU4QTIxMTJD
MDM1N0IwMEVERUIyRSAvKiBXZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFBNDE3RUYxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJOTA5ODU0RUMxMkJDNEUxNzAwMEFEMDgwIC8qIFdlYk1lbW9yeVNhbXBs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTA5ODU0RUUxMkJDNEUxODAwMEFEMDgwIC8qIFdl
Yk1lbW9yeVNhbXBsZXIubWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjY3MzMxMkM3RjE1
QzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0NGNkFCQzEyQzkxRUY5MDA4RjlDMzUgLyogV2ViSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDRjZBQzIxMkM5MUYzNDAwOEY5QzM1IC8qIFdLSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA3NTAyMikKKysrIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAg
KzMxLDEyIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVNZXNzYWdlS2luZHMuaCIKICNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgiCiAjaW5jbHVkZSAiUnVuTG9v
cC5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJDb250ZXh0
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRl
ICJXZWJEYXRhYmFzZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUg
IldlYk1lbW9yeVNhbXBsZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oIgpAQCAtNjExLDYgKzYxMywyMCBAQCB2b2lkIFdlYlByb2Nlc3M6OmNhbmNlbERvd25sb2Fk
KHVpbnQ2NF90CiAgICAgRG93bmxvYWRNYW5hZ2VyOjpzaGFyZWQoKS5jYW5jZWxEb3dubG9hZChk
b3dubG9hZElEKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzOjpzdGFydE1lbW9yeVNhbXBsZXIoY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWxlSGFuZGxlLCBjb25zdCBT
dHJpbmcmIHNhbXBsZUxvZ0ZpbGVQYXRoLCBjb25zdCBkb3VibGUgaW50ZXJ2YWwpCit7CisjaWYg
RU5BQkxFKE1FTU9SWV9TQU1QTEVSKSAgICAKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQo
KS0+c3RhcnQoc2FtcGxlTG9nRmlsZUhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFs
KTsKKyNlbmRpZgorfQorICAgIAordm9pZCBXZWJQcm9jZXNzOjpzdG9wTWVtb3J5U2FtcGxlcigp
Cit7CisjaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQorICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNo
YXJlZCgpLT5zdG9wKCk7CisjZW5kaWYKK30KKwogdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hl
Y2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiB7CiAg
ICAgbV90ZXh0Q2hlY2tlclN0YXRlID0gdGV4dENoZWNrZXJTdGF0ZTsKSW5kZXg6IFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuaAkocmV2aXNpb24gNzUwMjIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2Fj
aGVNb2RlbC5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkRyYXdpbmdB
cmVhLmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlZE1l
bW9yeS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKICNpbmNsdWRlICJWaXNpdGVk
TGlua1RhYmxlLmgiCkBAIC0xMzMsNiArMTM0LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRm
b3JtQ2xlYXJSZXNvdXJjZUNhY2hlcygpOwogICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkNhY2hl
KCk7CiAKKyAgICB2b2lkIHN0YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBkb3VibGUpOworICAgIHZvaWQgc3RvcE1l
bW9yeVNhbXBsZXIoKTsKKwogICAgIHZvaWQgY2FuY2VsRG93bmxvYWQodWludDY0X3QgZG93bmxv
YWRJRCk7CiAKICAgICB2b2lkIHNldFRleHRDaGVja2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJT
dGF0ZSYpOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDc1MDIyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAgbWVzc2FnZXMgLT4gV2ViUHJv
Y2VzcyB7CiAKICAgICBDbGVhclJlc291cmNlQ2FjaGVzKCk7CiAgICAgQ2xlYXJBcHBsaWNhdGlv
bkNhY2hlKCk7CisgICAgCisgICAgdm9pZCBTdGFydE1lbW9yeVNhbXBsZXIoV2ViS2l0OjpTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9nRmlsZUhhbmRsZSwgV1RGOjpTdHJpbmcgc2Ft
cGxlTG9nRmlsZVBhdGgsIGRvdWJsZSBpbnRlcnZhbCk7CisgICAgdm9pZCBTdG9wTWVtb3J5U2Ft
cGxlcigpOwogCiAgICAgIyBEb3dubG9hZHMuIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbiBhIERv
d25sb2FkLm1lc3NhZ2VzLmluLCBidXQgaXQgc2VlbWVkIHVubmVjZXNzYXJ5IHRvIGNyZWF0ZSBh
IG5ldyBmaWxlIGp1c3QgZm9yCiAgICAgIyBhIHNpbmdsZSBtZXNzYWdlLgo=
</data>
<flag name="review"
          id="69217"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>