<?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>182615</bug_id>
          
          <creation_ts>2018-02-08 12:38:18 -0800</creation_ts>
          <short_desc>Move WebVideoFullscreenController from WebCore to WebKitLegacy.</short_desc>
          <delta_ts>2018-03-01 15:53:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Per Arne Vollan">pvollan</reporter>
          <assigned_to name="Per Arne Vollan">pvollan</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jeremyj-wk</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mitz</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1397651</commentid>
    <comment_count>0</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-08 12:38:18 -0800</bug_when>
    <thetext>It is only used by WK1. Also there are a few references to NSApp in WebVideoFullscreenController.mm. Ideally, we should not reference NSApp in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397685</commentid>
    <comment_count>1</comment_count>
      <attachid>333416</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-08 13:14:55 -0800</bug_when>
    <thetext>Created attachment 333416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397687</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-08 13:17:18 -0800</bug_when>
    <thetext>Attachment 333416 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:52:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:211:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:213:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:214:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:333:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:205:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:274:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:500:  The parameter name &quot;videoElement&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:566:  Use std::max() or std::max&lt;type&gt;() instead of the MAX() macro.  [runtime/max_min_macros] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:211:  Use std::min() or std::min&lt;type&gt;() instead of the MIN() macro.  [runtime/max_min_macros] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:263:  Use std::max() or std::max&lt;type&gt;() instead of the MAX() macro.  [runtime/max_min_macros] [4]
ERROR: Source/WebCore/ChangeLog:11:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 16 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397720</commentid>
    <comment_count>3</comment_count>
      <attachid>333422</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-08 14:31:48 -0800</bug_when>
    <thetext>Created attachment 333422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397721</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-08 14:34:01 -0800</bug_when>
    <thetext>Attachment 333422 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:210:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:27:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:500:  The parameter name &quot;videoElement&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397726</commentid>
    <comment_count>5</comment_count>
      <attachid>333425</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-08 14:37:29 -0800</bug_when>
    <thetext>Created attachment 333425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397728</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-08 14:39:52 -0800</bug_when>
    <thetext>Attachment 333425 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:27:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:499:  The parameter name &quot;videoElement&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397731</commentid>
    <comment_count>7</comment_count>
      <attachid>333426</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-08 14:48:58 -0800</bug_when>
    <thetext>Created attachment 333426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397732</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-08 14:51:20 -0800</bug_when>
    <thetext>Attachment 333426 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.mm:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:27:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:499:  The parameter name &quot;videoElement&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397804</commentid>
    <comment_count>9</comment_count>
      <attachid>333426</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-08 19:05:54 -0800</bug_when>
    <thetext>Comment on attachment 333426
Patch

Thanks for reviewing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397807</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-02-08 19:26:43 -0800</bug_when>
    <thetext>Did you test that this works?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397808</commentid>
    <comment_count>11</comment_count>
      <attachid>333426</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-08 19:30:51 -0800</bug_when>
    <thetext>Comment on attachment 333426
Patch

Clearing flags on attachment: 333426

Committed r228308: &lt;https://trac.webkit.org/changeset/228308&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397809</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-08 19:30:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397810</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-08 19:31:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/37376454&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397811</commentid>
    <comment_count>14</comment_count>
      <attachid>333426</attachid>
    <who name="">mitz</who>
    <bug_when>2018-02-08 19:48:15 -0800</bug_when>
    <thetext>Comment on attachment 333426
Patch

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

&gt; Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.h:47
&gt; +WEBCORE_EXPORT @interface WebVideoFullscreenController : NSWindowController {

Why do we need WEBCORE_EXPORT here?

&gt; Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:49
&gt; +namespace WebCore {

Can we avoid defining things in the WebCore namespace in WebKitLegacy?

&gt; Source/WebKitLegacy/mac/WebView/WebWindowAnimation.h:28
&gt; +WEBCORE_EXPORT @interface WebWindowScaleAnimation : NSAnimation {

Why do we need WEBCORE_EXPORT here?

&gt; Source/WebKitLegacy/mac/WebView/WebWindowAnimation.h:46
&gt; +WEBCORE_EXPORT @interface WebWindowFadeAnimation : NSAnimation {

Ditto.

&gt; Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:35
&gt; +namespace WebCore {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397940</commentid>
    <comment_count>15</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-09 08:08:59 -0800</bug_when>
    <thetext>(In reply to mitz from comment #14)
&gt; Comment on attachment 333426 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333426&amp;action=review
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebView/WebVideoFullscreenController.h:47
&gt; &gt; +WEBCORE_EXPORT @interface WebVideoFullscreenController : NSWindowController {
&gt; 
&gt; Why do we need WEBCORE_EXPORT here?
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebView/WebVideoFullscreenHUDWindowController.mm:49
&gt; &gt; +namespace WebCore {
&gt; 
&gt; Can we avoid defining things in the WebCore namespace in WebKitLegacy?
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebView/WebWindowAnimation.h:28
&gt; &gt; +WEBCORE_EXPORT @interface WebWindowScaleAnimation : NSAnimation {
&gt; 
&gt; Why do we need WEBCORE_EXPORT here?
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebView/WebWindowAnimation.h:46
&gt; &gt; +WEBCORE_EXPORT @interface WebWindowFadeAnimation : NSAnimation {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:35
&gt; &gt; +namespace WebCore {
&gt; 
&gt; Ditto.

Thanks! I&apos;ll follow up with an additional patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397948</commentid>
    <comment_count>16</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-09 08:47:25 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; Did you test that this works?

I thought this was covered by layout tests, but perhaps it is not? If not, I will test this manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397960</commentid>
    <comment_count>17</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-02-09 09:13:11 -0800</bug_when>
    <thetext>This change broke the Sierra 32-bit build:
/Volumes/Data/slave/sierra-32bit-release/build/Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:213:12: error: no matching function for call to &apos;min&apos;

https://build.webkit.org/builders/Apple%20Sierra%20Release%20%2832-bit%20Build%29/builds/8890</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397968</commentid>
    <comment_count>18</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-09 09:28:24 -0800</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #17)
&gt; This change broke the Sierra 32-bit build:
&gt; /Volumes/Data/slave/sierra-32bit-release/build/Source/WebKitLegacy/mac/
&gt; WebView/WebWindowAnimation.mm:213:12: error: no matching function for call
&gt; to &apos;min&apos;
&gt; 
&gt; https://build.webkit.org/builders/Apple%20Sierra%20Release%20%2832-
&gt; bit%20Build%29/builds/8890

Landed 32-bit build fix in &lt;https://trac.webkit.org/changeset/228322/webkit&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398028</commentid>
    <comment_count>19</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-09 11:14:42 -0800</bug_when>
    <thetext>(In reply to Per Arne Vollan from comment #16)
&gt; (In reply to Simon Fraser (smfr) from comment #10)
&gt; &gt; Did you test that this works?
&gt; 
&gt; I thought this was covered by layout tests, but perhaps it is not? If not, I
&gt; will test this manually.

Basic testing of WK1 video fullscreen in MiniBrowser, indicates that the behavior is the same as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398053</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-02-09 12:20:43 -0800</bug_when>
    <thetext>(In reply to Per Arne Vollan from comment #19)
&gt; (In reply to Per Arne Vollan from comment #16)
&gt; &gt; (In reply to Simon Fraser (smfr) from comment #10)
&gt; &gt; &gt; Did you test that this works?
&gt; &gt; 
&gt; &gt; I thought this was covered by layout tests, but perhaps it is not? If not, I
&gt; &gt; will test this manually.

No, there are no layout tests for this.

&gt; 
&gt; Basic testing of WK1 video fullscreen in MiniBrowser, indicates that the
&gt; behavior is the same as before.

Does that actually hit this code? There are multiple variants of fullscreen; check with Jer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398055</commentid>
    <comment_count>21</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-02-09 12:27:50 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #20)
&gt; (In reply to Per Arne Vollan from comment #19)
&gt; &gt; (In reply to Per Arne Vollan from comment #16)
&gt; &gt; &gt; (In reply to Simon Fraser (smfr) from comment #10)
&gt; &gt; &gt; &gt; Did you test that this works?
&gt; &gt; &gt; 
&gt; &gt; &gt; I thought this was covered by layout tests, but perhaps it is not? If not, I
&gt; &gt; &gt; will test this manually.
&gt; 
&gt; No, there are no layout tests for this.
&gt; 
&gt; &gt; 
&gt; &gt; Basic testing of WK1 video fullscreen in MiniBrowser, indicates that the
&gt; &gt; behavior is the same as before.
&gt; 
&gt; Does that actually hit this code? There are multiple variants of fullscreen;
&gt; check with Jer.

Yes, hitting that code when going fullscreen in WK1, I&apos;ll check with Jer :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403082</commentid>
    <comment_count>22</comment_count>
      <attachid>333426</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-03-01 15:53:56 -0800</bug_when>
    <thetext>Comment on attachment 333426
Patch

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

q

&gt; Source/WebKitLegacy/mac/WebView/WebWindowAnimation.mm:213
&gt; +    return std::min(sqrt(maxDist) * speedFactor, maxAdditionalDuration);

Using std::sqrt here would be better because it will do the right thing for both float and double; float -&gt; float or double.-&gt; double. I think the reason we needed to add a cast to CGFloat to fix the 32-bit build is that sqrt (the one without the std:: prefix) converts a float maxDist to a double.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333416</attachid>
            <date>2018-02-08 13:14:55 -0800</date>
            <delta_ts>2018-02-08 14:31:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182615-20180208131454.patch</filename>
            <type>text/plain</type>
            <size>150606</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE4LTAyLTA4ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgZnJvbSBXZWJDb3JlIHRvIFdlYktpdExlZ2FjeS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjYxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IGlzIG9ubHkgdXNlZCBi
eSBXSzEuIEFsc28gdGhlcmUgYXJlIGEgZmV3IHJlZmVyZW5jZXMgdG8gTlNBcHAgaW4gV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbS4KKyAgICAgICAgSWRlYWxseSwgd2Ugc2hvdWxkIG5v
dCByZWZlcmVuY2UgTlNBcHAgaW4gV2ViQ29yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZXNNYWMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW06IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW06IFJlbW92ZWQuCisKIDIw
MTgtMDItMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCB0aW55IHBhcnRpYWwgcm9sbG91dCBvZiByMjI4MjYwIGFzIGl0IGNhdXNlZCBzb21l
IHdvcmtlciBmYWlsdXJlcwpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlc01hYy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlc01hYy50eHQJKHJldmlzaW9uIDIyODI3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNNYWMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsOSArMTAzLDYgQEAgcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZQog
cGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCiBwbGF0Zm9ybS9tYWMvV2Vi
R0xCbGFja2xpc3QubW0KIHBsYXRmb3JtL21hYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
bW0KLXBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIEBuby11bmlm
eQotcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0K
LXBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0KIHBsYXRmb3JtL21hYy9XaWRnZXRN
YWMubW0KIAogcGxhdGZvcm0vbmV0d29yay9tYWMvTmV0d29ya1N0YXRlTm90aWZpZXJNYWMuY3Bw
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1MjMsNyArMzUyMyw3IEBA
CiAJCUJDMDZFREEwMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVJvd0VsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFRDlDMEJG
RDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVJvd0VsZW1lbnQuaCAqLzsgfTsKIAkJQkMwNkVE
RTQwQkZENkQwRDAwODU2RTlEIC8qIEpTSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFREUyMEJGRDZEMEQwMDg1
NkU5RCAvKiBKU0hUTUxUYWJsZUNlbGxFbGVtZW50LmggKi87IH07CiAJCUJDMDZFRTA1MEJGRDcx
QUEwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFRTAzMEJGRDcxQUEwMDg1NkU5RCAvKiBKU0hU
TUxUYWJsZUVsZW1lbnQuaCAqLzsgfTsKLQkJQkMwNzNCQUEwQzM5OUIxRjAwMEY1OTc5IC8qIEZs
b2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMwNzNCQTkwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oICovOyB9
OworCQlCQzA3M0JBQTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA3M0JBOTBDMzk5QjFG
MDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxMEQ3NjgxN0Q4RUU3MTAwNUUyNjI2IC8qIFJlbmRl
ckJsb2NrRmxvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGQjQ1RjMxN0Q4RTM5MjAwNDQ0NDQ2IC8qIFJlbmRlckJsb2NrRmxvdy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMTI0RUU4MEMyNjQx
Q0QwMDlFMjM0OSAvKiBCYXJQcm9wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzEyNEVFNTBDMjY0MUNEMDA5RTIzNDkgLyogQmFyUHJvcC5oICovOyB9
OwogCQlCQzEyNEYwMDBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJQcm9wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyNEVGRTBDMjY0NDdBMDA5RTIz
NDkgLyogSlNCYXJQcm9wLmggKi87IH07CkBAIC0zODY5LDkgKzM4NjksNiBAQAogCQlDRDdEMzM0
ODFDN0ExNkJGMDAwNDEyOTMgLyogQ29yZVZpZGVvU29mdExpbmsuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0QzMzQ2MUM3QTE2QkYwMDA0MTI5MyAv
KiBDb3JlVmlkZW9Tb2Z0TGluay5oICovOyB9OwogCQlDRDdEQkIyOTE4Q0ExOUM2MDBDMTEwNjYg
LyogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDdEQkIyNzE4Q0ExMUZGMDBDMTEwNjYgLyogQ1NTR3JpZExpbmVO
YW1lc1ZhbHVlLmggKi87IH07CiAJCUNEN0UwNTIyMTY1MUMyODIwMEMxMjAxRiAvKiBXZWJDb3Jl
QVZGUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDdFMDUyMTE2NTFBODQxMDBDMTIwMUYgLyogV2ViQ29yZUFWRlJlc291cmNl
TG9hZGVyLm1tICovOyB9OwotCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0Q4MjAzMDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhV
RFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlDRDgyMDMxMDEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgy
MDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4QTdCQkIxOTc3MzVGRTAw
Q0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQjkxOTc3MzVGRTAwQ0JENjQzIC8q
IEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovOyB9OwogCQlDRDhBN0JCQzE5NzczNUZF
MDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEE3QkJBMTk3NzM1RkUwMENCRDY0MyAv
KiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovOyB9OwogCQlDRDhBQ0E4OTFEMjM3QUEy
MDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhBQ0E4NzFEMjM3QUEyMDBFQ0M1OUUgLyog
UmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggKi87IH07CkBAIC00MjcxLDcgKzQyNjgsNiBAQAog
CQlERTVGODYxMjFGQTIzOUU3MDA2REI2M0EgLyogSlNHQ09ic2VydmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzE0RUFFMUNGNjY1NEEw
MDQ3MjNDNCAvKiBKU0dDT2JzZXJ2YXRpb24uY3BwICovOyB9OwogCQlERTVGODYxRDFGQTI4MTVC
MDA2REI2M0EgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTQ3OEE3RTE2Q0Q3MEMzMDA3
RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gKi87IH07CiAJCURF
NUY4NjFFMUZBMjgxRkQwMDZEQjYzQSAvKiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4
MTI0NjBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNl
Lm1tICovOyB9OwotCQlERTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEODIwMzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyLm1tICovOyB9OwogCQlERTVGODY1MDFGQTJBRjI0MDA2REI2M0EgLyogVW5pZmllZFNv
dXJjZTUxLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREU1Rjg2MzYxRkEyQUYwNDAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U1MS1tbS5tbSAqLzsg
fTsKIAkJREU1Rjg2NTExRkEyQUYyNDAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U1Mi1tbS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFNUY4NjM3MUZB
MkFGMDUwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTItbW0ubW0gKi87IH07CiAJCURFNUY4NjUy
MUZBMkFGMjQwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTMtbW0ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERTVGODYzNTFGQTJBRjAzMDA2REI2M0Eg
LyogVW5pZmllZFNvdXJjZTUzLW1tLm1tICovOyB9OwpAQCAtMTI5ODMsMTIgKzEyOTc5LDYgQEAK
IAkJQ0Q3REJCMjcxOENBMTFGRjAwQzExMDY2IC8qIENTU0dyaWRMaW5lTmFtZXNWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NHcmlkTGluZU5hbWVzVmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3RTA1MjAxNjUxQTg0MTAwQzEyMDFGIC8q
IFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlQVZGUmVz
b3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3RTA1MjExNjUx
QTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRDgy
MDMwNzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEODIwMzA4MTM5
NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0Q4MjAzMDkx
Mzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDg3
MUM1QzFGQjUyQjYzMDBGMEI5NjUgLyogSVNPU2NoZW1lVHlwZUJveC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJU09TY2hlbWVUeXBlQm94Lmg7IHBhdGggPSBwbGF0Zm9ybS9n
cmFwaGljcy9pc28vSVNPU2NoZW1lVHlwZUJveC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7
IH07CiAJCUNEODcxQzVFMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09Qcm90ZWN0aW9uU2NoZW1lSW5m
b0JveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJU09Qcm90ZWN0
aW9uU2NoZW1lSW5mb0JveC5jcHA7IHBhdGggPSBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPUHJv
dGVjdGlvblNjaGVtZUluZm9Cb3guY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJ
CUNEODcxQzVGMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09TY2hlbWVUeXBlQm94LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElTT1NjaGVtZVR5cGVCb3guY3BwOyBwYXRo
ID0gcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1NjaGVtZVR5cGVCb3guY3BwOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CkBAIC0xODY4MCwxMiArMTg2NzAsNiBAQAogCQkJCUUxQTMxNjJD
MTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0gKi8sCiAJ
CQkJQ0Q1ODk2RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
LmggKi8sCiAJCQkJQ0Q1ODk2REYxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyLm1tICovLAotCQkJCUNEODIwMzA2MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8sCi0JCQkJQ0Q4MjAzMDcxMzk1QUI2QTAwRjk1NkM2
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCi0JCQkJQ0Q4MjAzMDgxMzk1
QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAq
LywKLQkJCQlDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5tbSAqLywKLQkJCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyog
V2ViV2luZG93QW5pbWF0aW9uLmggKi8sCi0JCQkJQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2IC8q
IFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLywKIAkJCQk5MzgwRjQ3NzA5QTExQUNDMDAxRkRCMzQg
LyogV2lkZ2V0TWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0yODI3Myw3ICsy
ODI1Nyw2IEBACiAJCQkJMDc5NjlEQzIxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDU3RhdHNSZXBv
cnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVFMkM0MzZDMUJDRjA3MUUwMDAxRTJCQyAvKiBKU1JU
Q1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUMwMUMzMEMyNzREREQwMDlGNEVD
OSAvKiBKU1NjcmVlbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY1QjQwOEEyMDIxMkY3NzAwODBG
OTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1
RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU1NjcmlwdFByb2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTgzNDQ3NkVGMURBNUJDNUUwMDJCNkVEMiAvKiBKU1Njcm9sbFRvT3B0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRGQUYxIC8qIEpTU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODg5Myw2ICsyODg3
Niw3IEBACiAJCQkJNDE4NEY1MTYxRUFGMDVBODAwRjE4QkYwIC8qIE9yaWVudGF0aW9uTm90aWZp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwMTQ2MjhCMTAzQ0QxREUwMDBCMjBEQiAvKiBPcmln
aW5BY2Nlc3NFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RTg5RkMxNkUyREMwNTAwQTkw
OEY4IC8qIE9yaWdpbkxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUI0MDhBMjAyMTJGNzcw
MDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDU4MUZBRjE1MjBGOTFGMDAzQTdBNzUgLyogT3NjaWxsYXRvck5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNUVCNUREMEU4MUI4REQwMEIyNTk2NSAvKiBPdXRsaW5lVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdBMjlGNTcyMThDNjk1MTQwMDREMEY4MSAvKiBPdXRPZkJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjQ4LDE0ICszMDIzMiwxMSBAQAog
CQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0RDkwMEY3NzE3OCAvKiBX
ZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEZBMzE0OTY5
MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUNEODIwMzBBMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjQyQjMxRDE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggaW4gSGVhZGVycyAqLywKLQkJCQlDRDgyMDMw
QzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjEyMTcxRjYxNkE4Q0YwQjAwMDA1M0NBIC8qIFdlYlZU
VEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVEMjFBODAzMTNFQ0U1REYwMEJCNzA2NCAv
KiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIxMEI2OTgwMTQwQzE3NDAwMEJD
MUMyNiAvKiBXZWJWVFRUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjEwQjY5ODIxNDBDMTc0
MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0Q4MjAz
MTAxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjU1QjNERTAxMjUxRjEyRDAwM0VGMjY5IC8qIFdlZWtJbnB1dFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1MDMxQjUxMEE0NEVGQzcwMEY5OTJFMCAvKiBXaGVlbEV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRUJCQzNEODFCNjU5ODgzMDBGNTI1M0QgLyogV2hlZWxFdmVudERl
bHRhRmlsdGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNDc3LDcgKzMxNDU4LDYgQEAKIAkJCQk3
QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5h
Z2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2QzQwNTIwMEFCRTA2RSAv
KiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywKLQkJCQlERTVGODYyQzFGQTI4RDhE
MDA2REI2M0EgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUYxMjE3MUY1MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZU
VFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBiZXN0TWVkaWFFbGVtZW50Rm9y
U2hvd2luZ1BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKE1lZGlhRWxlbWVudFNlc3Npb246OlBsYXli
YWNrQ29udHJvbHNQdXJwb3NlKTsKIAotICAgIHZvaWQgcmV3aW5kKGRvdWJsZSB0aW1lRGVsdGEp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV3aW5kKGRvdWJsZSB0aW1lRGVsdGEpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV0dXJuVG9SZWFsdGltZSgpIG92ZXJyaWRlOwogCiAgICAg
Ly8gRXZlbnR1YWxseSBvdmVybG9hZGVkIGluIEhUTUxWaWRlb0VsZW1lbnQKQEAgLTIyNyw3ICsy
MjcsNyBAQCBwdWJsaWM6CiAKIC8vIHBsYXliYWNrIHN0YXRlCiAgICAgV0VCQ09SRV9FWFBPUlQg
ZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDdXJyZW50
VGltZShkb3VibGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3VycmVu
dFRpbWUoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnJlbnRUaW1lV2l0aFRvbGVy
YW5jZShkb3VibGUsIGRvdWJsZSB0b2xlcmFuY2VCZWZvcmUsIGRvdWJsZSB0b2xlcmFuY2VBZnRl
cik7CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lRm9yQmluZGluZ3MoKSBjb25zdCB7IHJldHVybiBj
dXJyZW50VGltZSgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
Q3VycmVudFRpbWVGb3JCaW5kaW5ncyhkb3VibGUpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRyb2xzKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRDb250cm9scyhib29sKTsKICAgICBXRUJDT1JFX0VYUE9SVCBkb3Vi
bGUgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0Vm9s
dW1lKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0Vm9sdW1lKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBt
dXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TXV0ZWQo
Ym9vbCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjI4
Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJ
REVPKQotCi0jaW1wb3J0IDxBcHBLaXQvTlNXaW5kb3dDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxB
cHBLaXQvTlNTY3JlZW4uaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFBB
TCB7Ci1jbGFzcyBTbGVlcERpc2FibGVyOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckRlbGVnYXRlOwotQGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXI7Ci1AY2xhc3MgV2ViV2luZG93RmFkZUFuaW1hdGlvbjsKLUBjbGFzcyBDQUxheWVyOwot
Ci1XRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIg
OiBOU1dpbmRvd0NvbnRyb2xsZXIgewotQHByaXZhdGUKLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsgLy8gKHJldGFpbikKLSAgICBpZCA8V2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7IC8vIChhc3NpZ24pCi0K
LSAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93OyAvLyAocmV0YWluKQot
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgKl9odWRDb250cm9sbGVy
OyAvLyAocmV0YWluKQotCi0gICAgV2ViV2luZG93RmFkZUFuaW1hdGlvbiAqX2ZhZGVBbmltYXRp
b247IC8vIChyZXRhaW4pCi0KLSAgICBCT09MIF9pc0VuZGluZ0Z1bGxzY3JlZW47Ci0gICAgQk9P
TCBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBBTDo6U2xl
ZXBEaXNhYmxlcj4gX2Rpc3BsYXlTbGVlcERpc2FibGVyOwotfQotCi0tIChpZCA8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKLS0gKHZvaWQpc2V0RGVsZWdh
dGU6KGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwot
Ci0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyKilsYXllcjsKLS0gKHZvaWQpc2V0
VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7Ci0t
IChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7Ci0KLS0gKHZvaWQpZW50
ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKLS0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47
Ci0KLUBlbmQKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDIy
ODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgiCi0KLSNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYldpbmRvd0FuaW1hdGlv
bi5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyTGF5ZXIuaD4KLSNpbXBvcnQgPENh
cmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgotI2lt
cG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3lzdGVtL1NsZWVwRGlzYWJsZXIu
aD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5o
PgotCi11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotCi0jaWYgQ09NUElMRVIoQ0xB
TkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0jZW5kaWYKLQotU09GVF9M
SU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9u
LCBBVlBsYXllckxheWVyKQotCi11c2luZyBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhOwotQGludGVy
ZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgOiBOU1dpbmRvdzxOU0FuaW1hdGlvbkRlbGVn
YXRlPgotewotICAgIFNFTCBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kOwotICAgIFdl
YldpbmRvd1NjYWxlQW5pbWF0aW9uICpfZnVsbHNjcmVlbkFuaW1hdGlvbjsgLy8gKHJldGFpbikK
LX0KLS0gKHZvaWQpYW5pbWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRSZWN0IHRvUmVjdDooTlNS
ZWN0KWVuZFJlY3Qgd2l0aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilzdWJBbmltYXRpb24g
Y29udHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xsZXJBY3Rpb247Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcihIVURXaW5kb3dDb250cm9sbGVyRGVsZWdh
dGUpIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+Ci0tICh2
b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uOwot
LSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW47Ci0tICh2b2lkKXVwZGF0ZVBv
d2VyQXNzZXJ0aW9uczsKLUBlbmQKLQotQGludGVyZmFjZSBOU1dpbmRvdyhJc09uQWN0aXZlU3Bh
Y2VBZGRpdGlvbkZvclRpZ2VyQW5kTGVvcGFyZCkKLS0gKEJPT0wpaXNPbkFjdGl2ZVNwYWNlOwot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgotLSAo
aWQpaW5pdAotewotICAgIC8vIERvIG5vdCBkZWZlciB3aW5kb3cgY3JlYXRpb24sIHRvIG1ha2Ug
c3VyZSAtd2luZG93TnVtYmVyIGlzIGNyZWF0ZWQgKG5lZWRlZCBieSBXZWJXaW5kb3dTY2FsZUFu
aW1hdGlvbikuCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuV2lu
ZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qgc3R5bGVNYXNrOk5TQm9y
ZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5P
XTsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoV2luZG93OndpbmRvd107Ci0gICAgW3dpbmRv
dyByZWxlYXNlXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3Nl
bGYgd2luZG93RGlkTG9hZF07Ci0gICAgcmV0dXJuIHNlbGY7Ci0gICAgCi19Ci0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBBU1NFUlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyk7Ci0gICAg
QVNTRVJUKCFfZmFkZUFuaW1hdGlvbik7Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KLS0gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKWZ1bGxzY3JlZW5XaW5kb3cKLXsKLSAg
ICByZXR1cm4gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKVtzdXBlciB3aW5kb3ddOwotfQot
Ci0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyICopbGF5ZXIKLXsKLSAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddOwot
ICAgIFsoTlNWaWV3Kilbd2luZG93IGNvbnRlbnRWaWV3XSBzZXRMYXllcjpsYXllcl07Ci0gICAg
W1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6WUVTXTsKLX0KLQotLSAodm9pZCl3
aW5kb3dEaWRMb2FkCi17Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93ICp3aW5kb3cgPSBb
c2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLSAgICBbd2luZG93IHNldEhhc1NoYWRvdzpZRVNdOyAv
LyBUaGlzIGlzIG5pY2VyIHdpdGggYSBzaGFkb3cuCi0gICAgW3dpbmRvdyBzZXRMZXZlbDpOU1Bv
cFVwTWVudVdpbmRvd0xldmVsLTFdOwotICAgIFsoTlNWaWV3Kilbd2luZG93IGNvbnRlbnRWaWV3
XSBzZXRMYXllcjpbQ0FMYXllciBsYXllcl1dOwotICAgIFtbd2luZG93IGNvbnRlbnRWaWV3XSBz
ZXRXYW50c0xheWVyOllFU107Ci0KLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGxpY2F0aW9uRGlk
UmVzaWduQWN0aXZlOikgbmFtZTpOU0FwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlTm90aWZpY2F0
aW9uIG9iamVjdDpOU0FwcF07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZENo
YW5nZVNjcmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5Q
YXJhbWV0ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07Ci19Ci0KLS0gKEhUTUxWaWRlb0Vs
ZW1lbnQqKXZpZGVvRWxlbWVudAotewotICAgIHJldHVybiBfdmlkZW9FbGVtZW50LmdldCgpOwot
fQotCi0tICh2b2lkKXNldFZpZGVvRWxlbWVudDooSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVt
ZW50Ci17Ci0gICAgX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsKLQotICAgIGlmICghX3Zp
ZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtzZWxmIGlzV2luZG93TG9h
ZGVkXSkgewotICAgICAgICBpZiAoX3ZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLnR5cGUg
PT0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQbGF5ZXJUeXBlKSB7Ci0gICAgICAg
ICAgICBBVlBsYXllciAqcGxheWVyID0gX3ZpZGVvRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLm1l
ZGlhLmF2Zk1lZGlhUGxheWVyOwotICAgICAgICAgICAgUmV0YWluUHRyPEFWUGxheWVyTGF5ZXI+
IGxheWVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXllckxheWVySW5zdGFuY2UoKSBpbml0XSk7Ci0g
ICAgICAgICAgICBbc2VsZiBzZXR1cFZpZGVvT3ZlcmxheTpsYXllci5nZXQoKV07Ci0gICAgICAg
ICAgICBbbGF5ZXIuZ2V0KCkgc2V0UGxheWVyOnBsYXllcl07Ci0KLSAgICAgICAgICAgIFtwbGF5
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAicmF0ZSIgb3B0aW9uczowIGNvbnRleHQ6
bnVsbHB0cl07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKGlkIDxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9kZWxlZ2F0ZTsK
LX0KLQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQot
LSAoQ0dGbG9hdCljbGVhckZhZGVBbmltYXRpb24KLXsKLSAgICBbX2ZhZGVBbmltYXRpb24gc3Rv
cEFuaW1hdGlvbl07Ci0gICAgQ0dGbG9hdCBwcmV2aW91c0FscGhhID0gW19mYWRlQW5pbWF0aW9u
IGN1cnJlbnRBbHBoYV07Ci0gICAgW19mYWRlQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOwotICAg
IFtfZmFkZUFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBfZmFkZUFuaW1hdGlvbiA9IG5pbDsKLSAg
ICByZXR1cm4gcHJldmlvdXNBbHBoYTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbHNj
cmVlbgotewotICAgIENBTGF5ZXIgKmxheWVyID0gWyhOU1ZpZXcqKVtbc2VsZiB3aW5kb3ddIGNv
bnRlbnRWaWV3XSBsYXllcl07Ci0gICAgaWYgKFtsYXllciBpc0tpbmRPZkNsYXNzOmdldEFWUGxh
eWVyTGF5ZXJDbGFzcygpXSkKLSAgICAgICAgW1soQVZQbGF5ZXJMYXllciopbGF5ZXIgcGxheWVy
XSByZW1vdmVPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJyYXRlIl07Ci0KLSAgICBbc2VsZiBj
bGVhckZhZGVBbmltYXRpb25dOwotICAgIFtbc2VsZiB3aW5kb3ddIGNsb3NlXTsKLSAgICBbc2Vs
ZiBzZXRXaW5kb3c6bmlsXTsKLSAgICBbc2VsZiB1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3Jl
ZW5dOyAgIAotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0aW9uc107Ci0gICAgW19odWRDb250
cm9sbGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19odWRDb250cm9sbGVyIHJlbGVhc2VdOwot
ICAgIF9odWRDb250cm9sbGVyID0gbmlsOwotICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgY2xvc2VdOwotICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgcmVsZWFzZV07Ci0g
ICAgX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOwotICAgIAotICAgIFtzZWxmIGF1
dG9yZWxlYXNlXTsgLy8gQXNzb2NpYXRlZCAtcmV0YWluIGlzIGluIC1leGl0RnVsbHNjcmVlbi4K
LSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gTk87Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkRW50
ZXJGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKLQotICAgIEFT
U0VSVCghX2h1ZENvbnRyb2xsZXIpOwotICAgIF9odWRDb250cm9sbGVyID0gW1tXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKLSAgICBbX2h1ZENvbnRy
b2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0KLSAgICBbc2VsZiB1cGRhdGVNZW51QW5kRG9ja0Zv
ckZ1bGxzY3JlZW5dOwotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0aW9uc107Ci0gICAgW05T
Q3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOwotICAgIAotICAgIC8vIEdpdmUg
dGhlIEhVRCBrZXlib2FyZCBmb2N1cyBpbml0aWFsbHkKLSAgICBbX2h1ZENvbnRyb2xsZXIgZmFk
ZVdpbmRvd0luXTsKLX0KLQotLSAoTlNSZWN0KXZpZGVvRWxlbWVudFJlY3QKLXsKLSAgICByZXR1
cm4gX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpOwotfQotCi0tICh2b2lkKWFwcGxpY2F0aW9u
RGlkUmVzaWduQWN0aXZlOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCi17ICAgCi0gICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgTlNXaW5kb3cqIGZ1bGxzY3JlZW5XaW5k
b3cgPSBbc2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLQotICAgIC8vIFJlcGxpY2F0ZSB0aGUgUXVp
Y2tUaW1lIFBsYXllciAoWCkgYmVoYXZpb3Igd2hlbiBsb3NpbmcgYWN0aXZlIGFwcGxpY2F0aW9u
IHN0YXR1czoKLSAgICAvLyBJcyB0aGUgZnVsbHNjcmVlbiBzY3JlZW4gdGhlIG1haW4gc2NyZWVu
PyAoTm90ZTogdGhpcyBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgb25seSBhIAotICAgIC8vIHNpbmds
ZSBzY3JlZW4gaXMgYXZhaWxhYmxlLikgIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVlbiBvbiB0aGUg
Y3VycmVudCBzcGFjZT8gSUZGIHNvLCAKLSAgICAvLyB0aGVuIGV4aXQgZnVsbHNjcmVlbiBtb2Rl
LiAgICAKLSAgICBpZiAoZnVsbHNjcmVlbldpbmRvdy5zY3JlZW4gPT0gW05TU2NyZWVuIHNjcmVl
bnNdWzBdICYmIGZ1bGxzY3JlZW5XaW5kb3cub25BY3RpdmVTcGFjZSkKLSAgICAgICAgIFtzZWxm
IHJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246Tk9dOwotfQotICAgICAgICAgCi0g
ICAgICAgICAKLS8vIE1BUks6IC0KLS8vIE1BUks6IEV4cG9zZWQgSW50ZXJmYWNlCi0KLXN0YXRp
YyBOU1JlY3QgZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZyYW1lKE5TUmVjdCBmcmFtZVRvRXhwYW5k
LCBOU1JlY3QgZnJhbWUpCi17Ci0gICAgLy8gS2VlcCBhIGNvbnN0cmFpbmVkIGFzcGVjdCByYXRp
byBmb3IgdGhlIGRlc3RpbmF0aW9uIHdpbmRvdwotICAgIE5TUmVjdCByZXN1bHQgPSBmcmFtZVRv
RXhwYW5kOwotICAgIENHRmxvYXQgbmV3UmF0aW8gPSBmcmFtZS5zaXplLndpZHRoIC8gZnJhbWUu
c2l6ZS5oZWlnaHQ7Ci0gICAgQ0dGbG9hdCBvcmlnaW5hbFJhdGlvID0gZnJhbWVUb0V4cGFuZC5z
aXplLndpZHRoIC8gZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAgICBpZiAobmV3UmF0aW8g
PiBvcmlnaW5hbFJhdGlvKSB7Ci0gICAgICAgIENHRmxvYXQgbmV3V2lkdGggPSBuZXdSYXRpbyAq
IGZyYW1lVG9FeHBhbmQuc2l6ZS5oZWlnaHQ7Ci0gICAgICAgIENHRmxvYXQgZGlmZiA9IG5ld1dp
ZHRoIC0gZnJhbWVUb0V4cGFuZC5zaXplLndpZHRoOwotICAgICAgICByZXN1bHQuc2l6ZS53aWR0
aCA9IG5ld1dpZHRoOwotICAgICAgICByZXN1bHQub3JpZ2luLnggLT0gZGlmZiAvIDI7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQ0dGbG9hdCBuZXdIZWlnaHQgPSBmcmFtZVRvRXhwYW5kLnNpemUu
d2lkdGggLyBuZXdSYXRpbzsKLSAgICAgICAgQ0dGbG9hdCBkaWZmID0gbmV3SGVpZ2h0IC0gZnJh
bWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAgICAgICAgcmVzdWx0LnNpemUuaGVpZ2h0ID0gbmV3
SGVpZ2h0OwotICAgICAgICByZXN1bHQub3JpZ2luLnkgLT0gZGlmZiAvIDI7Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU1dpbmRvdyAqY3JlYXRlQmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3coTlNSZWN0IGZyYW1lLCBpbnQgbGV2ZWwpCi17Ci0gICAgTlNXaW5kb3cg
KndpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6ZnJhbWUgc3R5
bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZl
cmVkIGRlZmVyOk5PXTsKLSAgICBbd2luZG93IHNldE9wYXF1ZTpZRVNdOwotICAgIFt3aW5kb3cg
c2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsKLSAgICBbd2luZG93IHNl
dExldmVsOmxldmVsXTsKLSAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Ci0g
ICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotLSAodm9pZClzZXR1cEZhZGVBbmltYXRpb25JZk5lZWRl
ZEFuZEZhZGVJbjooQk9PTClmYWRlSW4KLXsKLSAgICBDR0Zsb2F0IGluaXRpYWxBbHBoYSA9IGZh
ZGVJbiA/IDAgOiAxOwotICAgIGlmIChfZmFkZUFuaW1hdGlvbikgewotICAgICAgICAvLyBNYWtl
IHN1cmUgd2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiBpZiB0aGUgcHJldmlvdXMgb25lIGlz
bid0IG92ZXIgeWV0Ci0gICAgICAgIGluaXRpYWxBbHBoYSA9IFtzZWxmIGNsZWFyRmFkZUFuaW1h
dGlvbl07Ci0gICAgfQotICAgIGlmICghX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikKLSAgICAgICAg
X2ZhZGVBbmltYXRpb24gPSBbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gYWxsb2NdIGluaXRXaXRo
RHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgaW5pdGlhbEFs
cGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOmZhZGVJbiA/IDEgOiAwXTsKLX0KLQotLSAodm9p
ZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCi17Ci0gICAgaWYgKCFzY3JlZW4p
Ci0gICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsKLQotICAgIE5TUmVjdCBl
bmRGcmFtZSA9IFtzY3JlZW4gZnJhbWVdOwotICAgIE5TUmVjdCBmcmFtZSA9IGZyYW1lRXhwYW5k
ZWRUb1JhdGlvT2ZGcmFtZShbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XSwgZW5kRnJhbWUpOwotCi0g
ICAgLy8gQ3JlYXRlIGEgYmxhY2sgd2luZG93IGlmIG5lZWRlZAotICAgIGlmICghX2JhY2tncm91
bmRGdWxsc2NyZWVuV2luZG93KQotICAgICAgICBfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cg
PSBjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhbc2NyZWVuIGZyYW1lXSwgW1tzZWxm
IHdpbmRvd10gbGV2ZWxdLTEpOwotICAgIGVsc2UKLSAgICAgICAgW19iYWNrZ3JvdW5kRnVsbHNj
cmVlbldpbmRvdyBzZXRGcmFtZTpbc2NyZWVuIGZyYW1lXSBkaXNwbGF5Ok5PXTsKLQotICAgIFtz
ZWxmIHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOllFU107Ci0gICAgaWYgKF9m
b3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2FibGUgc2Nh
bGUgYW5pbWF0aW9uCi0gICAgICAgIGZyYW1lID0gTlNaZXJvUmVjdDsKLSAgICB9Ci0gICAgW1tz
ZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpmcmFtZSB0b1JlY3Q6ZW5kRnJh
bWUgd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOkBzZWxl
Y3Rvcih3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4pXTsKLQotICAgIFtfYmFja2dyb3VuZEZ1bGxz
Y3JlZW5XaW5kb3cgb3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiBm
dWxsc2NyZWVuV2luZG93XSB3aW5kb3dOdW1iZXJdXTsKLX0KLQotLSAodm9pZClleGl0RnVsbHNj
cmVlbgotewotICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0g
ICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKLSAgICBbX2h1ZENvbnRyb2xsZXIgY2xvc2VX
aW5kb3ddOwotCi0gICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYgdmlkZW9FbGVtZW50UmVjdF07
Ci0KLSAgICBbc2VsZiBzZXR1cEZhZGVBbmltYXRpb25JZk5lZWRlZEFuZEZhZGVJbjpOT107Ci0g
ICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGRp
c2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGVuZEZyYW1lID0gTlNaZXJvUmVjdDsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gV2UgaGF2ZSB0byByZXRhaW4gb3Vyc2VsdmVzIGJlY2F1c2Ugd2Ug
d2FudCB0byBiZSBhbGl2ZSBmb3IgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uLgotICAgIC8vIElm
IG91ciBvd25lciByZWxlYXNlcyB1cyB3ZSBjb3VsZCBjcmFzaCBpZiB0aGlzIGlzIG5vdCB0aGUg
Y2FzZS4KLSAgICAvLyBCYWxhbmNlZCBpbiB3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbgotICAgIFtz
ZWxmIHJldGFpbl07ICAgIAotCi0gICAgTlNSZWN0IHN0YXJ0RnJhbWUgPSBbW3NlbGYgd2luZG93
XSBmcmFtZV07Ci0gICAgZW5kRnJhbWUgPSBmcmFtZUV4cGFuZGVkVG9SYXRpb09mRnJhbWUoZW5k
RnJhbWUsIHN0YXJ0RnJhbWUpOwotCi0gICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1h
dGVGcm9tUmVjdDpzdGFydEZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRoU3ViQW5pbWF0aW9uOl9m
YWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdpbmRvd0RpZEV4aXRGdWxs
c2NyZWVuKV07Ci19Ci0KLS0gKHZvaWQpYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0
ZXJzOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKG5v
dGlmaWNhdGlvbik7Ci0gICAgLy8gVGhlIHVzZXIgbWF5IGhhdmUgY2hhbmdlZCB0aGUgbWFpbiBz
Y3JlZW4gYnkgbW92aW5nIHRoZSBtZW51IGJhciwgb3IgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkCi0g
ICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBvciB0aGV5IG1heSBoYXZlIGNoYW5n
ZWQgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9ucy4gIAotICAgIC8vIFVwZGF0ZSBv
dXIgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMsIGFuZCBlbnN1cmUgdGhhdCB0aGUgZnVsbCBzY3Jl
ZW4gd2luZG93IG9jY3VwaWVzIHRoZSAKLSAgICAvLyBlbnRpcmUgc2NyZWVuOgotICAgIFtzZWxm
IHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07Ci0gICAgW1tzZWxmIHdpbmRvd10gc2V0
RnJhbWU6W1tbc2VsZiB3aW5kb3ddIHNjcmVlbl0gZnJhbWVdIGRpc3BsYXk6WUVTXTsKLX0KLQot
LSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW4KLXsKLSAgICAvLyBOU0FwcGxp
Y2F0aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBpcyBhdmFpbGFibGUgb24gPiAxMC42IG9ubHk6Ci0g
ICAgTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbk9wdGlvbnMgb3B0aW9ucyA9IE5TQXBwbGljYXRp
b25QcmVzZW50YXRpb25EZWZhdWx0OwotICAgIE5TU2NyZWVuKiBmdWxsc2NyZWVuU2NyZWVuID0g
W1tzZWxmIHdpbmRvd10gc2NyZWVuXTsKLQotICAgIGlmICghX2lzRW5kaW5nRnVsbHNjcmVlbikg
ewotICAgICAgICAvLyBBdXRvLWhpZGUgdGhlIG1lbnUgYmFyIGlmIHRoZSBmdWxsc2NyZWVuU2Ny
ZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhcjoKLSAgICAgICAgLy8gTk9URTogaWYgdGhlIGZ1bGxz
Y3JlZW5TY3JlZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyIGJ1dCBub3QgdGhlIGRvY2ssIHdlIG11
c3Qgc3RpbGwgCi0gICAgICAgIC8vIGF1dG8taGlkZSB0aGUgZG9jaywgb3IgYW4gZXhjZXB0aW9u
IHdpbGwgYmUgdGhyb3duLgotICAgICAgICBpZiAoW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RB
dEluZGV4OjBdID09IGZ1bGxzY3JlZW5TY3JlZW4pCi0gICAgICAgICAgICBvcHRpb25zIHw9IChO
U0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVNZW51QmFyIHwgTlNBcHBsaWNhdGlvblBy
ZXNlbnRhdGlvbkF1dG9IaWRlRG9jayk7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50
IHNjcmVlbiBjb250YWlucyB0aGUgZG9jayBieSBjb21wYXJpbmcgdGhlIHNjcmVlbidzIGZyYW1l
IHRvIGl0cwotICAgICAgICAvLyB2aXNpYmxlRnJhbWU7IGlmIGEgZG9jayBpcyBwcmVzZW50LCB0
aGUgdmlzaWJsZUZyYW1lIHdpbGwgZGlmZmVyLiAgSWYgdGhlIGN1cnJlbnQgc2NyZWVuCi0gICAg
ICAgIC8vIGNvbnRhaW5zIHRoZSBkb2NrLCBoaWRlIGl0LgotICAgICAgICBlbHNlIGlmICghTlNF
cXVhbFJlY3RzKFtmdWxsc2NyZWVuU2NyZWVuIGZyYW1lXSwgW2Z1bGxzY3JlZW5TY3JlZW4gdmlz
aWJsZUZyYW1lXSkpCi0gICAgICAgICAgICBvcHRpb25zIHw9IE5TQXBwbGljYXRpb25QcmVzZW50
YXRpb25BdXRvSGlkZURvY2s7Ci0gICAgfQotCi0gICAgTlNBcHAucHJlc2VudGF0aW9uT3B0aW9u
cyA9IG9wdGlvbnM7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRpb25zCi17Ci0gICAg
X2Rpc3BsYXlTbGVlcERpc2FibGVyID0gbnVsbHB0cjsKLX0KLQotLy8gTUFSSzogLQotLy8gTUFS
SzogV2luZG93IGNhbGxiYWNrCi0KLS0gKHZvaWQpX3JlcXVlc3RFeGl0Ci17Ci0gICAgaWYgKF92
aWRlb0VsZW1lbnQpCi0gICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7Ci0g
ICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwotfQotCi0tICh2b2lkKXJlcXVlc3RFeGl0
RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uCi17Ci0gICAgaWYgKF9pc0Vu
ZGluZ0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9mb3JjZURpc2FibGVBbmlt
YXRpb24gPSAhYW5pbWF0aW9uOwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Io
X3JlcXVlc3RFeGl0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOwotCi19Ci0KLS0gKHZv
aWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgcmVxdWVzdEV4aXRGdWxsc2Ny
ZWVuV2l0aEFuaW1hdGlvbjpZRVNdOwotfQotCi0tICh2b2lkKWZhZGVIVURJbgotewotICAgIFtf
aHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOwotfQotCi0tICh2b2lkKW9ic2VydmVWYWx1ZUZv
cktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZToo
TlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250ZXh0Ci17Ci0gICAgVU5V
U0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoYW5nZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOwotCi0gICAgaWYgKFtrZXlQYXRoIGlzRXF1YWxUbzpAInJhdGUiXSkK
LSAgICAgICAgW3NlbGYgcmF0ZUNoYW5nZWQ6bmlsXTsKLX0KLQotLSAodm9pZClyYXRlQ2hhbmdl
ZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFS
QU0odW51c2VkTm90aWZpY2F0aW9uKTsKLSAgICBbX2h1ZENvbnRyb2xsZXIgdXBkYXRlUmF0ZV07
Ci0gICAgW3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKLX0KLQotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93Ci0KLS0gKGlkKWluaXRXaXRoQ29udGVu
dFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJh
Y2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcK
LXsKLSAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRo
Q29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sg
YmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwotICAgIFtzZWxmIHNldEJh
Y2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW3NlbGYgc2V0SWdub3Jl
c01vdXNlRXZlbnRzOk5PXTsKLSAgICBbc2VsZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czpZ
RVNdOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBBU1NF
UlQoIV9mdWxsc2NyZWVuQW5pbWF0aW9uKTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKEJP
T0wpY2FuQmVjb21lS2V5V2luZG93Ci17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKW1v
dXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50
KTsKLX0KLQotLSAodm9pZCljYW5jZWxPcGVyYXRpb246KGlkKXNlbmRlcgotewotICAgIFVOVVNF
RF9QQVJBTShzZW5kZXIpOwotICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSByZXF1ZXN0RXhp
dEZ1bGxzY3JlZW5dOwotfQotCi0tICh2b2lkKWFuaW1hdGVkUmVzaXplRGlkRW5kCi17Ci0gICAg
Ly8gQ2FsbCBvdXIgd2luZG93Q29udHJvbGxlci4KLSAgICBpZiAoX2NvbnRyb2xsZXJBY3Rpb25P
bkFuaW1hdGlvbkVuZCkKLSAgICAgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIHBlcmZvcm1T
ZWxlY3RvcjpfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kXTsKLSAgICBfY29udHJvbGxl
ckFjdGlvbk9uQW5pbWF0aW9uRW5kID0gTlVMTDsKLX0KLQotLy8KLS8vIFRoaXMgZnVuY3Rpb24g
d2lsbCBhbmltYXRlIGEgY2hhbmdlIG9mIGZyYW1lIHJlY3RhbmdsZQotLy8gV2Ugc3VwcG9ydCBx
dWV1aW5nIGFuaW1hdGlvbiwgdGhhdCBtZWFucyB0aGF0IHdlJ2xsIGNvcnJlY3RseQotLy8gaW50
ZXJydXB0IHRoZSBydW5uaW5nIGFuaW1hdGlvbiwgYW5kIHF1ZXVlIHRoZSBuZXh0IG9uZS4KLS8v
Ci0tICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVjdCB0b1JlY3Q6KE5TUmVj
dCllbmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopc3ViQW5pbWF0aW9uIGNv
bnRyb2xsZXJBY3Rpb246KFNFTCljb250cm9sbGVyQWN0aW9uCi17Ci0gICAgX2NvbnRyb2xsZXJB
Y3Rpb25PbkFuaW1hdGlvbkVuZCA9IGNvbnRyb2xsZXJBY3Rpb247Ci0KLSAgICBCT09MIHdhc0Fu
aW1hdGluZyA9IE5POwotICAgIGlmIChfZnVsbHNjcmVlbkFuaW1hdGlvbikgewotICAgICAgICB3
YXNBbmltYXRpbmcgPSBZRVM7Ci0KLSAgICAgICAgLy8gSW50ZXJydXB0IGFueSBydW5uaW5nIGFu
aW1hdGlvbi4KLSAgICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwot
Ci0gICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVjdCB0byBlbnN1cmUgYSBzbW9vdGggdHJh
bnNpdGlvbi4KLSAgICAgICAgc3RhcnRSZWN0ID0gW19mdWxsc2NyZWVuQW5pbWF0aW9uIGN1cnJl
bnRGcmFtZV07Ci0gICAgICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICAg
ICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7Ci0gICAgfQotICAgIAotICAgIGlmIChOU0lz
RW1wdHlSZWN0KHN0YXJ0UmVjdCkgfHwgTlNJc0VtcHR5UmVjdChlbmRSZWN0KSkgewotICAgICAg
ICAvLyBGYWtlbHkgZW5kIHRoZSBzdWJhbmltYXRpb24uCi0gICAgICAgIFtzdWJBbmltYXRpb24g
c2V0Q3VycmVudFByb2dyZXNzOjFdOwotICAgICAgICAvLyBBbmQgcmVtb3ZlIHRoZSB3ZWFrIGxp
bmsgdG8gdGhlIHdpbmRvdy4KLSAgICAgICAgW3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsK
LQotICAgICAgICBbc2VsZiBzZXRGcmFtZTplbmRSZWN0IGRpc3BsYXk6Tk9dOwotICAgICAgICBb
c2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLSAgICAgICAgW3NlbGYgYW5pbWF0ZWRS
ZXNpemVEaWRFbmRdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF3YXNBbmlt
YXRpbmcpIHsKLSAgICAgICAgLy8gV2UnbGwgZG93bnNjYWxlIHRoZSB3aW5kb3cgZHVyaW5nIHRo
ZSBhbmltYXRpb24gYmFzZWQgb24gdGhlIGhpZ2hlciByZXNvbHV0aW9uIHJlY3QKLSAgICAgICAg
Qk9PTCBoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID0gc3RhcnRSZWN0LnNpemUud2lkdGggPCBl
bmRSZWN0LnNpemUud2lkdGggJiYgc3RhcnRSZWN0LnNpemUuaGVpZ2h0IDwgZW5kUmVjdC5zaXpl
LmhlaWdodDsKLSAgICAgICAgW3NlbGYgc2V0RnJhbWU6aGlnaGVyUmVzb2x1dGlvbklzRW5kUmVj
dCA/IGVuZFJlY3QgOiBzdGFydFJlY3QgZGlzcGxheTpOT107Ci0gICAgfQotICAgIAotICAgIEFT
U0VSVCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOwotICAgIF9mdWxsc2NyZWVuQW5pbWF0aW9uID0g
W1tXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhIaW50ZWREdXJhdGlvbjow
LjIgd2luZG93OnNlbGYgaW5pdGFsRnJhbWU6c3RhcnRSZWN0IGZpbmFsRnJhbWU6ZW5kUmVjdF07
Ci0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFN1YkFuaW1hdGlvbjpzdWJBbmltYXRpb25d
OwotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAKLSAg
ICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBoYXMgc2NhbGVkIHRoZSB3aW5kb3cgYmVmb3Jl
IHNob3dpbmcgaXQuCi0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldEN1cnJlbnRQcm9ncmVz
czowXTsKLSAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLQotICAgIFtfZnVs
bHNjcmVlbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpYW5pbWF0aW9u
RGlkRW5kOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgotewotICAgIGlmICghW05TVGhyZWFkIGlz
TWFpblRocmVhZF0pIHsKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFk
OkBzZWxlY3RvcihhbmltYXRpb25EaWRFbmQ6KSB3aXRoT2JqZWN0OmFuaW1hdGlvbiB3YWl0VW50
aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYW5pbWF0aW9uICE9
IF9mdWxsc2NyZWVuQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgYW5p
bWF0aW9uIGlzIG5vdCByZWFsbHkgb3ZlciBhbmQgd2FzIGludGVycnVwdGVkCi0gICAgLy8gRG9u
J3Qgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KLSAgICBpZiAoW2FuaW1hdGlvbiBjdXJyZW50UHJv
Z3Jlc3NdIDwgMS4wKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBhbmlt
YXRpb24gKGFuZCBzdWJhbmltYXRpb24pIGRvbid0IGtlZXAKLSAgICAvLyB0aGUgd2VhayByZWZl
cmVuY2UgdG8gdGhlIHdpbmRvdyBpdmFyIHRoYXQgbWF5IGJlIGRlc3Ryb3llZCBmcm9tCi0gICAg
Ly8gbm93IG9uLgotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXRXaW5kb3c6bmlsXTsKLQot
ICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBhdXRvcmVsZWFzZV07Ci0gICAgX2Z1bGxzY3JlZW5B
bmltYXRpb24gPSBuaWw7Ci0KLSAgICBbc2VsZiBhbmltYXRlZFJlc2l6ZURpZEVuZF07Ci19Ci0K
LS0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VEX1BB
UkFNKHRoZUV2ZW50KTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZmFkZUhVREluXTsK
LX0KLQotQGVuZAotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCi0jZW5kaWYKLQotI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBF
TkFCTEUoVklERU8pCi0KLSNpbXBvcnQgPEFwcEtpdC9OU0J1dHRvbi5oPgotI2ltcG9ydCA8QXBw
S2l0L05TQ29udHJvbC5oPgotI2ltcG9ydCA8QXBwS2l0L05TVGV4dEZpZWxkLmg+Ci0jaW1wb3J0
IDxBcHBLaXQvTlNUcmFja2luZ0FyZWEuaD4KLSNpbXBvcnQgPEFwcEtpdC9OU1dpbmRvdy5oPgot
I2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9jb2wgV2ViVmlkZW9GdWxs
c2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOwotCi1AaW50ZXJmYWNlIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKLXsKLSAg
ICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPiBfZGVs
ZWdhdGU7Ci0gICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7Ci0gICAgTlNUcmFja2lu
Z0FyZWEgKl9hcmVhOwotICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKLSAgICBCT09MIF9pc0VuZGlu
Z0Z1bGxzY3JlZW47Ci0gICAgQk9PTCBfaXNTY3J1YmJpbmc7Ci0KLSAgICBOU0NvbnRyb2wgKl90
aW1lbGluZTsKLSAgICBOU1RleHRGaWVsZCAqX3JlbWFpbmluZ1RpbWVUZXh0OwotICAgIE5TVGV4
dEZpZWxkICpfZWxhcHNlZFRpbWVUZXh0OwotICAgIE5TQ29udHJvbCAqX3ZvbHVtZVNsaWRlcjsK
LSAgICBOU0J1dHRvbiAqX3BsYXlCdXR0b247Ci19Ci0KLS0gKGlkIDxXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwotLSAodm9pZClzZXREZWxl
Z2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4p
ZGVsZWdhdGU7Ci0tICh2b2lkKWZhZGVXaW5kb3dJbjsKLS0gKHZvaWQpZmFkZVdpbmRvd091dDsK
LS0gKHZvaWQpY2xvc2VXaW5kb3c7Ci0tICh2b2lkKXVwZGF0ZVJhdGU7Ci0KLUBlbmQKLQotQHBy
b3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNP
YmplY3Q+Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKLS0gKFdlYkNvcmU6OkhUTUxW
aWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKLUBlbmQKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAt
MSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0JKHJldmlzaW9uIDIyODI3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNzM4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbXBvcnQgIkZsb2F0
Q29udmVyc2lvbi5oIgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+Ci0jaW1w
b3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMv
UVRLaXRTUEkuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfRlJB
TUVXT1JLKFFUS2l0KQotCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEQmFja2dyb3VuZFZp
ZXcpCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEQnV0dG9uKQotU09GVF9MSU5LX0NMQVNT
KFFUS2l0LCBRVEhVRFNsaWRlcikKLVNPRlRfTElOS19DTEFTUyhRVEtpdCwgUVRIVURUaW1lbGlu
ZSkKLQotI2RlZmluZSBRVEhVREJhY2tncm91bmRWaWV3IGdldFFUSFVEQmFja2dyb3VuZFZpZXdD
bGFzcygpCi0jZGVmaW5lIFFUSFVEQnV0dG9uIGdldFFUSFVEQnV0dG9uQ2xhc3MoKQotI2RlZmlu
ZSBRVEhVRFNsaWRlciBnZXRRVEhVRFNsaWRlckNsYXNzKCkKLSNkZWZpbmUgUVRIVURUaW1lbGlu
ZSBnZXRRVEhVRFRpbWVsaW5lQ2xhc3MoKQotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51
bSBjbGFzcyBNZWRpYVVJQ29udHJvbCB7Ci0gICAgVGltZWxpbmUsCi0gICAgU2xpZGVyLAotICAg
IFBsYXlQYXVzZUJ1dHRvbiwKLSAgICBFeGl0RnVsbHNjcmVlbkJ1dHRvbiwKLSAgICBSZXdpbmRC
dXR0b24sCi0gICAgRmFzdEZvcndhcmRCdXR0b24sCi0gICAgVm9sdW1lVXBCdXR0b24sCi0gICAg
Vm9sdW1lRG93bkJ1dHRvbiwKLX07Ci0KLX0KLQotdXNpbmcgV2ViQ29yZTo6TWVkaWFVSUNvbnRy
b2w7Ci11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotdXNpbmcgV2ViQ29yZTo6bmFy
cm93UHJlY2lzaW9uVG9GbG9hdDsKLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlciAoUHJpdmF0ZSkgPE5TV2luZG93RGVsZWdhdGU+Ci0KLS0gKHZvaWQpdXBk
YXRlVGltZTsKLS0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6KGlkKXNlbmRlcjsKLS0g
KGZsb2F0KWN1cnJlbnRUaW1lOwotLSAodm9pZClzZXRDdXJyZW50VGltZTooZmxvYXQpY3VycmVu
dFRpbWU7Ci0tIChkb3VibGUpZHVyYXRpb247Ci0KLS0gKHZvaWQpdm9sdW1lQ2hhbmdlZDooaWQp
c2VuZGVyOwotLSAoZmxvYXQpbWF4Vm9sdW1lOwotLSAoZmxvYXQpdm9sdW1lOwotLSAodm9pZClz
ZXRWb2x1bWU6KGZsb2F0KXZvbHVtZTsKLS0gKHZvaWQpZGVjcmVtZW50Vm9sdW1lOwotLSAodm9p
ZClpbmNyZW1lbnRWb2x1bWU7Ci0KLS0gKHZvaWQpdXBkYXRlUGxheUJ1dHRvbjsKLS0gKHZvaWQp
dG9nZ2xlUGxheWluZzooaWQpc2VuZGVyOwotLSAoQk9PTClwbGF5aW5nOwotLSAodm9pZClzZXRQ
bGF5aW5nOihCT09MKXBsYXlpbmc7Ci0KLS0gKHZvaWQpcmV3aW5kOihpZClzZW5kZXI7Ci0tICh2
b2lkKWZhc3RGb3J3YXJkOihpZClzZW5kZXI7Ci0KLS0gKE5TU3RyaW5nICopcmVtYWluaW5nVGlt
ZVRleHQ7Ci0tIChOU1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dDsKLQotLSAodm9pZClleGl0RnVs
bHNjcmVlbjooaWQpc2VuZGVyOwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvdyA6IE5TV2luZG93Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3cKLQotLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNv
bnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5n
U3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZwotewotICAgIFVOVVNFRF9Q
QVJBTShhU3R5bGUpOwotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpjb250
ZW50UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6YnVm
ZmVyaW5nVHlwZSBkZWZlcjpmbGFnXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwotICAgIFtzZWxmIHNldEJhY2tncm91bmRD
b2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW3NlbGYgc2V0TGV2ZWw6TlNQb3BVcE1l
bnVXaW5kb3dMZXZlbF07Ci0gICAgW3NlbGYgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6WUVT
XTsKLSAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6Tk9dOwotICAgIFtzZWxmIHNldE1v
dmFibGVCeVdpbmRvd0JhY2tncm91bmQ6WUVTXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChCT09MKWNhbkJlY29tZUtleVdpbmRvdwotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKHZv
aWQpY2FuY2VsT3BlcmF0aW9uOihpZClzZW5kZXIKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVy
KTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxzY3JlZW46c2VsZl07Ci19
Ci0KLS0gKHZvaWQpY2VudGVyCi17Ci0gICAgTlNSZWN0IGh1ZEZyYW1lID0gW3NlbGYgZnJhbWVd
OwotICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFpblNjcmVlbl0gZnJhbWVd
OwotICAgIFtzZWxmIHNldEZyYW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBvaW50KHNjcmVlbkZyYW1l
Lm9yaWdpbi54ICsgKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRGcmFtZS5zaXplLndpZHRo
KSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVu
RnJhbWUub3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQgLSBodWRGcmFtZS5zaXpl
LmhlaWdodCkgLyA2KV07Ci19Ci0KLS0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50Ci17
Ci0gICAgW3N1cGVyIGtleURvd246ZXZlbnRdOwotICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVy
XSBmYWRlV2luZG93SW5dOwotfQotCi0tIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCi17Ci0g
ICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50
ICopZXZlbnQKLXsKLSAgICAvLyBCbG9jayBhbGwgY29tbWFuZCBrZXkgZXZlbnRzIHdoaWxlIHRo
ZSBmdWxsc2NyZWVuIHdpbmRvdyBpcyB1cC4KLSAgICBpZiAoW2V2ZW50IHR5cGVdICE9IE5TRXZl
bnRUeXBlS2V5RG93bikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIGlmICghKFtldmVu
dCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdDb21tYW5kKSkKLSAgICAgICAg
cmV0dXJuIE5POwotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKLQotc3RhdGljIGNvbnN0IENH
RmxvYXQgd2luZG93SGVpZ2h0ID0gNTk7Ci1zdGF0aWMgY29uc3QgQ0dGbG9hdCB3aW5kb3dXaWR0
aCA9IDQzODsKLQotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIEhVRFdpbmRvd0ZhZGVPdXRE
ZWxheSA9IDM7Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyCi0KLS0gKGlkKWluaXQKLXsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6TlNNYWtl
UmVjdCgwLCAwLCB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0KSBzdHlsZU1hc2s6TlNXaW5kb3dT
dHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpO
T107Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aFdpbmRvdzp3aW5kb3ddOwotICAgIFt3aW5k
b3cgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW3dpbmRvdyByZWxlYXNlXTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYgd2luZG93RGlkTG9hZF07Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIEFTU0VSVCghX3RpbWVs
aW5lVXBkYXRlVGltZXIpOwotICAgIEFTU0VSVCghX2FyZWEpOwotICAgIEFTU0VSVCghX2lzU2Ny
dWJiaW5nKTsKLSAgICBbX3RpbWVsaW5lIHJlbGVhc2VdOwotICAgIFtfcmVtYWluaW5nVGltZVRl
eHQgcmVsZWFzZV07Ci0gICAgW19lbGFwc2VkVGltZVRleHQgcmVsZWFzZV07Ci0gICAgW192b2x1
bWVTbGlkZXIgcmVsZWFzZV07Ci0gICAgW19wbGF5QnV0dG9uIHJlbGVhc2VdOwotICAgIFtzdXBl
ciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXRBcmVhOihOU1RyYWNraW5nQXJlYSAqKWFyZWEK
LXsKLSAgICBpZiAoYXJlYSA9PSBfYXJlYSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtfYXJlYSBy
ZWxlYXNlXTsKLSAgICBfYXJlYSA9IFthcmVhIHJldGFpbl07Ci19Ci0KLS0gKHZvaWQpa2V5RG93
bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgTlNTdHJpbmcgKmNoYXJhY3RlcnNJZ25vcmluZ01v
ZGlmaWVycyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOwotICAgIGlmIChb
Y2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGxlbmd0aF0gPT0gMSkgewotICAgICAgICBzd2l0
Y2ggKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgY2hhcmFjdGVyQXRJbmRleDowXSkgewot
ICAgICAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICAgICAgW3NlbGYgdG9nZ2xlUGxheWlu
ZzpuaWxdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgTlNVcEFy
cm93RnVuY3Rpb25LZXk6Ci0gICAgICAgICAgICAgICAgaWYgKFtldmVudCBtb2RpZmllckZsYWdz
XSAmIE5TRXZlbnRNb2RpZmllckZsYWdPcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIFtzZWxm
IHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIFtzZWxmIGluY3JlbWVudFZvbHVtZV07Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5OgotICAgICAg
ICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZpZXJGbGFn
T3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRWb2x1bWU6MF07Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkZWNyZW1lbnRWb2x1bWVd
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBbc3VwZXIga2V5RG93bjpl
dmVudF07Ci19Ci0KLS0gKGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
RGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9kZWxlZ2F0ZTsKLX0KLQotLSAodm9p
ZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJE
ZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotLSAo
dm9pZClzY2hlZHVsZVRpbWVVcGRhdGUKLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQ
ZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1
bGVUaW1lVXBkYXRlKSBvYmplY3Q6c2VsZl07Ci0KLSAgICAvLyBGaXJzdCwgdXBkYXRlIHJpZ2h0
IGF3YXksIHRoZW4gc2NoZWR1bGUgZnV0dXJlIHVwZGF0ZQotICAgIFtzZWxmIHVwZGF0ZVRpbWVd
OwotICAgIFtzZWxmIHVwZGF0ZVBsYXlCdXR0b25dOwotCi0gICAgW190aW1lbGluZVVwZGF0ZVRp
bWVyIGludmFsaWRhdGVdOwotICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciByZWxlYXNlXTsKLQot
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMgYSByZXRhaW4gY3ljbGUgYmV0d2VlbiB0aGUg
d2luZG93IGFuZCB1cy4KLSAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9IFtbTlNUaW1lciB0aW1l
cldpdGhUaW1lSW50ZXJ2YWw6MC4yNSB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodXBk
YXRlVGltZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOwotICAgIFtbTlNSdW5M
b29wIGN1cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxpbmVVcGRhdGVUaW1lciBmb3JNb2Rl
Ok5TUnVuTG9vcENvbW1vbk1vZGVzXTsKLX0KLQotLSAodm9pZCl1bnNjaGVkdWxlVGltZVVwZGF0
ZQotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJn
ZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRhdGUpIG9iamVjdDpu
aWxdOwotCi0gICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRhdGVdOwotICAgIFtfdGlt
ZWxpbmVVcGRhdGVUaW1lciByZWxlYXNlXTsKLSAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9IG5p
bDsKLX0KLQotLSAodm9pZClmYWRlV2luZG93SW4KLXsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0g
W3NlbGYgd2luZG93XTsKLSAgICBpZiAoIVt3aW5kb3cgaXNWaXNpYmxlXSkKLSAgICAgICAgW3dp
bmRvdyBzZXRBbHBoYVZhbHVlOjBdOwotCi0gICAgW3dpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9u
dDpzZWxmXTsKLSAgICBbW3dpbmRvdyBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZToxXTsKLSAgICBb
c2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwotCi0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3Vz
UGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2lu
ZG93T3V0KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAoIV9tb3VzZUlzSW5IVUQgJiYgW3NlbGYgcGxh
eWluZ10pICAgLy8gRG9uJ3QgZmFkZSBvdXQgd2hlbiBwYXVzZWQuCi0gICAgICAgIFtzZWxmIHBl
cmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0aE9iamVjdDpuaWwgYWZ0
ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVsYXldOwotfQotCi0tICh2b2lkKWZhZGVXaW5kb3dP
dXQKLXsKLSAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOllFU107Ci0gICAg
W1tbc2VsZiB3aW5kb3ddIGFuaW1hdG9yXSBzZXRBbHBoYVZhbHVlOjBdOwotICAgIFtzZWxmIHBl
cmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRhdGUpIHdpdGhPYmplY3Q6
bmlsIGFmdGVyRGVsYXk6MV07Ci19Ci0KLS0gKHZvaWQpY2xvc2VXaW5kb3cKLXsKLSAgICBbTlNP
YmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOwotICAgIFtzZWxmIHVuc2No
ZWR1bGVUaW1lVXBkYXRlXTsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsK
LSAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gcmVtb3ZlVHJhY2tpbmdBcmVhOl9hcmVhXTsKLSAg
ICBbc2VsZiBzZXRBcmVhOm5pbF07Ci0gICAgW3dpbmRvdyBjbG9zZV07Ci0gICAgW3dpbmRvdyBz
ZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtzZWxmIHNldFdpbmRvdzpuaWxdOwotfQotCi1zdGF0aWMg
TlNDb250cm9sICpjcmVhdGVNZWRpYVVJQ29udHJvbChNZWRpYVVJQ29udHJvbCBjb250cm9sVHlw
ZSkKLXsKLSAgICBzd2l0Y2ggKGNvbnRyb2xUeXBlKSB7Ci0gICAgY2FzZSBNZWRpYVVJQ29udHJv
bDo6VGltZWxpbmU6IHsKLSAgICAgICAgTlNTbGlkZXIgKnNsaWRlciA9IFtbUVRIVURUaW1lbGlu
ZSBhbGxvY10gaW5pdF07Ci0gICAgICAgIFtbc2xpZGVyIGNlbGxdIHNldENvbnRpbnVvdXM6WUVT
XTsKLSAgICAgICAgcmV0dXJuIHNsaWRlcjsKLSAgICB9Ci0gICAgY2FzZSBNZWRpYVVJQ29udHJv
bDo6U2xpZGVyOiB7Ci0gICAgICAgIE5TQnV0dG9uICpzbGlkZXIgPSBbW1FUSFVEU2xpZGVyIGFs
bG9jXSBpbml0XTsKLSAgICAgICAgW1tzbGlkZXIgY2VsbF0gc2V0Q29udGludW91czpZRVNdOwot
ICAgICAgICByZXR1cm4gc2xpZGVyOwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpQ
bGF5UGF1c2VCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0
b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdl
TmFtZWQ6QCJOU1BsYXlUZW1wbGF0ZSJdXTsKLSAgICAgICAgW2J1dHRvbiBzZXRBbHRlcm5hdGVJ
bWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNQYXVzZVFUUHJpdmF0ZVRlbXBsYXRlIl1dOwot
Ci0gICAgICAgIFtbYnV0dG9uIGNlbGxdIHNldFNob3dzU3RhdGVCeTpOU0NvbnRlbnRzQ2VsbE1h
c2tdOwotICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAgICAgICAgcmV0dXJuIGJ1
dHRvbjsKLSAgICB9Ci0gICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6RXhpdEZ1bGxzY3JlZW5CdXR0
b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGlu
aXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0V4
aXRGdWxsU2NyZWVuVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9d
OwotICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9s
OjpSZXdpbmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0
b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdl
TmFtZWQ6QCJOU1Jld2luZFRlbXBsYXRlIl1dOwotICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVk
Ok5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAgY2FzZSBNZWRpYVVJQ29u
dHJvbDo6RmFzdEZvcndhcmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtb
UVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0lt
YWdlIGltYWdlTmFtZWQ6QCJOU0Zhc3RGb3J3YXJkVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0
b24gc2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBj
YXNlIE1lZGlhVUlDb250cm9sOjpWb2x1bWVVcEJ1dHRvbjogewotICAgICAgICBOU0J1dHRvbiAq
YnV0dG9uID0gW1tRVEhVREJ1dHRvbiBhbGxvY10gaW5pdF07Ci0gICAgICAgIFtidXR0b24gc2V0
SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQXVkaW9PdXRwdXRWb2x1bWVIaWdoVGVtcGxh
dGUiXV07Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4g
YnV0dG9uOwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpWb2x1bWVEb3duQnV0dG9u
OiB7Ci0gICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0dG9uIGFsbG9jXSBpbml0
XTsKLSAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNBdWRp
b091dHB1dFZvbHVtZUxvd1RlbXBsYXRlIl1dOwotICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVk
Ok5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotc3RhdGljIE5TQ29udHJvbCAq
Y3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2wgY29udHJv
bFR5cGUsIE5TUmVjdCBmcmFtZSkKLXsKLSAgICBOU0NvbnRyb2wgKmNvbnRyb2wgPSBjcmVhdGVN
ZWRpYVVJQ29udHJvbChjb250cm9sVHlwZSk7Ci0gICAgY29udHJvbC5mcmFtZSA9IGZyYW1lOwot
ICAgIHJldHVybiBjb250cm9sOwotfQotCi1zdGF0aWMgTlNUZXh0RmllbGQgKmNyZWF0ZVRpbWVU
ZXh0RmllbGQoTlNSZWN0IGZyYW1lKQotewotICAgIE5TVGV4dEZpZWxkICp0ZXh0RmllbGQgPSBb
W05TVGV4dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXTsKLSAgICBbdGV4dEZpZWxk
IHNldFRleHRDb2xvcjpbTlNDb2xvciB3aGl0ZUNvbG9yXV07Ci0gICAgW3RleHRGaWVsZCBzZXRC
b3JkZXJlZDpOT107Ci0gICAgW3RleHRGaWVsZCBzZXRGb250OltOU0ZvbnQgYm9sZFN5c3RlbUZv
bnRPZlNpemU6MTBdXTsKLSAgICBbdGV4dEZpZWxkIHNldERyYXdzQmFja2dyb3VuZDpOT107Ci0g
ICAgW3RleHRGaWVsZCBzZXRCZXplbGVkOk5PXTsKLSAgICBbdGV4dEZpZWxkIHNldEVkaXRhYmxl
Ok5PXTsKLSAgICBbdGV4dEZpZWxkIHNldFNlbGVjdGFibGU6Tk9dOwotICAgIHJldHVybiB0ZXh0
RmllbGQ7Ci19Ci0KLXN0YXRpYyBOU1ZpZXcgKmNyZWF0ZU1lZGlhVUlCYWNrZ3JvdW5kVmlldygp
Ci17Ci0gICAgaWQgdmlldyA9IFtbUVRIVURCYWNrZ3JvdW5kVmlldyBhbGxvY10gaW5pdF07Ci0K
LSAgICBjb25zdCBDR0Zsb2F0IHF1aWNrVGltZVBsYXllckhVREhlaWdodCA9IDU5OwotICAgIGNv
bnN0IENHRmxvYXQgcXVpY2tUaW1lUGxheWVySFVEQ29udGVudEJvcmRlclBvc2l0aW9uID0gMzg7
Ci0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICBbdmlldyBzZXRDb250
ZW50Qm9yZGVyUG9zaXRpb246cXVpY2tUaW1lUGxheWVySFVEQ29udGVudEJvcmRlclBvc2l0aW9u
IC8gcXVpY2tUaW1lUGxheWVySFVESGVpZ2h0XTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKLQotICAgIHJldHVybiB2aWV3OwotfQotCi0tICh2b2lkKXdpbmRvd0RpZExvYWQKLXsKLSAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBob3Jpem9udGFsTWFyZ2luID0gMTA7Ci0gICAgc3RhdGlj
IGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbldpZHRoID0gNDE7Ci0gICAgc3RhdGljIGNvbnN0IENH
RmxvYXQgcGxheUJ1dHRvbkhlaWdodCA9IDM1OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHBs
YXlCdXR0b25Ub3BNYXJnaW4gPSA0OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZVNs
aWRlcldpZHRoID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lU2xpZGVySGVp
Z2h0ID0gMTM7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lQnV0dG9uV2lkdGggPSAx
ODsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVCdXR0b25IZWlnaHQgPSAxNjsKLSAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVVcEJ1dHRvbkxlZnRNYXJnaW4gPSA0OwotICAg
IHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZUNvbnRyb2xzVG9wTWFyZ2luID0gMTM7Ci0gICAg
c3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0b25XaWR0aCA9IDI1OwotICAg
IHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9uSGVpZ2h0ID0gMjE7Ci0g
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0b25Ub3BNYXJnaW4gPSAx
MTsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lbGluZVdpZHRoID0gMzE1OwotICAgIHN0
YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVsaW5lSGVpZ2h0ID0gMTQ7Ci0gICAgc3RhdGljIGNvbnN0
IENHRmxvYXQgdGltZWxpbmVCb3R0b21NYXJnaW4gPSA3OwotICAgIHN0YXRpYyBjb25zdCBDR0Zs
b2F0IHRpbWVUZXh0RmllbGRXaWR0aCA9IDU0OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRp
bWVUZXh0RmllbGRIZWlnaHQgPSAxMzsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lVGV4
dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiA9IDc7Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3Nl
bGYgd2luZG93XTsKLSAgICBBU1NFUlQod2luZG93KTsKLQotICAgIE5TVmlldyAqYmFja2dyb3Vu
ZCA9IGNyZWF0ZU1lZGlhVUlCYWNrZ3JvdW5kVmlldygpOwotCi0gICAgW3dpbmRvdyBzZXRDb250
ZW50VmlldzpiYWNrZ3JvdW5kXTsKLSAgICBfYXJlYSA9IFtbTlNUcmFja2luZ0FyZWEgYWxsb2Nd
IGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6TlNUcmFja2luZ01vdXNl
RW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdBY3RpdmVBbHdheXMgb3duZXI6c2VsZiB1c2Vy
SW5mbzpuaWxdOwotICAgIFtiYWNrZ3JvdW5kIGFkZFRyYWNraW5nQXJlYTpfYXJlYV07Ci0gICAg
W2JhY2tncm91bmQgcmVsZWFzZV07ICAgIAotCi0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFt3
aW5kb3cgY29udGVudFZpZXddOwotCi0gICAgQ0dGbG9hdCBjZW50ZXIgPSBDR0Zsb29yKCh3aW5k
b3dXaWR0aCAtIHBsYXlCdXR0b25XaWR0aCkgLyAyKTsKLSAgICBfcGxheUJ1dHRvbiA9IChOU0J1
dHRvbiAqKWNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9s
OjpQbGF5UGF1c2VCdXR0b24sIE5TTWFrZVJlY3QoY2VudGVyLCB3aW5kb3dIZWlnaHQgLSBwbGF5
QnV0dG9uVG9wTWFyZ2luIC0gcGxheUJ1dHRvbkhlaWdodCwgcGxheUJ1dHRvbldpZHRoLCBwbGF5
QnV0dG9uSGVpZ2h0KSk7Ci0gICAgQVNTRVJUKFtfcGxheUJ1dHRvbiBpc0tpbmRPZkNsYXNzOltO
U0J1dHRvbiBjbGFzc11dKTsKLSAgICBbX3BsYXlCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOwotICAg
IFtfcGxheUJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHRvZ2dsZVBsYXlpbmc6KV07Ci0gICAg
W2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3BsYXlCdXR0b25dOwotCi0gICAgQ0dGbG9hdCBjbG9z
ZVRvUmlnaHQgPSB3aW5kb3dXaWR0aCAtIGhvcml6b250YWxNYXJnaW4gLSBleGl0RnVsbHNjcmVl
bkJ1dHRvbldpZHRoOwotICAgIE5TQ29udHJvbCAqZXhpdEZ1bGxzY3JlZW5CdXR0b24gPSBjcmVh
dGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6RXhpdEZ1bGxz
Y3JlZW5CdXR0b24sIE5TTWFrZVJlY3QoY2xvc2VUb1JpZ2h0LCB3aW5kb3dIZWlnaHQgLSBleGl0
RnVsbHNjcmVlbkJ1dHRvblRvcE1hcmdpbiAtIGV4aXRGdWxsc2NyZWVuQnV0dG9uSGVpZ2h0LCBl
eGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoLCBleGl0RnVsbHNjcmVlbkJ1dHRvbkhlaWdodCkpOwot
ICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKGV4aXRGdWxsc2Ny
ZWVuOildOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07Ci0gICAg
W2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6ZXhpdEZ1bGxzY3JlZW5CdXR0b25dOwotICAgIFtleGl0
RnVsbHNjcmVlbkJ1dHRvbiByZWxlYXNlXTsKLSAgICAKLSAgICBDR0Zsb2F0IHZvbHVtZUNvbnRy
b2xzQm90dG9tID0gd2luZG93SGVpZ2h0IC0gdm9sdW1lQ29udHJvbHNUb3BNYXJnaW4gLSB2b2x1
bWVCdXR0b25IZWlnaHQ7Ci0gICAgQ0dGbG9hdCBsZWZ0ID0gaG9yaXpvbnRhbE1hcmdpbjsKLSAg
ICBOU0NvbnRyb2wgKnZvbHVtZURvd25CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlD
b250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lRG93bkJ1dHRvbiwgTlNNYWtlUmVjdChs
ZWZ0LCB2b2x1bWVDb250cm9sc0JvdHRvbSwgdm9sdW1lQnV0dG9uV2lkdGgsIHZvbHVtZUJ1dHRv
bkhlaWdodCkpOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnZvbHVtZURvd25CdXR0b25d
OwotICAgIFt2b2x1bWVEb3duQnV0dG9uIHNldFRhcmdldDpzZWxmXTsKLSAgICBbdm9sdW1lRG93
bkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVtZVRvWmVybzopXTsKLSAgICBbdm9s
dW1lRG93bkJ1dHRvbiByZWxlYXNlXTsKLQotICAgIGxlZnQgKz0gdm9sdW1lQnV0dG9uV2lkdGg7
Ci0gICAgX3ZvbHVtZVNsaWRlciA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBl
KE1lZGlhVUlDb250cm9sOjpTbGlkZXIsIE5TTWFrZVJlY3QobGVmdCwgdm9sdW1lQ29udHJvbHNC
b3R0b20gKyBDR0Zsb29yKCh2b2x1bWVCdXR0b25IZWlnaHQgLSB2b2x1bWVTbGlkZXJIZWlnaHQp
IC8gMiksIHZvbHVtZVNsaWRlcldpZHRoLCB2b2x1bWVTbGlkZXJIZWlnaHQpKTsKLSAgICBbX3Zv
bHVtZVNsaWRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpbc2VsZiBtYXhW
b2x1bWVdXSBmb3JLZXk6QCJtYXhWYWx1ZSJdOwotICAgIFtfdm9sdW1lU2xpZGVyIHNldFRhcmdl
dDpzZWxmXTsKLSAgICBbX3ZvbHVtZVNsaWRlciBzZXRBY3Rpb246QHNlbGVjdG9yKHZvbHVtZUNo
YW5nZWQ6KV07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3ZvbHVtZVNsaWRlcl07Ci0K
LSAgICBsZWZ0ICs9IHZvbHVtZVNsaWRlcldpZHRoICsgdm9sdW1lVXBCdXR0b25MZWZ0TWFyZ2lu
OwotICAgIE5TQ29udHJvbCAqdm9sdW1lVXBCdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlh
VUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0b24sIE5TTWFrZVJlY3Qo
bGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20sIHZvbHVtZUJ1dHRvbldpZHRoLCB2b2x1bWVCdXR0
b25IZWlnaHQpKTsKLSAgICBbdm9sdW1lVXBCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOwotICAgIFt2
b2x1bWVVcEJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVtZVRvTWF4aW11bTopXTsK
LSAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVVcEJ1dHRvbl07Ci0gICAgW3ZvbHVt
ZVVwQnV0dG9uIHJlbGVhc2VdOwotCi0gICAgX3RpbWVsaW5lID0gY3JlYXRlTWVkaWFVSUNvbnRy
b2woTWVkaWFVSUNvbnRyb2w6OlRpbWVsaW5lKTsKLQotICAgIFtfdGltZWxpbmUgc2V0VGFyZ2V0
OnNlbGZdOwotICAgIFtfdGltZWxpbmUgc2V0QWN0aW9uOkBzZWxlY3Rvcih0aW1lbGluZVBvc2l0
aW9uQ2hhbmdlZDopXTsKLSAgICBbX3RpbWVsaW5lIHNldEZyYW1lOk5TTWFrZVJlY3QoQ0dGbG9v
cigod2luZG93V2lkdGggLSB0aW1lbGluZVdpZHRoKSAvIDIpLCB0aW1lbGluZUJvdHRvbU1hcmdp
biwgdGltZWxpbmVXaWR0aCwgdGltZWxpbmVIZWlnaHQpXTsKLSAgICBbY29udGVudFZpZXcgYWRk
U3VidmlldzpfdGltZWxpbmVdOwotCi0gICAgX2VsYXBzZWRUaW1lVGV4dCA9IGNyZWF0ZVRpbWVU
ZXh0RmllbGQoTlNNYWtlUmVjdCh0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiwgdGltZWxp
bmVCb3R0b21NYXJnaW4sIHRpbWVUZXh0RmllbGRXaWR0aCwgdGltZVRleHRGaWVsZEhlaWdodCkp
OwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRMZWZ0
XTsKLSAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfZWxhcHNlZFRpbWVUZXh0XTsKLQotICAg
IF9yZW1haW5pbmdUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdCh3aW5k
b3dXaWR0aCAtIHRpbWVUZXh0RmllbGRIb3Jpem9udGFsTWFyZ2luIC0gdGltZVRleHRGaWVsZFdp
ZHRoLCB0aW1lbGluZUJvdHRvbU1hcmdpbiwgdGltZVRleHRGaWVsZFdpZHRoLCB0aW1lVGV4dEZp
ZWxkSGVpZ2h0KSk7Ci0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRBbGlnbm1lbnQ6TlNUZXh0
QWxpZ25tZW50UmlnaHRdOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9yZW1haW5pbmdU
aW1lVGV4dF07Ci0KLSAgICBbd2luZG93IHJlY2FsY3VsYXRlS2V5Vmlld0xvb3BdOwotICAgIFt3
aW5kb3cgc2V0SW5pdGlhbEZpcnN0UmVzcG9uZGVyOl9wbGF5QnV0dG9uXTsKLSAgICBbd2luZG93
IGNlbnRlcl07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlVm9sdW1lCi17Ci0gICAgW192b2x1bWVTbGlk
ZXIgc2V0RmxvYXRWYWx1ZTpbc2VsZiB2b2x1bWVdXTsKLX0KLQotLSAodm9pZCl1cGRhdGVUaW1l
Ci17Ci0gICAgW3NlbGYgdXBkYXRlVm9sdW1lXTsKLQotICAgIFtfdGltZWxpbmUgc2V0RmxvYXRW
YWx1ZTpbc2VsZiBjdXJyZW50VGltZV1dOwotICAgIFtfdGltZWxpbmUgc2V0VmFsdWU6W05TTnVt
YmVyIG51bWJlcldpdGhEb3VibGU6W3NlbGYgZHVyYXRpb25dXSBmb3JLZXk6QCJtYXhWYWx1ZSJd
OwotCi0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRTdHJpbmdWYWx1ZTpbc2VsZiByZW1haW5p
bmdUaW1lVGV4dF1dOwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldFN0cmluZ1ZhbHVlOltzZWxm
IGVsYXBzZWRUaW1lVGV4dF1dOwotfQotCi0tICh2b2lkKWVuZFNjcnViYmluZwotewotICAgIEFT
U0VSVChfaXNTY3J1YmJpbmcpOwotICAgIF9pc1NjcnViYmluZyA9IE5POwotICAgIGlmIChIVE1M
VmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0g
ICAgICAgIHZpZGVvRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0KLS0gKHZvaWQpdGltZWxp
bmVQb3NpdGlvbkNoYW5nZWQ6KGlkKXNlbmRlcgotewotICAgIFVOVVNFRF9QQVJBTShzZW5kZXIp
OwotICAgIFtzZWxmIHNldEN1cnJlbnRUaW1lOltfdGltZWxpbmUgZmxvYXRWYWx1ZV1dOwotICAg
IGlmICghX2lzU2NydWJiaW5nKSB7Ci0gICAgICAgIF9pc1NjcnViYmluZyA9IFlFUzsKLSAgICAg
ICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IFtfZGVsZWdhdGUgdmlkZW9F
bGVtZW50XSkKLSAgICAgICAgICAgIHZpZGVvRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKLSAg
ICAgICAgc3RhdGljIE5TQXJyYXkgKmVuZFNjcnViYmluZ01vZGVzID0gW1tOU0FycmF5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHM6TlNEZWZhdWx0UnVuTG9vcE1vZGUsIE5TTW9kYWxQYW5lbFJ1bkxv
b3BNb2RlLCBuaWxdOwotICAgICAgICAvLyBTY2hlZHVsZSAtZW5kU2NydWJiaW5nIGZvciB3aGVu
IGxlYXZpbmcgbW91c2UgdHJhY2tpbmcgbW9kZS4KLSAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVu
dFJ1bkxvb3BdIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZW5kU2NydWJiaW5nKSB0YXJnZXQ6
c2VsZiBhcmd1bWVudDpuaWwgb3JkZXI6MCBtb2RlczplbmRTY3J1YmJpbmdNb2Rlc107Ci0gICAg
fQotfQotCi0tIChmbG9hdCljdXJyZW50VGltZQotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkgOiAw
OwotfQotCi0tICh2b2lkKXNldEN1cnJlbnRUaW1lOihmbG9hdCljdXJyZW50VGltZQotewotICAg
IGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAgICByZXR1cm47Ci0gICAgW19k
ZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5zZXRDdXJyZW50VGltZShjdXJyZW50VGltZSk7Ci0gICAg
W3NlbGYgdXBkYXRlVGltZV07Ci19Ci0KLS0gKGRvdWJsZSlkdXJhdGlvbgotewotICAgIHJldHVy
biBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmR1
cmF0aW9uKCkgOiAwOwotfQotCi0tIChmbG9hdCltYXhWb2x1bWUKLXsKLSAgICAvLyBTZXQgdGhl
IHZvbHVtZSBzbGlkZXIgcmVzb2x1dGlvbgotICAgIHJldHVybiAxMDA7Ci19Ci0KLS0gKHZvaWQp
dm9sdW1lQ2hhbmdlZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7Ci0g
ICAgW3NlbGYgc2V0Vm9sdW1lOltfdm9sdW1lU2xpZGVyIGZsb2F0VmFsdWVdXTsKLX0KLQotLSAo
dm9pZClzZXRWb2x1bWVUb1plcm86KGlkKXNlbmRlcgotewotICAgIFVOVVNFRF9QQVJBTShzZW5k
ZXIpOwotICAgIFtzZWxmIHNldFZvbHVtZTowXTsKLX0KLQotLSAodm9pZClzZXRWb2x1bWVUb01h
eGltdW06KGlkKXNlbmRlcgotewotICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtzZWxm
IHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLX0KLQotLSAodm9pZClkZWNyZW1lbnRWb2x1
bWUKLXsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZmxvYXQgdm9sdW1lID0gW3NlbGYgdm9sdW1lXSAtIDEwOwotICAgIFtzZWxmIHNl
dFZvbHVtZTpNQVgodm9sdW1lLCAwKV07Ci19Ci0KLS0gKHZvaWQpaW5jcmVtZW50Vm9sdW1lCi17
Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGZsb2F0IHZvbHVtZSA9IFtzZWxmIHZvbHVtZV0gKyAxMDsKLSAgICBbc2VsZiBzZXRWb2x1
bWU6c3RkOjptaW4odm9sdW1lLCBbc2VsZiBtYXhWb2x1bWVdKV07Ci19Ci0KLS0gKGZsb2F0KXZv
bHVtZQotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRl
IHZpZGVvRWxlbWVudF0tPnZvbHVtZSgpICogW3NlbGYgbWF4Vm9sdW1lXSA6IDA7Ci19Ci0KLS0g
KHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWUKLXsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlk
ZW9FbGVtZW50XSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChbX2RlbGVnYXRlIHZpZGVvRWxl
bWVudF0tPm11dGVkKCkpCi0gICAgICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+c2V0TXV0
ZWQoZmFsc2UpOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+c2V0Vm9sdW1lKHZvbHVt
ZSAvIFtzZWxmIG1heFZvbHVtZV0pOwotICAgIFtzZWxmIHVwZGF0ZVZvbHVtZV07Ci19Ci0KLS0g
KHZvaWQpdXBkYXRlUGxheUJ1dHRvbgotewotICAgIFtfcGxheUJ1dHRvbiBzZXRJbnRWYWx1ZTpb
c2VsZiBwbGF5aW5nXV07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUmF0ZQotewotICAgIEJPT0wgcGxh
eWluZyA9IFtzZWxmIHBsYXlpbmddOwotCi0gICAgLy8gS2VlcCB0aGUgSFVEIHZpc2libGUgd2hl
biBwYXVzZWQuCi0gICAgaWYgKCFwbGF5aW5nKQotICAgICAgICBbc2VsZiBmYWRlV2luZG93SW5d
OwotICAgIGVsc2UgaWYgKCFfbW91c2VJc0luSFVEKSB7Ci0gICAgICAgIFtOU09iamVjdCBjYW5j
ZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0
b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07Ci0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpI
VURXaW5kb3dGYWRlT3V0RGVsYXldOwotICAgIH0KLSAgICBbc2VsZiB1cGRhdGVQbGF5QnV0dG9u
XTsKLX0KLQotLSAodm9pZCl0b2dnbGVQbGF5aW5nOihpZClzZW5kZXIKLXsKLSAgICBVTlVTRURf
UEFSQU0oc2VuZGVyKTsKLSAgICBbc2VsZiBzZXRQbGF5aW5nOiFbc2VsZiBwbGF5aW5nXV07Ci19
Ci0KLS0gKEJPT0wpcGxheWluZwotewotICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVu
dCA9IFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XTsKLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuICF2aWRlb0VsZW1lbnQtPmNhblBsYXkoKTsK
LX0KLQotLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmcKLXsKLSAgICBIVE1MVmlkZW9F
bGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07Ci0KLSAgICBp
ZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHBsYXlpbmcpCi0g
ICAgICAgIHZpZGVvRWxlbWVudC0+cGxheSgpOwotICAgIGVsc2UKLSAgICAgICAgdmlkZW9FbGVt
ZW50LT5wYXVzZSgpOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnRpbWVUb1N0cmluZyhkb3VibGUg
dGltZSkKLXsKLSAgICBBU1NFUlRfQVJHKHRpbWUsIHRpbWUgPj0gMCk7Ci0KLSAgICBpZiAoIXN0
ZDo6aXNmaW5pdGUodGltZSkpCi0gICAgICAgIHRpbWUgPSAwOwotCi0gICAgaW50IHNlY29uZHMg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0ZDo6YWJzKHRpbWUpKTsKLSAgICBpbnQgaG91cnMg
PSBzZWNvbmRzIC8gKDYwICogNjApOwotICAgIGludCBtaW51dGVzID0gKHNlY29uZHMgLyA2MCkg
JSA2MDsKLSAgICBzZWNvbmRzICU9IDYwOwotCi0gICAgaWYgKGhvdXJzKQotICAgICAgICByZXR1
cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZDolMDJkOiUwMmQiLCBob3VycywgbWlu
dXRlcywgc2Vjb25kc107Ci0KLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlMDJkOiUwMmQiLCBtaW51dGVzLCBzZWNvbmRzXTsgICAgCi19Ci0KLS0gKE5TU3RyaW5nICop
cmVtYWluaW5nVGltZVRleHQKLXsKLSAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQg
PSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07Ci0gICAgaWYgKCF2aWRlb0VsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBAIiI7Ci0KLSAgICBkb3VibGUgcmVtYWluaW5nVGltZSA9IDA7Ci0KLSAgICBp
ZiAoc3RkOjppc2Zpbml0ZSh2aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkpICYmIHN0ZDo6aXNmaW5p
dGUodmlkZW9FbGVtZW50LT5jdXJyZW50VGltZSgpKSkKLSAgICAgICAgcmVtYWluaW5nVGltZSA9
IHZpZGVvRWxlbWVudC0+ZHVyYXRpb24oKSAtIHZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKTsK
LQotICAgIHJldHVybiBbQCItIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0aW1lVG9TdHJpbmco
cmVtYWluaW5nVGltZSldOwotfQotCi0tIChOU1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dAotewot
ICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAgICByZXR1cm4gQCIiOwot
Ci0gICAgcmV0dXJuIHRpbWVUb1N0cmluZyhbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmN1cnJl
bnRUaW1lKCkpOwotfQotCi0vLyBNQVJLOiBOU1Jlc3BvbmRlcgotCi0tICh2b2lkKW1vdXNlRW50
ZXJlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50KTsK
LSAgICAvLyBNYWtlIHN1cmUgdGhlIEhVRCB3b24ndCBiZSBoaWRkZW4gZnJvbSBub3cKLSAgICBf
bW91c2VJc0luSFVEID0gWUVTOwotICAgIFtzZWxmIGZhZGVXaW5kb3dJbl07Ci19Ci0KLS0gKHZv
aWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIFVOVVNFRF9QQVJBTSh0
aGVFdmVudCk7Ci0gICAgX21vdXNlSXNJbkhVRCA9IE5POwotICAgIFtzZWxmIGZhZGVXaW5kb3dJ
bl07Ci19Ci0KLS0gKHZvaWQpcmV3aW5kOihpZClzZW5kZXIKLXsKLSAgICBVTlVTRURfUEFSQU0o
c2VuZGVyKTsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+cmV3aW5kKDMwKTsKLX0KLQotLSAo
dm9pZClmYXN0Rm9yd2FyZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7
Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAgICAgIHJldHVybjsKLX0K
LQotLSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHNlbmRlcik7Ci0gICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsK
LSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVTOwotICAgIFtfZGVsZWdhdGUgcmVxdWVzdEV4
aXRGdWxsc2NyZWVuXTsgCi19Ci0KLS8vIE1BUks6IE5TV2luZG93RGVsZWdhdGUKLQotLSAodm9p
ZCl3aW5kb3dEaWRFeHBvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRl
XTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmlj
YXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsKLSAgICBbc2VsZiB1bnNj
aGVkdWxlVGltZVVwZGF0ZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlci5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEg
KzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLmgJKHJl
dmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dB
bmltYXRpb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4K
LQotV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiA6IE5T
QW5pbWF0aW9uIHsKLUBwcml2YXRlCi0gICAgTlNSZWN0IF9pbml0aWFsRnJhbWUsIF9maW5hbEZy
YW1lLCBfcmVhbEZyYW1lOwotICAgIE5TV2luZG93ICpfd2luZG93OyAvLyAoYXNzaWduKQotICAg
IE5TQW5pbWF0aW9uICpfc3ViQW5pbWF0aW9uOyAvLyAocmV0YWluKQotICAgIE5TVGltZUludGVy
dmFsIF9oaW50ZWREdXJhdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRoSGludGVkRHVyYXRpb246KE5T
VGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGFsRnJh
bWU6KE5TUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooTlNSZWN0KWZpbmFsRnJhbWU7Ci0K
LS0gKHZvaWQpc2V0U3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbjsKLQotLSAo
TlNSZWN0KWN1cnJlbnRGcmFtZTsKLQotLy8gQmUgc3VyZSB0byBjYWxsIHNldFdpbmRvdzpuaWwg
dG8gY2xlYXIgdGhlIHdlYWsgbGluayBfd2luZG93IHdoZW4gYXBwcm9wcmlhdGUKLS0gKHZvaWQp
c2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLUBlbmQKLQotCi1XRUJDT1JFX0VYUE9SVCBA
aW50ZXJmYWNlIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gOiBOU0FuaW1hdGlvbiB7Ci1AcHJpdmF0
ZQotICAgIENHRmxvYXQgX2luaXRpYWxBbHBoYSwgX2ZpbmFsQWxwaGE7Ci0gICAgTlNXaW5kb3cg
Kl93aW5kb3c7IC8vIChhc3NpZ24pCi0gICAgQk9PTCBfaXNTdG9wcGVkOwotICAgIAotfQotLSAo
aWQpaW5pdFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dp
bmRvdyAqKXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlhbEFscGhhIGZpbmFsQWxw
aGE6KENHRmxvYXQpZmluYWxBbHBoYTsKLQotLSAoQ0dGbG9hdCljdXJyZW50QWxwaGE7Ci0KLS8v
IEJlIHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dp
bmRvdyB3aGVuIGFwcHJvcHJpYXRlCi0tICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cgKil3aW5k
b3c7Ci1AZW5kCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViV2luZG93QW5pbWF0aW9uLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxl
CiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRp
b24ubW0JKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJXaW5kb3dBbmltYXRpb24ubW0JKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotCi0jaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKLQotI2ltcG9ydCAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IENHRmxvYXQgc2xvd01vdGlv
bkZhY3RvciA9IDEwOwotCi1zdGF0aWMgTlNUaW1lSW50ZXJ2YWwgV2ViV2luZG93QW5pbWF0aW9u
RHVyYXRpb25Gcm9tRHVyYXRpb24oTlNUaW1lSW50ZXJ2YWwgZHVyYXRpb24pCi17Ci0gICAgcmV0
dXJuIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZp
ZXJGbGFnU2hpZnQpID8gZHVyYXRpb24gKiBzbG93TW90aW9uRmFjdG9yIDogZHVyYXRpb247Ci19
Ci0KLXN0YXRpYyBOU1JlY3Qgc2NhbGVkUmVjdChOU1JlY3QgX2luaXRpYWxGcmFtZSwgTlNSZWN0
IF9maW5hbEZyYW1lLCBDR0Zsb2F0IGZhY3RvcikKLXsKLSAgICBOU1JlY3QgY3VycmVudFJlY3Qg
PSBfaW5pdGlhbEZyYW1lOwotICAgIGN1cnJlbnRSZWN0Lm9yaWdpbi54ICs9IChOU01pblgoX2Zp
bmFsRnJhbWUpIC0gTlNNaW5YKF9pbml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKLSAgICBjdXJyZW50
UmVjdC5vcmlnaW4ueSArPSAoTlNNaW5ZKF9maW5hbEZyYW1lKSAtIE5TTWluWShfaW5pdGlhbEZy
YW1lKSkgKiBmYWN0b3I7Ci0gICAgY3VycmVudFJlY3Quc2l6ZS53aWR0aCArPSAoTlNXaWR0aChf
ZmluYWxGcmFtZSkgLSBOU1dpZHRoKF9pbml0aWFsRnJhbWUpKSAqIGZhY3RvcjsKLSAgICBjdXJy
ZW50UmVjdC5zaXplLmhlaWdodCArPSAoTlNIZWlnaHQoX2ZpbmFsRnJhbWUpIC0gTlNIZWlnaHQo
X2luaXRpYWxGcmFtZSkpICogZmFjdG9yOwotICAgIHJldHVybiBjdXJyZW50UmVjdDsKLX0KLQot
c3RhdGljIENHRmxvYXQgc3F1YXJlZERpc3RhbmNlKE5TUG9pbnQgcG9pbnQxLCBOU1BvaW50IHBv
aW50MikKLXsKLSAgICBDR0Zsb2F0IGRlbHRhWCA9IHBvaW50MS54IC0gcG9pbnQyLng7Ci0gICAg
Q0dGbG9hdCBkZWx0YVkgPSBwb2ludDEueSAtIHBvaW50Mi55OwotICAgIHJldHVybiBkZWx0YVgg
KiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVk7Ci19Ci0KLX0KLQotdXNpbmcgV2ViQ29yZTo6V2Vi
V2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb247Ci11c2luZyBXZWJDb3JlOjpuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0OwotdXNpbmcgV2ViQ29yZTo6c2NhbGVkUmVjdDsKLXVzaW5nIFdl
YkNvcmU6OnNxdWFyZWREaXN0YW5jZTsKLUBpbXBsZW1lbnRhdGlvbiBXZWJXaW5kb3dTY2FsZUFu
aW1hdGlvbgotCi0tIChpZClpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxv
Y2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07Ci0gICAgW3NlbGYgc2V0
RnJhbWVSYXRlOjYwXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQpaW5pdFdpdGhIaW50
ZWREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAqKXdp
bmRvdyBpbml0YWxGcmFtZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihOU1JlY3Qp
ZmluYWxGcmFtZQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2hpbnRlZER1cmF0aW9uID0gZHVyYXRpb247Ci0gICAg
X3dpbmRvdyA9IHdpbmRvdzsKLSAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOwotICAg
IF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKLSAgICBfcmVhbEZyYW1lID0gW3dpbmRvdyBmcmFt
ZV07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpIGRlYWxsb2MKLXsKLSAgICBbX3N1
YkFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQp
c2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0gICAgW3N1cGVyIHNldER1
cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07
Ci19Ci0KLS0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwotewotICAgIF93aW5k
b3cgPSB3aW5kb3c7Ci19Ci0KLS0gKGZsb2F0KWN1cnJlbnRWYWx1ZQotewotICAgIHJldHVybiBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNSAtIDAuNSAqIGNvcyhwaURvdWJsZSAqICgxIC0gW3Nl
bGYgY3VycmVudFByb2dyZXNzXSkpKTsKLX0KLQotLSAoTlNSZWN0KWN1cnJlbnRGcmFtZQotewot
ICAgIHJldHVybiBzY2FsZWRSZWN0KF9maW5hbEZyYW1lLCBfaW5pdGlhbEZyYW1lLCBbc2VsZiBj
dXJyZW50VmFsdWVdKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcFJlY3QoTlNSZWN0KiByZWN0KQot
ewotICAgIHJlY3QtPm9yaWdpbi55ID0gTlNNYXhZKFsoTlNTY3JlZW4gKilbW05TU2NyZWVuIHNj
cmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKSAtIE5TTWF4WSgqcmVjdCk7Ci19Ci0KLXN0
YXRpYyBDR1NDb25uZWN0aW9uSUQgbWFpbldpbmRvd1NlcnZlckNvbm5lY3Rpb25JRCgpCi17Ci0g
ICAgc3RhdGljIENHU0Nvbm5lY3Rpb25JRCBjZ3NJZDsKLSAgICBpZiAoIWNnc0lkKQotICAgICAg
ICBjZ3NJZCA9IENHU01haW5Db25uZWN0aW9uSUQoKTsKLSAgICByZXR1cm4gY2dzSWQ7Ci19Ci0K
LXN0YXRpYyB2b2lkIHNldFNjYWxlZEZyYW1lRm9yV2luZG93KE5TV2luZG93ICp3aW5kb3csIE5T
UmVjdCBzY2FsZUZyYW1lLCBOU1JlY3Qgbm9uU2NhbGVkRnJhbWUpCi17Ci0gICAgaWYgKE5TRXF1
YWxSZWN0cyhzY2FsZUZyYW1lLCBub25TY2FsZWRGcmFtZSkpIHsKLSNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdub25udWxs
IgotICAgICAgICBDR1NTZXRXaW5kb3dXYXJwKG1haW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQo
KSwgd2luZG93LndpbmRvd051bWJlciwgMCwgMCwgbnVsbHB0cik7Ci0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZmxvYXQgbWVz
aFsxNl07Ci0gICAgCi0gICAgZmxpcFJlY3QoJnNjYWxlRnJhbWUpOwotICAgIGZsaXBSZWN0KCZu
b25TY2FsZWRGcmFtZSk7Ci0gICAgCi0gICAgLy8gdG9wLWxlZnQgcG9pbnQgKHRvIGFuZCBmcm9t
KQotICAgIG1lc2hbMF0gPSAwOwotICAgIG1lc2hbMV0gPSAwOwotICAgIG1lc2hbMl0gPSBOU01p
blgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFszXSA9IE5TTWluWShzY2FsZUZyYW1lKTsKLSAgICAK
LSAgICAvLyB0b3AtcmlnaHQgcG9pbnQgKHRvIGFuZCBmcm9tKQotICAgIG1lc2hbNF0gPSBOU1dp
ZHRoKG5vblNjYWxlZEZyYW1lKTsKLSAgICBtZXNoWzVdID0gMDsKLSAgICBtZXNoWzZdID0gTlNN
YXhYKHNjYWxlRnJhbWUpOwotICAgIG1lc2hbN10gPSBOU01pblkoc2NhbGVGcmFtZSk7Ci0gICAg
Ci0gICAgLy8gYm90dG9tLWxlZnQgKHRvIGFuZCBmcm9tKQotICAgIG1lc2hbOF0gPSAwOwotICAg
IG1lc2hbOV0gPSBOU0hlaWdodChub25TY2FsZWRGcmFtZSk7Ci0gICAgbWVzaFsxMF0gPSBOU01p
blgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFsxMV0gPSBOU01heFkoc2NhbGVGcmFtZSk7Ci0gICAg
Ci0gICAgLy8gYm90dG9tLXJpZ2h0ICh0byBhbmQgZnJvbSkKLSAgICBtZXNoWzEyXSA9IE5TV2lk
dGgobm9uU2NhbGVkRnJhbWUpOwotICAgIG1lc2hbMTNdID0gTlNIZWlnaHQobm9uU2NhbGVkRnJh
bWUpOwotICAgIG1lc2hbMTRdID0gTlNNYXhYKHNjYWxlRnJhbWUpOwotICAgIG1lc2hbMTVdID0g
TlNNYXhZKHNjYWxlRnJhbWUpOwotICAgIAotICAgIC8vIEFwcGx5IHRoZSB3YXJwLgotICAgIENH
U1NldFdpbmRvd1dhcnAobWFpbldpbmRvd1NlcnZlckNvbm5lY3Rpb25JRCgpLCB3aW5kb3cud2lu
ZG93TnVtYmVyLCAyLCAyLCBtZXNoKTsKLX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6
KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAoIV93aW5kb3cpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFtzdXBlciBzZXRDdXJyZW50UHJvZ3Jlc3M6cHJvZ3Jlc3NdOwot
Ci0gICAgTlNSZWN0IGN1cnJlbnRSZWN0ID0gW3NlbGYgY3VycmVudEZyYW1lXTsKLSAgICBzZXRT
Y2FsZWRGcmFtZUZvcldpbmRvdyhfd2luZG93LCBjdXJyZW50UmVjdCwgX3JlYWxGcmFtZSk7Ci0g
ICAgW19zdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKLX0KLQotLSAo
dm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uCi17Ci0gICAgaWQg
b2xkQW5pbWF0aW9uID0gX3N1YkFuaW1hdGlvbjsKLSAgICBfc3ViQW5pbWF0aW9uID0gW2FuaW1h
dGlvbiByZXRhaW5dOwotICAgIFtvbGRBbmltYXRpb24gcmVsZWFzZV07Ci19Ci0KLS0gKE5TVGlt
ZUludGVydmFsKWFkZGl0aW9uYWxEdXJhdGlvbk5lZWRlZFRvUmVhY2hGaW5hbEZyYW1lCi17Ci0g
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgbWF4QWRkaXRpb25hbER1cmF0aW9uID0gMTsKLSAgICBz
dGF0aWMgY29uc3QgQ0dGbG9hdCBzcGVlZEZhY3RvciA9IDAuMDAwMWY7Ci0gICAgCi0gICAgQ0dG
bG9hdCBtYXhEaXN0ID0gc3F1YXJlZERpc3RhbmNlKF9pbml0aWFsRnJhbWUub3JpZ2luLCBfZmlu
YWxGcmFtZS5vcmlnaW4pOwotICAgIENHRmxvYXQgZGlzdDsKLSAgICAKLSAgICBkaXN0ID0gc3F1
YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9p
bml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9m
aW5hbEZyYW1lKSkpOwotICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKLSAgICAgICAgbWF4RGlzdCA9
IGRpc3Q7Ci0gICAgCi0gICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShOU01ha2VQb2ludChOU01h
eFgoX2luaXRpYWxGcmFtZSksIE5TTWF4WShfaW5pdGlhbEZyYW1lKSksIE5TTWFrZVBvaW50KE5T
TWF4WChfZmluYWxGcmFtZSksIE5TTWF4WShfZmluYWxGcmFtZSkpKTsKLSAgICBpZiAoZGlzdCA+
IG1heERpc3QpCi0gICAgICAgIG1heERpc3QgPSBkaXN0OwotICAgIAotICAgIGRpc3QgPSBzcXVh
cmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJhbWUpLCBOU01pblkoX2lu
aXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJhbWUpLCBOU01pblkoX2Zp
bmFsRnJhbWUpKSk7Ci0gICAgaWYgKGRpc3QgPiBtYXhEaXN0KQotICAgICAgICBtYXhEaXN0ID0g
ZGlzdDsKLSAgICAKLSAgICByZXR1cm4gTUlOKHNxcnQobWF4RGlzdCkgKiBzcGVlZEZhY3Rvciwg
bWF4QWRkaXRpb25hbER1cmF0aW9uKTsgICAgCi19Ci0KLS0gKHZvaWQpc3RhcnRBbmltYXRpb24K
LXsKLSAgICAvLyBDb21wdXRlIGV4dHJhIHRpbWUKLSAgICBpZiAoX2hpbnRlZER1cmF0aW9uKQot
ICAgICAgICBbc2VsZiBzZXREdXJhdGlvbjpfaGludGVkRHVyYXRpb24gKyBbc2VsZiBhZGRpdGlv
bmFsRHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZV1dOwotICAgIFtzdXBlciBzdGFydEFu
aW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewotICAgIF93aW5kb3cgPSBu
aWw7Ci0gICAgW3N1cGVyIHN0b3BBbmltYXRpb25dOwotICAgIFtfc3ViQW5pbWF0aW9uIHN0b3BB
bmltYXRpb25dOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJXaW5kb3dGYWRlQW5p
bWF0aW9uCi0KLS0gKGlkKWluaXQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBzZXRBbmltYXRpb25CbG9j
a2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsKLSAgICBbc2VsZiBzZXRG
cmFtZVJhdGU6NjBdOwotICAgIFtzZWxmIHNldEFuaW1hdGlvbkN1cnZlOk5TQW5pbWF0aW9uRWFz
ZUluT3V0XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQpaW5pdFdpdGhEdXJhdGlvbjoo
TlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0aWFs
QWxwaGE6KENHRmxvYXQpaW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxBbHBo
YQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7ICAgIAotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci0gICAgX2luaXRpYWxBbHBoYSA9
IGluaXRpYWxBbHBoYTsKLSAgICBfZmluYWxBbHBoYSA9IGZpbmFsQWxwaGE7Ci0gICAgW3NlbGYg
c2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNl
dER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAgIFtzdXBlciBzZXREdXJh
dGlvbjpXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlvbihkdXJhdGlvbildOwot
fQotCi0tIChDR0Zsb2F0KWN1cnJlbnRBbHBoYQotewotICAgIHJldHVybiBNQVgoMCwgTUlOKDEs
IF9pbml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9maW5hbEFscGhhIC0gX2lu
aXRpYWxBbHBoYSkpKTsKLX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0
aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAoX2lzU3RvcHBlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKF93aW5kb3cpOwotICAgIFtzdXBlciBzZXRDdXJyZW50UHJvZ3Jl
c3M6cHJvZ3Jlc3NdOwotCi0gICAgQ0dTU2V0V2luZG93QWxwaGEobWFpbldpbmRvd1NlcnZlckNv
bm5lY3Rpb25JRCgpLCBfd2luZG93LndpbmRvd051bWJlciwgc2VsZi5jdXJyZW50QWxwaGEpOwot
fQotCi0tICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cqKXdpbmRvdwotewotICAgIF93aW5kb3cg
PSB3aW5kb3c7Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewotICAgIC8vIFRoaXMgaXMg
cmVsZXZhbnQgd2hlbiB3ZSBhcmUgYSBzdWIgYW5pbWF0aW9uIG9mIGEgc2NhbGUgYW5pbWF0aW9u
LgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgaG9zdGVkIGluIHRoZSBhbmltYXRlZCB0aHJl
YWQgb2YgdGhlIHBhcmVudAotICAgIC8vIGFuZCBldmVuIGFmdGVyIFtzdXBlciBzdG9wQW5pbWF0
aW9uXSwgdGhlIHBhcmVudCBtaWdodCBjYWxsCi0gICAgLy8gc2V0Q3VycnJlbnRQcm9ncmVzcy4K
LSAgICBfaXNTdG9wcGVkID0gWUVTOwotCi0gICAgW3N1cGVyIHN0b3BBbmltYXRpb25dOwotfQot
Ci1AZW5kCi0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJXaW5kb3dBbmltYXRpb24ubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxl
CiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MjkwKQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0w
Mi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20gV2ViQ29yZSB0byBXZWJLaXRMZWdh
Y3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2
MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBp
cyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBhIGZldyByZWZlcmVuY2VzIHRvIE5T
QXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0uCisgICAgICAgIElkZWFsbHks
IHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBX
ZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOC0wMS0yMyAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVzZSBD
b21wbGV0aW9uSGFuZGxlcnMgZm9yIFJlc291cmNlSGFuZGxlQ2xpZW50OjpkaWRSZWNlaXZlUmVz
cG9uc2VBc3luYwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dl
YktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjgyNzgpCisr
KyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NzQsNiArNzc0LDkgQEAKIAkJQzBCODhFOEIxMEEwOEYz
RDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBCODhFOEExMEEwOEYzRDAwRkJCM0Y1
IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMwQzVCM0VFMTE3N0E0QTAwMDJCMEFFRiAvKiBX
ZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMwQzVCM0VDMTE3N0E0QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVu
dFVSTFBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDMEM1QjNFRjExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBD
NUIzRUQxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5tbSAqLzsg
fTsKKwkJQzFEODExMjgyMDJDRDgwMDAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bSAqLzsgfTsKKwkJQzFEODExMkIyMDJDRENDNDAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMUQ4MTEyOTIwMkNEQ0MyMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKKwkJQzFEODExMkUyMDJDRUQwODAwRUU3
NEY5IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMxRDgxMTJEMjAyQ0VEMDcwMEVFNzRGOSAvKiBXZWJXaW5kb3dB
bmltYXRpb24ubW0gKi87IH07CiAJCUNEOEJGQ0U3MTU1MzEyMjQwMDVBRkIyNSAvKiBXZWJLaXRG
dWxsU2NyZWVuTGlzdGVuZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNjcmVlbkxp
c3RlbmVyLm1tICovOyB9OwogCQlDRDhCRkNFODE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVs
bFNjcmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3Rl
bmVyLmggKi87IH07CiAJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgg
Ki87IH07CkBAIC0xNTI1LDYgKzE1MjgsMTIgQEAKIAkJQzBCODhFOEExMEEwOEYzRDAwRkJCM0Y1
IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzBDNUIzRUMxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50
VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUIzRUQx
MTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMjYyMDJDRDdGRTAwRUU3NEY5
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRGOSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMkEyMDJDRENDMzAwRUU3NEY5IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyQzIwMkNFRDA2MDBFRTc0RjkgLyogV2ViV2lu
ZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRv
d0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyRDIwMkNF
RDA3MDBFRTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNj
cmVlbkxpc3RlbmVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEZ1bGxTY3JlZW5MaXN0ZW5l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE2MkFFMDEyNUY4N0MyMDA3RkQx
MTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIwNzAsMTIgKzIwNzksMTggQEAKIAkJCQlGODM0QUFENjBFNjRCMUM3MDBFMjcz
N0MgLyogV2ViVGV4dEl0ZXJhdG9yLm1tICovLAogCQkJCTUxNUUyN0NDMDQ1OEM4NjUwMENBMkQz
QSAvKiBXZWJVSURlbGVnYXRlLmggKi8sCiAJCQkJNjVBN0Q0NEEwNTY4QUIyNjAwRTcwRUY2IC8q
IFdlYlVJRGVsZWdhdGVQcml2YXRlLmggKi8sCisJCQkJQzFEODExMjYyMDJDRDdGRTAwRUU3NEY5
IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKKwkJCQlDMUQ4MTEyNzIwMkNE
ODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLywKKwkJCQlD
MUQ4MTEyQTIwMkNEQ0MzMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlci5oICovLAorCQkJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRGOSAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovLAogCQkJCTUxQThCNTc5MDQyODM0Rjcw
MENBMkQzQSAvKiBXZWJWaWV3LmggKi8sCiAJCQkJNTFBOEI1N0EwNDI4MzRGNzAwQ0EyRDNBIC8q
IFdlYlZpZXcubW0gKi8sCiAJCQkJQkMyRTQ2NEIwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdE
YXRhLmggKi8sCiAJCQkJQkMyRTQ2NEMwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1t
ICovLAogCQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2NzAxRSAvKiBXZWJWaWV3SW50ZXJuYWwuaCAq
LywKIAkJCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyogV2ViVmlld1ByaXZhdGUuaCAqLywK
KwkJCQlDMUQ4MTEyQzIwMkNFRDA2MDBFRTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8s
CisJCQkJQzFEODExMkQyMDJDRUQwNzAwRUU3NEY5IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAq
LywKIAkJCSk7CiAJCQluYW1lID0gV2ViVmlldzsKIAkJCXBhdGggPSBtYWMvV2ViVmlldzsKQEAg
LTM2NzIsMTEgKzM2ODcsMTQgQEAKIAkJCQlDMEM1QjNFRjExNzdBNEEwMDAyQjBBRUYgLyogV2Vi
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwRjU0OUMxN0Yx
RTQyQjAwMTY5RTA0IC8qIFdlYlVzZXJNZWRpYUNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTQ2MThERkY5MURFRjc2MEEwMDMzQzNBQSAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUMxRDgxMTI4MjAyQ0Q4MDAwMEVFNzRGOSAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQzFEODExMkIyMDJD
RENDNDAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTEwNzA4MjRCRjAxMDA4REYwMzggLyogV2ViVmlldy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUJDMkU0NjRFMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3
RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MzBDMTJDMUIyQzVERjcwMERFQTAxRCAvKiBX
ZWJWaWV3R3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFENzcxODIwMzAwRTAwMzY4
ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzcxNzZF
MUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJQzFEODExMkUyMDJDRUQwODAwRUU3NEY5IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMzcwOSw5ICszNzI3LDcgQEAKIAkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gMUM5MDRGRDIwQkE5REQwRjAwODFFOUQwIC8qIFdlYktpdExlZ2FjeS54Y2Nv
bmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJREVCVUdfREVGSU5FUyA9ICIkKERF
QlVHX0RFRklORVNfZGVidWcpIEVOQUJMRV9XRUJLSVRfVU5TRVRfRFlMRF9GUkFNRVdPUktfUEFU
SCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICgKLQkJCQkJIiQoT1RIRVJfTERGTEFHUykiLAotCQkJ
CSk7CisJCQkJT1RIRVJfTERGTEFHUyA9ICIkKE9USEVSX0xERkxBR1MpIjsKIAkJCX07CiAJCQlu
YW1lID0gRGVidWc7CiAJCX07CkBAIC0zNzIwLDkgKzM3MzYsNyBAQAogCQkJYmFzZUNvbmZpZ3Vy
YXRpb25SZWZlcmVuY2UgPSAxQzkwNEZEMjBCQTlERDBGMDA4MUU5RDAgLyogV2ViS2l0TGVnYWN5
LnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlERUJVR19ERUZJTkVTID0g
IiQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpIEVOQUJMRV9XRUJLSVRfVU5TRVRf
RFlMRF9GUkFNRVdPUktfUEFUSCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICgKLQkJCQkJIiQoT1RI
RVJfTERGTEFHUykiLAotCQkJCSk7CisJCQkJT1RIRVJfTERGTEFHUyA9ICIkKE9USEVSX0xERkxB
R1MpIjsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKQEAgLTM3MzEsOSArMzc0NSw3
IEBACiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDFDOTA0RkQyMEJBOUREMEYwMDgx
RTlEMCAvKiBXZWJLaXRMZWdhY3kueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0gewog
CQkJCUJVSUxEX1ZBUklBTlRTID0gbm9ybWFsOwotCQkJCU9USEVSX0xERkxBR1MgPSAoCi0JCQkJ
CSIkKE9USEVSX0xERkxBR1MpIiwKLQkJCQkpOworCQkJCU9USEVSX0xERkxBR1MgPSAiJChPVEhF
Ul9MREZMQUdTKSI7CiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CkluZGV4OiBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAor
MjAxOC0wMi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTW92ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20gV2ViQ29yZSB0byBXZWJL
aXRMZWdhY3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODI2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJdCBpcyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBhIGZldyByZWZlcmVuY2Vz
IHRvIE5TQXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0uCisgICAgICAgIElk
ZWFsbHksIHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdlYkNvcmUuCisKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oLgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbTogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
bW0uCisgICAgICAgICogV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9s
bGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmguCisgICAgICAgICogV2ViVmlldy9XZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5t
bS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICogV2ViVmlldy9XZWJX
aW5kb3dBbmltYXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYldpbmRvd0FuaW1hdGlvbi5oLgorICAgICAgICAqIFdlYlZpZXcvV2ViV2luZG93QW5pbWF0
aW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93
QW5pbWF0aW9uLm1tLgorCiAyMDE4LTAxLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBFdmVudCBpbXByb3ZlbWVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5t
bQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2ltcG9ydCAiV2ViTlNXaW5kb3dFeHRyYXMuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2Vz
UHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJXaW5k
b3dBbmltYXRpb24uaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KQEAgLTQyLDcg
KzQzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5XaW5k
b3cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViV2luZG93QW5pbWF0aW9uLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KIApJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyODI3OCkJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaDoyMjgyNzgp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShW
SURFTykKKworI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgorI2ltcG9ydCA8
QXBwS2l0L05TU2NyZWVuLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBQ
QUwgeworY2xhc3MgU2xlZXBEaXNhYmxlcjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgSFRNTFZpZGVvRWxlbWVudDsKK30KKworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJEZWxlZ2F0ZTsKK0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250
cm9sbGVyOworQGNsYXNzIFdlYldpbmRvd0ZhZGVBbmltYXRpb247CitAY2xhc3MgQ0FMYXllcjsK
KworV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
IDogTlNXaW5kb3dDb250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgUmVmUHRyPFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7IC8vIChyZXRhaW4pCisgICAgaWQgPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRlOyAvLyAoYXNzaWduKQor
CisgICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdzsgLy8gKHJldGFpbikK
KyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyICpfaHVkQ29udHJvbGxl
cjsgLy8gKHJldGFpbikKKworICAgIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gKl9mYWRlQW5pbWF0
aW9uOyAvLyAocmV0YWluKQorCisgICAgQk9PTCBfaXNFbmRpbmdGdWxsc2NyZWVuOworICAgIEJP
T0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQUw6OlNs
ZWVwRGlzYWJsZXI+IF9kaXNwbGF5U2xlZXBEaXNhYmxlcjsKK30KKworLSAoaWQgPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7CistICh2b2lkKXNldERlbGVn
YXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsK
KworLSAodm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5ZXI7CistICh2b2lkKXNl
dFZpZGVvRWxlbWVudDooV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50Owor
LSAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50OworCistICh2b2lkKWVu
dGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47CistICh2b2lkKWV4aXRGdWxsc2NyZWVu
OworCitAZW5kCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIAog
I2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPKQogCi0jaW1wb3J0IDxBcHBLaXQvTlNX
aW5kb3dDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNTY3JlZW4uaD4KKyNpbXBvcnQg
PEFwcEtpdC9OU1dpbmRvd0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFBBTCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCShyZXZp
c2lvbiAyMjgyNzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tOjIyODI3OCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIuaCIKKworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5o
IgorI2ltcG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZQbGF5ZXJMYXllci5oPgorI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBv
cnQgPHBhbC9zeXN0ZW0vU2xlZXBEaXNhYmxlci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK3VzaW5nIFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQ7CisKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRl
Y2xhcmF0aW9ucyIKKyNlbmRpZgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikK
K1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCisKK3VzaW5nIFdl
YkNvcmU6OlBsYXRmb3JtTWVkaWE7CitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbldpbmRv
dyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+Cit7CisgICAgU0VMIF9jb250cm9sbGVy
QWN0aW9uT25BbmltYXRpb25FbmQ7CisgICAgV2ViV2luZG93U2NhbGVBbmltYXRpb24gKl9mdWxs
c2NyZWVuQW5pbWF0aW9uOyAvLyAocmV0YWluKQorfQorLSAodm9pZClhbmltYXRlRnJvbVJlY3Q6
KE5TUmVjdClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3aXRoU3ViQW5pbWF0aW9u
OihOU0FuaW1hdGlvbiAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0aW9uOihTRUwpY29udHJv
bGxlckFjdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyKEhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSkgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0
aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247CistICh2b2lkKXVwZGF0ZU1lbnVBbmREb2NrRm9y
RnVsbHNjcmVlbjsKKy0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRpb25zOworQGVuZAorCitAaW50
ZXJmYWNlIE5TV2luZG93KElzT25BY3RpdmVTcGFjZUFkZGl0aW9uRm9yVGlnZXJBbmRMZW9wYXJk
KQorLSAoQk9PTClpc09uQWN0aXZlU3BhY2U7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCistIChpZClpbml0Cit7CisgICAgLy8gRG8gbm90IGRl
ZmVyIHdpbmRvdyBjcmVhdGlvbiwgdG8gbWFrZSBzdXJlIC13aW5kb3dOdW1iZXIgaXMgY3JlYXRl
ZCAobmVlZGVkIGJ5IFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uKS4KKyAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJl
Y3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5T
QmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiB3aW5kb3dEaWRMb2FkXTsKKyAgICByZXR1
cm4gc2VsZjsKKyAgICAKK30KKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2JhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93KTsKKyAgICBBU1NFUlQoIV9mYWRlQW5pbWF0aW9uKTsKKyAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNl
bGZdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoV2ViVmlkZW9GdWxsc2NyZWVuV2lu
ZG93ICopZnVsbHNjcmVlbldpbmRvdworeworICAgIHJldHVybiAoV2ViVmlkZW9GdWxsc2NyZWVu
V2luZG93ICopW3N1cGVyIHdpbmRvd107Cit9CisKKy0gKHZvaWQpc2V0dXBWaWRlb092ZXJsYXk6
KENBTGF5ZXIgKilsYXllcgoreworICAgIFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqd2luZG93
ID0gW3NlbGYgZnVsbHNjcmVlbldpbmRvd107CisgICAgWyhOU1ZpZXcqKVt3aW5kb3cgY29udGVu
dFZpZXddIHNldExheWVyOmxheWVyXTsKKyAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gc2V0V2Fu
dHNMYXllcjpZRVNdOworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQKK3sKKyAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddOworICAg
IFt3aW5kb3cgc2V0SGFzU2hhZG93OllFU107IC8vIFRoaXMgaXMgbmljZXIgd2l0aCBhIHNoYWRv
dy4KKyAgICBbd2luZG93IHNldExldmVsOk5TUG9wVXBNZW51V2luZG93TGV2ZWwtMV07CisgICAg
WyhOU1ZpZXcqKVt3aW5kb3cgY29udGVudFZpZXddIHNldExheWVyOltDQUxheWVyIGxheWVyXV07
CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6WUVTXTsKKworICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6KSBuYW1lOk5TQXBwbGlj
YXRpb25EaWRSZXNpZ25BY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKKyAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKGFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczopIG5hbWU6
TlNBcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnNOb3RpZmljYXRpb24gb2JqZWN0
Ok5TQXBwXTsKK30KKworLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50Cit7CisgICAg
cmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50
OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKK3sKKyAgICBfdmlkZW9FbGVtZW50ID0g
dmlkZW9FbGVtZW50OworCisgICAgaWYgKCFfdmlkZW9FbGVtZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoW3NlbGYgaXNXaW5kb3dMb2FkZWRdKSB7CisgICAgICAgIGlmIChfdmlkZW9F
bGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpBVkZvdW5kYXRp
b25NZWRpYVBsYXllclR5cGUpIHsKKyAgICAgICAgICAgIEFWUGxheWVyICpwbGF5ZXIgPSBfdmlk
ZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEuYXZmTWVkaWFQbGF5ZXI7CisgICAgICAg
ICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJMYXllcj4gbGF5ZXIgPSBhZG9wdE5TKFthbGxvY0FWUGxh
eWVyTGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICAgICAgICAgIFtzZWxmIHNldHVwVmlkZW9P
dmVybGF5OmxheWVyLmdldCgpXTsKKyAgICAgICAgICAgIFtsYXllci5nZXQoKSBzZXRQbGF5ZXI6
cGxheWVyXTsKKworICAgICAgICAgICAgW3BsYXllciBhZGRPYnNlcnZlcjpzZWxmIGZvcktleVBh
dGg6QCJyYXRlIiBvcHRpb25zOjAgY29udGV4dDpudWxscHRyXTsKKyAgICAgICAgfQorICAgIH0K
K30KKworLSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdh
dGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQorCistICh2b2lkKXNldERlbGVnYXRlOihp
ZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAg
IF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChDR0Zsb2F0KWNsZWFyRmFkZUFuaW1hdGlv
bgoreworICAgIFtfZmFkZUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKKyAgICBDR0Zsb2F0IHBy
ZXZpb3VzQWxwaGEgPSBbX2ZhZGVBbmltYXRpb24gY3VycmVudEFscGhhXTsKKyAgICBbX2ZhZGVB
bmltYXRpb24gc2V0V2luZG93Om5pbF07CisgICAgW19mYWRlQW5pbWF0aW9uIHJlbGVhc2VdOwor
ICAgIF9mYWRlQW5pbWF0aW9uID0gbmlsOworICAgIHJldHVybiBwcmV2aW91c0FscGhhOworfQor
CistICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCit7CisgICAgQ0FMYXllciAqbGF5ZXIg
PSBbKE5TVmlldyopW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGxheWVyXTsKKyAgICBpZiAo
W2xheWVyIGlzS2luZE9mQ2xhc3M6Z2V0QVZQbGF5ZXJMYXllckNsYXNzKCldKQorICAgICAgICBb
WyhBVlBsYXllckxheWVyKilsYXllciBwbGF5ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgZm9yS2V5
UGF0aDpAInJhdGUiXTsKKworICAgIFtzZWxmIGNsZWFyRmFkZUFuaW1hdGlvbl07CisgICAgW1tz
ZWxmIHdpbmRvd10gY2xvc2VdOworICAgIFtzZWxmIHNldFdpbmRvdzpuaWxdOworICAgIFtzZWxm
IHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07ICAgCisgICAgW3NlbGYgdXBkYXRlUG93
ZXJBc3NlcnRpb25zXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAg
ICBbX2h1ZENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgX2h1ZENvbnRyb2xsZXIgPSBuaWw7Cisg
ICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBjbG9zZV07CisgICAgW19iYWNrZ3JvdW5k
RnVsbHNjcmVlbldpbmRvdyByZWxlYXNlXTsKKyAgICBfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgPSBuaWw7CisgICAgCisgICAgW3NlbGYgYXV0b3JlbGVhc2VdOyAvLyBBc3NvY2lhdGVkIC1y
ZXRhaW4gaXMgaW4gLWV4aXRGdWxsc2NyZWVuLgorICAgIF9pc0VuZGluZ0Z1bGxzY3JlZW4gPSBO
TzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiBj
bGVhckZhZGVBbmltYXRpb25dOworCisgICAgQVNTRVJUKCFfaHVkQ29udHJvbGxlcik7CisgICAg
X2h1ZENvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIg
YWxsb2NdIGluaXRdOworICAgIFtfaHVkQ29udHJvbGxlciBzZXREZWxlZ2F0ZTpzZWxmXTsKKwor
ICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07CisgICAgW3NlbGYgdXBk
YXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1v
dmVzOllFU107CisgICAgCisgICAgLy8gR2l2ZSB0aGUgSFVEIGtleWJvYXJkIGZvY3VzIGluaXRp
YWxseQorICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOworfQorCistIChOU1JlY3Qp
dmlkZW9FbGVtZW50UmVjdAoreworICAgIHJldHVybiBfdmlkZW9FbGVtZW50LT5zY3JlZW5SZWN0
KCk7Cit9CisKKy0gKHZvaWQpYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6KE5TTm90aWZpY2F0
aW9uKilub3RpZmljYXRpb24KK3sgICAKKyAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsK
KyAgICBOU1dpbmRvdyogZnVsbHNjcmVlbldpbmRvdyA9IFtzZWxmIGZ1bGxzY3JlZW5XaW5kb3dd
OworCisgICAgLy8gUmVwbGljYXRlIHRoZSBRdWlja1RpbWUgUGxheWVyIChYKSBiZWhhdmlvciB3
aGVuIGxvc2luZyBhY3RpdmUgYXBwbGljYXRpb24gc3RhdHVzOgorICAgIC8vIElzIHRoZSBmdWxs
c2NyZWVuIHNjcmVlbiB0aGUgbWFpbiBzY3JlZW4/IChOb3RlOiB0aGlzIGNvdmVycyB0aGUgY2Fz
ZSB3aGVyZSBvbmx5IGEgCisgICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBhdmFpbGFibGUuKSAgSXMg
dGhlIGZ1bGxzY3JlZW4gc2NyZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNlPyBJRkYgc28sIAorICAg
IC8vIHRoZW4gZXhpdCBmdWxsc2NyZWVuIG1vZGUuICAgIAorICAgIGlmIChmdWxsc2NyZWVuV2lu
ZG93LnNjcmVlbiA9PSBbTlNTY3JlZW4gc2NyZWVuc11bMF0gJiYgZnVsbHNjcmVlbldpbmRvdy5v
bkFjdGl2ZVNwYWNlKQorICAgICAgICAgW3NlbGYgcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFu
aW1hdGlvbjpOT107Cit9CisgICAgICAgICAKKyAgICAgICAgIAorLy8gTUFSSzogLQorLy8gTUFS
SzogRXhwb3NlZCBJbnRlcmZhY2UKKworc3RhdGljIE5TUmVjdCBmcmFtZUV4cGFuZGVkVG9SYXRp
b09mRnJhbWUoTlNSZWN0IGZyYW1lVG9FeHBhbmQsIE5TUmVjdCBmcmFtZSkKK3sKKyAgICAvLyBL
ZWVwIGEgY29uc3RyYWluZWQgYXNwZWN0IHJhdGlvIGZvciB0aGUgZGVzdGluYXRpb24gd2luZG93
CisgICAgTlNSZWN0IHJlc3VsdCA9IGZyYW1lVG9FeHBhbmQ7CisgICAgQ0dGbG9hdCBuZXdSYXRp
byA9IGZyYW1lLnNpemUud2lkdGggLyBmcmFtZS5zaXplLmhlaWdodDsKKyAgICBDR0Zsb2F0IG9y
aWdpbmFsUmF0aW8gPSBmcmFtZVRvRXhwYW5kLnNpemUud2lkdGggLyBmcmFtZVRvRXhwYW5kLnNp
emUuaGVpZ2h0OworICAgIGlmIChuZXdSYXRpbyA+IG9yaWdpbmFsUmF0aW8pIHsKKyAgICAgICAg
Q0dGbG9hdCBuZXdXaWR0aCA9IG5ld1JhdGlvICogZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsK
KyAgICAgICAgQ0dGbG9hdCBkaWZmID0gbmV3V2lkdGggLSBmcmFtZVRvRXhwYW5kLnNpemUud2lk
dGg7CisgICAgICAgIHJlc3VsdC5zaXplLndpZHRoID0gbmV3V2lkdGg7CisgICAgICAgIHJlc3Vs
dC5vcmlnaW4ueCAtPSBkaWZmIC8gMjsKKyAgICB9IGVsc2UgeworICAgICAgICBDR0Zsb2F0IG5l
d0hlaWdodCA9IGZyYW1lVG9FeHBhbmQuc2l6ZS53aWR0aCAvIG5ld1JhdGlvOworICAgICAgICBD
R0Zsb2F0IGRpZmYgPSBuZXdIZWlnaHQgLSBmcmFtZVRvRXhwYW5kLnNpemUuaGVpZ2h0OworICAg
ICAgICByZXN1bHQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7CisgICAgICAgIHJlc3VsdC5vcmln
aW4ueSAtPSBkaWZmIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IE5TV2luZG93ICpjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhOU1JlY3QgZnJhbWUs
IGludCBsZXZlbCkKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10g
aW5pdFdpdGhDb250ZW50UmVjdDpmcmFtZSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFz
ayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIFt3aW5kb3cg
c2V0T3BhcXVlOllFU107CisgICAgW3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3Ig
YmxhY2tDb2xvcl1dOworICAgIFt3aW5kb3cgc2V0TGV2ZWw6bGV2ZWxdOworICAgIFt3aW5kb3cg
c2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICByZXR1cm4gd2luZG93OworfQorCistICh2
b2lkKXNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOihCT09MKWZhZGVJbgorewor
ICAgIENHRmxvYXQgaW5pdGlhbEFscGhhID0gZmFkZUluID8gMCA6IDE7CisgICAgaWYgKF9mYWRl
QW5pbWF0aW9uKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdXBwb3J0IHF1ZXVpbmcgYW5p
bWF0aW9uIGlmIHRoZSBwcmV2aW91cyBvbmUgaXNuJ3Qgb3ZlciB5ZXQKKyAgICAgICAgaW5pdGlh
bEFscGhhID0gW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKyAgICB9CisgICAgaWYgKCFfZm9y
Y2VEaXNhYmxlQW5pbWF0aW9uKQorICAgICAgICBfZmFkZUFuaW1hdGlvbiA9IFtbV2ViV2luZG93
RmFkZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjowLjIgd2luZG93Ol9iYWNrZ3Jv
dW5kRnVsbHNjcmVlbldpbmRvdyBpbml0aWFsQWxwaGE6aW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6
ZmFkZUluID8gMSA6IDBdOworfQorCistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4g
KilzY3JlZW4KK3sKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgc2NyZWVuID0gW05TU2NyZWVu
IG1haW5TY3JlZW5dOworCisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3NjcmVlbiBmcmFtZV07Cisg
ICAgTlNSZWN0IGZyYW1lID0gZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZyYW1lKFtzZWxmIHZpZGVv
RWxlbWVudFJlY3RdLCBlbmRGcmFtZSk7CisKKyAgICAvLyBDcmVhdGUgYSBibGFjayB3aW5kb3cg
aWYgbmVlZGVkCisgICAgaWYgKCFfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cpCisgICAgICAg
IF9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyA9IGNyZWF0ZUJhY2tncm91bmRGdWxsc2NyZWVu
V2luZG93KFtzY3JlZW4gZnJhbWVdLCBbW3NlbGYgd2luZG93XSBsZXZlbF0tMSk7CisgICAgZWxz
ZQorICAgICAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IHNldEZyYW1lOltzY3JlZW4g
ZnJhbWVdIGRpc3BsYXk6Tk9dOworCisgICAgW3NlbGYgc2V0dXBGYWRlQW5pbWF0aW9uSWZOZWVk
ZWRBbmRGYWRlSW46WUVTXTsKKyAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikgeworICAg
ICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmltYXRpb24KKyAgICAgICAgZnJhbWUg
PSBOU1plcm9SZWN0OworICAgIH0KKyAgICBbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0
ZUZyb21SZWN0OmZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRoU3ViQW5pbWF0aW9uOl9mYWRlQW5p
bWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdpbmRvd0RpZEVudGVyRnVsbHNjcmVl
bildOworCisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBvcmRlcldpbmRvdzpOU1dp
bmRvd0JlbG93IHJlbGF0aXZlVG86W1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIHdpbmRvd051bWJl
cl1dOworfQorCistICh2b2lkKWV4aXRGdWxsc2NyZWVuCit7CisgICAgaWYgKF9pc0VuZGluZ0Z1
bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVT
OworICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CisKKyAgICBOU1JlY3QgZW5kRnJh
bWUgPSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKKworICAgIFtzZWxmIHNldHVwRmFkZUFuaW1h
dGlvbklmTmVlZGVkQW5kRmFkZUluOk5PXTsKKyAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlv
bikgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmltYXRpb24KKyAgICAg
ICAgZW5kRnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICAKKyAgICAvLyBXZSBoYXZlIHRv
IHJldGFpbiBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFsaXZlIGZvciB0aGUgZW5k
IG9mIHRoZSBhbmltYXRpb24uCisgICAgLy8gSWYgb3VyIG93bmVyIHJlbGVhc2VzIHVzIHdlIGNv
dWxkIGNyYXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorICAgIC8vIEJhbGFuY2VkIGluIHdp
bmRvd0RpZEV4aXRGdWxsc2NyZWVuCisgICAgW3NlbGYgcmV0YWluXTsgICAgCisKKyAgICBOU1Jl
Y3Qgc3RhcnRGcmFtZSA9IFtbc2VsZiB3aW5kb3ddIGZyYW1lXTsKKyAgICBlbmRGcmFtZSA9IGZy
YW1lRXhwYW5kZWRUb1JhdGlvT2ZGcmFtZShlbmRGcmFtZSwgc3RhcnRGcmFtZSk7CisKKyAgICBb
W3NlbGYgZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0ZUZyb21SZWN0OnN0YXJ0RnJhbWUgdG9SZWN0
OmVuZEZyYW1lIHdpdGhTdWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24gY29udHJvbGxlckFjdGlv
bjpAc2VsZWN0b3Iod2luZG93RGlkRXhpdEZ1bGxzY3JlZW4pXTsKK30KKworLSAodm9pZClhcHBs
aWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KE5TTm90aWZpY2F0aW9uKilub3RpZmlj
YXRpb24KK3sKKyAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsKKyAgICAvLyBUaGUgdXNl
ciBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBtYWluIHNjcmVlbiBieSBtb3ZpbmcgdGhlIG1lbnUgYmFy
LCBvciB0aGV5IG1heSBoYXZlIGNoYW5nZWQKKyAgICAvLyB0aGUgRG9jaydzIHNpemUgb3IgbG9j
YXRpb24sIG9yIHRoZXkgbWF5IGhhdmUgY2hhbmdlZCB0aGUgZnVsbHNjcmVlbiBzY3JlZW4ncyBk
aW1lbnNpb25zLiAgCisgICAgLy8gVXBkYXRlIG91ciBwcmVzZW50YXRpb24gcGFyYW1ldGVycywg
YW5kIGVuc3VyZSB0aGF0IHRoZSBmdWxsIHNjcmVlbiB3aW5kb3cgb2NjdXBpZXMgdGhlIAorICAg
IC8vIGVudGlyZSBzY3JlZW46CisgICAgW3NlbGYgdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2Ny
ZWVuXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTpbW1tzZWxmIHdpbmRvd10gc2NyZWVu
XSBmcmFtZV0gZGlzcGxheTpZRVNdOworfQorCistICh2b2lkKXVwZGF0ZU1lbnVBbmREb2NrRm9y
RnVsbHNjcmVlbgoreworICAgIC8vIE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25PcHRpb25zIGlz
IGF2YWlsYWJsZSBvbiA+IDEwLjYgb25seToKKyAgICBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9u
T3B0aW9ucyBvcHRpb25zID0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkRlZmF1bHQ7CisgICAg
TlNTY3JlZW4qIGZ1bGxzY3JlZW5TY3JlZW4gPSBbW3NlbGYgd2luZG93XSBzY3JlZW5dOworCisg
ICAgaWYgKCFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CisgICAgICAgIC8vIEF1dG8taGlkZSB0aGUg
bWVudSBiYXIgaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyOgor
ICAgICAgICAvLyBOT1RFOiBpZiB0aGUgZnVsbHNjcmVlblNjcmVlbiBjb250YWlucyB0aGUgbWVu
dSBiYXIgYnV0IG5vdCB0aGUgZG9jaywgd2UgbXVzdCBzdGlsbCAKKyAgICAgICAgLy8gYXV0by1o
aWRlIHRoZSBkb2NrLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCisgICAgICAgIGlm
IChbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gPT0gZnVsbHNjcmVlblNjcmVl
bikKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gKE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25BdXRv
SGlkZU1lbnVCYXIgfCBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVEb2NrKTsKKyAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgc2NyZWVuIGNvbnRhaW5zIHRoZSBkb2NrIGJ5
IGNvbXBhcmluZyB0aGUgc2NyZWVuJ3MgZnJhbWUgdG8gaXRzCisgICAgICAgIC8vIHZpc2libGVG
cmFtZTsgaWYgYSBkb2NrIGlzIHByZXNlbnQsIHRoZSB2aXNpYmxlRnJhbWUgd2lsbCBkaWZmZXIu
ICBJZiB0aGUgY3VycmVudCBzY3JlZW4KKyAgICAgICAgLy8gY29udGFpbnMgdGhlIGRvY2ssIGhp
ZGUgaXQuCisgICAgICAgIGVsc2UgaWYgKCFOU0VxdWFsUmVjdHMoW2Z1bGxzY3JlZW5TY3JlZW4g
ZnJhbWVdLCBbZnVsbHNjcmVlblNjcmVlbiB2aXNpYmxlRnJhbWVdKSkKKyAgICAgICAgICAgIG9w
dGlvbnMgfD0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jazsKKyAgICB9CisK
KyAgICBOU0FwcC5wcmVzZW50YXRpb25PcHRpb25zID0gb3B0aW9uczsKK30KKworLSAodm9pZCl1
cGRhdGVQb3dlckFzc2VydGlvbnMKK3sKKyAgICBfZGlzcGxheVNsZWVwRGlzYWJsZXIgPSBudWxs
cHRyOworfQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBXaW5kb3cgY2FsbGJhY2sKKworLSAodm9p
ZClfcmVxdWVzdEV4aXQKK3sKKyAgICBpZiAoX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgX3ZpZGVv
RWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uID0g
Tk87Cit9CisKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9P
TClhbmltYXRpb24KK3sKKyAgICBpZiAoX2lzRW5kaW5nRnVsbHNjcmVlbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmltYXRpb247CisgICAgW3Nl
bGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4aXQpIHdpdGhPYmplY3Q6bmls
IGFmdGVyRGVsYXk6MF07CisKK30KKworLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4KK3sK
KyAgICBbc2VsZiByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0aW9uOllFU107Cit9CisK
Ky0gKHZvaWQpZmFkZUhVREluCit7CisgICAgW19odWRDb250cm9sbGVyIGZhZGVXaW5kb3dJbl07
Cit9CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRo
IG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnkgKiljaGFuZ2UgY29udGV4
dDoodm9pZCAqKWNvbnRleHQKK3sKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0oY2hhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisKKyAgICBpZiAo
W2tleVBhdGggaXNFcXVhbFRvOkAicmF0ZSJdKQorICAgICAgICBbc2VsZiByYXRlQ2hhbmdlZDpu
aWxdOworfQorCistICh2b2lkKXJhdGVDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5v
dGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOworICAg
IFtfaHVkQ29udHJvbGxlciB1cGRhdGVSYXRlXTsKKyAgICBbc2VsZiB1cGRhdGVQb3dlckFzc2Vy
dGlvbnNdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5X
aW5kb3cKKworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0
eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1
ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNFRF9QQVJBTShhU3R5bGUp
OworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpjb250ZW50UmVjdCBzdHls
ZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZlcmluZ1R5cGUgZGVmZXI6
ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIFtzZWxmIHNl
dE9wYXF1ZTpOT107CisgICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFy
Q29sb3JdXTsKKyAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6Tk9dOworICAgIFtzZWxm
IHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgor
eworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKKyAg
ICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopdGhlRXZlbnQK
K3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQpOworfQorCistICh2b2lkKWNhbmNlbE9wZXJh
dGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgW1tzZWxm
IHdpbmRvd0NvbnRyb2xsZXJdIHJlcXVlc3RFeGl0RnVsbHNjcmVlbl07Cit9CisKKy0gKHZvaWQp
YW5pbWF0ZWRSZXNpemVEaWRFbmQKK3sKKyAgICAvLyBDYWxsIG91ciB3aW5kb3dDb250cm9sbGVy
LgorICAgIGlmIChfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kKQorICAgICAgICBbW3Nl
bGYgd2luZG93Q29udHJvbGxlcl0gcGVyZm9ybVNlbGVjdG9yOl9jb250cm9sbGVyQWN0aW9uT25B
bmltYXRpb25FbmRdOworICAgIF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQgPSBOVUxM
OworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGFuaW1hdGUgYSBjaGFuZ2Ugb2YgZnJh
bWUgcmVjdGFuZ2xlCisvLyBXZSBzdXBwb3J0IHF1ZXVpbmcgYW5pbWF0aW9uLCB0aGF0IG1lYW5z
IHRoYXQgd2UnbGwgY29ycmVjdGx5CisvLyBpbnRlcnJ1cHQgdGhlIHJ1bm5pbmcgYW5pbWF0aW9u
LCBhbmQgcXVldWUgdGhlIG5leHQgb25lLgorLy8KKy0gKHZvaWQpYW5pbWF0ZUZyb21SZWN0OihO
U1JlY3Qpc3RhcnRSZWN0IHRvUmVjdDooTlNSZWN0KWVuZFJlY3Qgd2l0aFN1YkFuaW1hdGlvbjoo
TlNBbmltYXRpb24gKilzdWJBbmltYXRpb24gY29udHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xs
ZXJBY3Rpb24KK3sKKyAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kID0gY29udHJv
bGxlckFjdGlvbjsKKworICAgIEJPT0wgd2FzQW5pbWF0aW5nID0gTk87CisgICAgaWYgKF9mdWxs
c2NyZWVuQW5pbWF0aW9uKSB7CisgICAgICAgIHdhc0FuaW1hdGluZyA9IFlFUzsKKworICAgICAg
ICAvLyBJbnRlcnJ1cHQgYW55IHJ1bm5pbmcgYW5pbWF0aW9uLgorICAgICAgICBbX2Z1bGxzY3Jl
ZW5BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVu
dCByZWN0IHRvIGVuc3VyZSBhIHNtb290aCB0cmFuc2l0aW9uLgorICAgICAgICBzdGFydFJlY3Qg
PSBbX2Z1bGxzY3JlZW5BbmltYXRpb24gY3VycmVudEZyYW1lXTsKKyAgICAgICAgW19mdWxsc2Ny
ZWVuQW5pbWF0aW9uIHJlbGVhc2VdOworICAgICAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5p
bDsKKyAgICB9CisgICAgCisgICAgaWYgKE5TSXNFbXB0eVJlY3Qoc3RhcnRSZWN0KSB8fCBOU0lz
RW1wdHlSZWN0KGVuZFJlY3QpKSB7CisgICAgICAgIC8vIEZha2VseSBlbmQgdGhlIHN1YmFuaW1h
dGlvbi4KKyAgICAgICAgW3N1YkFuaW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6MV07CisgICAg
ICAgIC8vIEFuZCByZW1vdmUgdGhlIHdlYWsgbGluayB0byB0aGUgd2luZG93LgorICAgICAgICBb
c3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworCisgICAgICAgIFtzZWxmIHNldEZyYW1lOmVu
ZFJlY3QgZGlzcGxheTpOT107CisgICAgICAgIFtzZWxmIG1ha2VLZXlBbmRPcmRlckZyb250OnNl
bGZdOworICAgICAgICBbc2VsZiBhbmltYXRlZFJlc2l6ZURpZEVuZF07CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXdhc0FuaW1hdGluZykgeworICAgICAgICAvLyBXZSdsbCBk
b3duc2NhbGUgdGhlIHdpbmRvdyBkdXJpbmcgdGhlIGFuaW1hdGlvbiBiYXNlZCBvbiB0aGUgaGln
aGVyIHJlc29sdXRpb24gcmVjdAorICAgICAgICBCT09MIGhpZ2hlclJlc29sdXRpb25Jc0VuZFJl
Y3QgPSBzdGFydFJlY3Quc2l6ZS53aWR0aCA8IGVuZFJlY3Quc2l6ZS53aWR0aCAmJiBzdGFydFJl
Y3Quc2l6ZS5oZWlnaHQgPCBlbmRSZWN0LnNpemUuaGVpZ2h0OworICAgICAgICBbc2VsZiBzZXRG
cmFtZTpoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID8gZW5kUmVjdCA6IHN0YXJ0UmVjdCBkaXNw
bGF5Ok5PXTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFfZnVsbHNjcmVlbkFuaW1hdGlvbik7
CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIGFs
bG9jXSBpbml0V2l0aEhpbnRlZER1cmF0aW9uOjAuMiB3aW5kb3c6c2VsZiBpbml0YWxGcmFtZTpz
dGFydFJlY3QgZmluYWxGcmFtZTplbmRSZWN0XTsKKyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24g
c2V0U3ViQW5pbWF0aW9uOnN1YkFuaW1hdGlvbl07CisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9u
IHNldERlbGVnYXRlOnNlbGZdOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9u
IGhhcyBzY2FsZWQgdGhlIHdpbmRvdyBiZWZvcmUgc2hvd2luZyBpdC4KKyAgICBbX2Z1bGxzY3Jl
ZW5BbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtzZWxmIG1ha2VLZXlBbmRP
cmRlckZyb250OnNlbGZdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0YXJ0QW5pbWF0
aW9uXTsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5pbWF0aW9uICopYW5pbWF0
aW9uCit7CisgICAgaWYgKCFbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkgeworICAgICAgICBbc2Vs
ZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKGFuaW1hdGlvbkRpZEVuZDop
IHdpdGhPYmplY3Q6YW5pbWF0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChhbmltYXRpb24gIT0gX2Z1bGxzY3JlZW5BbmltYXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFRoZSBhbmltYXRpb24gaXMgbm90IHJlYWxseSBvdmVyIGFu
ZCB3YXMgaW50ZXJydXB0ZWQKKyAgICAvLyBEb24ndCBzZW5kIGNvbXBsZXRpb24gZXZlbnRzLgor
ICAgIGlmIChbYW5pbWF0aW9uIGN1cnJlbnRQcm9ncmVzc10gPCAxLjApCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFuaW1hdGlvbiAoYW5kIHN1YmFuaW1hdGlvbikgZG9u
J3Qga2VlcAorICAgIC8vIHRoZSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgd2luZG93IGl2YXIgdGhh
dCBtYXkgYmUgZGVzdHJveWVkIGZyb20KKyAgICAvLyBub3cgb24uCisgICAgW19mdWxsc2NyZWVu
QW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIGF1
dG9yZWxlYXNlXTsKKyAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5pbDsKKworICAgIFtzZWxm
IGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50
ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQpOworICAgIFtbc2VsZiB3
aW5kb3dDb250cm9sbGVyXSBmYWRlSFVESW5dOworfQorCitAZW5kCisKKyNpZiBDT01QSUxFUihD
TEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkocmV2aXNp
b24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw2IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiY29uZmln
LmgiCi0KICNpZiBFTkFCTEUoVklERU8pCiAKICNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyMjgyNzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6MjI4Mjc4KQorKysgU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgPEFwcEtpdC9OU0J1dHRvbi5oPgorI2ltcG9y
dCA8QXBwS2l0L05TQ29udHJvbC5oPgorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEZpZWxkLmg+Cisj
aW1wb3J0IDxBcHBLaXQvTlNUcmFja2luZ0FyZWEuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1dpbmRv
dy5oPgorI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50OworfQorCitAcHJvdG9jb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIK
K3sKKyAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRl
PiBfZGVsZWdhdGU7CisgICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7CisgICAgTlNU
cmFja2luZ0FyZWEgKl9hcmVhOworICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKKyAgICBCT09MIF9p
c0VuZGluZ0Z1bGxzY3JlZW47CisgICAgQk9PTCBfaXNTY3J1YmJpbmc7CisKKyAgICBOU0NvbnRy
b2wgKl90aW1lbGluZTsKKyAgICBOU1RleHRGaWVsZCAqX3JlbWFpbmluZ1RpbWVUZXh0OworICAg
IE5TVGV4dEZpZWxkICpfZWxhcHNlZFRpbWVUZXh0OworICAgIE5TQ29udHJvbCAqX3ZvbHVtZVNs
aWRlcjsKKyAgICBOU0J1dHRvbiAqX3BsYXlCdXR0b247Cit9CisKKy0gKGlkIDxXZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClz
ZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxl
Z2F0ZT4pZGVsZWdhdGU7CistICh2b2lkKWZhZGVXaW5kb3dJbjsKKy0gKHZvaWQpZmFkZVdpbmRv
d091dDsKKy0gKHZvaWQpY2xvc2VXaW5kb3c7CistICh2b2lkKXVwZGF0ZVJhdGU7CisKK0BlbmQK
KworQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0
ZSA8TlNPYmplY3Q+CistICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKKy0gKFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKK0BlbmQKKworI2VuZGlmCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lv
biAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgs
NyBAQCBjbGFzcyBIVE1MVmlkZW9FbGVtZW50OwogCiBAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOwogCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKLXsKK0BpbnRl
cmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciA6IE5TV2luZG93Q29u
dHJvbGxlciB7CiAgICAgaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJE
ZWxlZ2F0ZT4gX2RlbGVnYXRlOwogICAgIE5TVGltZXIgKl90aW1lbGluZVVwZGF0ZVRpbWVyOwog
ICAgIE5TVHJhY2tpbmdBcmVhICpfYXJlYTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIubW0JKHJldmlzaW9uIDIyODI3OCkJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW06MjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKFZJREVPKQor
CisjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVv
RWxlbWVudC5oPgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBv
cnQgPHBhbC9zcGkvbWFjL1FUS2l0U1BJLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4K
KworU09GVF9MSU5LX0ZSQU1FV09SSyhRVEtpdCkKKworU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBR
VEhVREJhY2tncm91bmRWaWV3KQorU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVREJ1dHRvbikK
K1NPRlRfTElOS19DTEFTUyhRVEtpdCwgUVRIVURTbGlkZXIpCitTT0ZUX0xJTktfQ0xBU1MoUVRL
aXQsIFFUSFVEVGltZWxpbmUpCisKKyNkZWZpbmUgUVRIVURCYWNrZ3JvdW5kVmlldyBnZXRRVEhV
REJhY2tncm91bmRWaWV3Q2xhc3MoKQorI2RlZmluZSBRVEhVREJ1dHRvbiBnZXRRVEhVREJ1dHRv
bkNsYXNzKCkKKyNkZWZpbmUgUVRIVURTbGlkZXIgZ2V0UVRIVURTbGlkZXJDbGFzcygpCisjZGVm
aW5lIFFUSFVEVGltZWxpbmUgZ2V0UVRIVURUaW1lbGluZUNsYXNzKCkKKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2VudW0gY2xhc3MgTWVkaWFVSUNvbnRyb2wgeworICAgIFRpbWVsaW5lLAor
ICAgIFNsaWRlciwKKyAgICBQbGF5UGF1c2VCdXR0b24sCisgICAgRXhpdEZ1bGxzY3JlZW5CdXR0
b24sCisgICAgUmV3aW5kQnV0dG9uLAorICAgIEZhc3RGb3J3YXJkQnV0dG9uLAorICAgIFZvbHVt
ZVVwQnV0dG9uLAorICAgIFZvbHVtZURvd25CdXR0b24sCit9OworCit9CisKK3VzaW5nIFdlYkNv
cmU6Ok1lZGlhVUlDb250cm9sOwordXNpbmcgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDsKK3Vz
aW5nIFdlYkNvcmU6Om5hcnJvd1ByZWNpc2lvblRvRmxvYXQ7CitAaW50ZXJmYWNlIFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgKFByaXZhdGUpIDxOU1dpbmRvd0RlbGVnYXRl
PgorCistICh2b2lkKXVwZGF0ZVRpbWU7CistICh2b2lkKXRpbWVsaW5lUG9zaXRpb25DaGFuZ2Vk
OihpZClzZW5kZXI7CistIChmbG9hdCljdXJyZW50VGltZTsKKy0gKHZvaWQpc2V0Q3VycmVudFRp
bWU6KGZsb2F0KWN1cnJlbnRUaW1lOworLSAoZG91YmxlKWR1cmF0aW9uOworCistICh2b2lkKXZv
bHVtZUNoYW5nZWQ6KGlkKXNlbmRlcjsKKy0gKGZsb2F0KW1heFZvbHVtZTsKKy0gKGZsb2F0KXZv
bHVtZTsKKy0gKHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWU7CistICh2b2lkKWRlY3JlbWVu
dFZvbHVtZTsKKy0gKHZvaWQpaW5jcmVtZW50Vm9sdW1lOworCistICh2b2lkKXVwZGF0ZVBsYXlC
dXR0b247CistICh2b2lkKXRvZ2dsZVBsYXlpbmc6KGlkKXNlbmRlcjsKKy0gKEJPT0wpcGxheWlu
ZzsKKy0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nOworCistICh2b2lkKXJld2luZDoo
aWQpc2VuZGVyOworLSAodm9pZClmYXN0Rm9yd2FyZDooaWQpc2VuZGVyOworCistIChOU1N0cmlu
ZyAqKXJlbWFpbmluZ1RpbWVUZXh0OworLSAoTlNTdHJpbmcgKillbGFwc2VkVGltZVRleHQ7CisK
Ky0gKHZvaWQpZXhpdEZ1bGxzY3JlZW46KGlkKXNlbmRlcjsKK0BlbmQKKworQGludGVyZmFjZSBX
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgOiBOU1dpbmRvdworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93CisKKy0gKGlkKWluaXRXaXRoQ29udGVu
dFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJh
Y2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcK
K3sKKyAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRo
Q29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVy
bGVzcyBiYWNraW5nOmJ1ZmZlcmluZ1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICBbc2Vs
ZiBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFtzZWxmIHNl
dExldmVsOk5TUG9wVXBNZW51V2luZG93TGV2ZWxdOworICAgIFtzZWxmIHNldEFjY2VwdHNNb3Vz
ZU1vdmVkRXZlbnRzOllFU107CisgICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsK
KyAgICBbc2VsZiBzZXRNb3ZhYmxlQnlXaW5kb3dCYWNrZ3JvdW5kOllFU107CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKKyAgICByZXR1cm4g
WUVTOworfQorCistICh2b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5V
U0VEX1BBUkFNKHNlbmRlcik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIGV4aXRGdWxs
c2NyZWVuOnNlbGZdOworfQorCistICh2b2lkKWNlbnRlcgoreworICAgIE5TUmVjdCBodWRGcmFt
ZSA9IFtzZWxmIGZyYW1lXTsKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbW05TU2NyZWVuIG1h
aW5TY3JlZW5dIGZyYW1lXTsKKyAgICBbc2VsZiBzZXRGcmFtZVRvcExlZnRQb2ludDpOU01ha2VQ
b2ludChzY3JlZW5GcmFtZS5vcmlnaW4ueCArIChzY3JlZW5GcmFtZS5zaXplLndpZHRoIC0gaHVk
RnJhbWUuc2l6ZS53aWR0aCkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmVlbkZyYW1lLm9yaWdpbi55ICsgKHNjcmVlbkZyYW1lLnNpemUuaGVpZ2h0
IC0gaHVkRnJhbWUuc2l6ZS5oZWlnaHQpIC8gNildOworfQorCistICh2b2lkKWtleURvd246KE5T
RXZlbnQgKilldmVudAoreworICAgIFtzdXBlciBrZXlEb3duOmV2ZW50XTsKKyAgICBbW3NlbGYg
d2luZG93Q29udHJvbGxlcl0gZmFkZVdpbmRvd0luXTsKK30KKworLSAoQk9PTClyZXNpZ25GaXJz
dFJlc3BvbmRlcgoreworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTClwZXJmb3JtS2V5RXF1
aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gQmxvY2sgYWxsIGNvbW1hbmQga2V5
IGV2ZW50cyB3aGlsZSB0aGUgZnVsbHNjcmVlbiB3aW5kb3cgaXMgdXAuCisgICAgaWYgKFtldmVu
dCB0eXBlXSAhPSBOU0V2ZW50VHlwZUtleURvd24pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAK
KyAgICBpZiAoIShbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnQ29t
bWFuZCkpCisgICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gWUVTOworfQorCitAZW5kCisK
K3N0YXRpYyBjb25zdCBDR0Zsb2F0IHdpbmRvd0hlaWdodCA9IDU5Oworc3RhdGljIGNvbnN0IENH
RmxvYXQgd2luZG93V2lkdGggPSA0Mzg7CisKK3N0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBI
VURXaW5kb3dGYWRlT3V0RGVsYXkgPSAzOworCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxs
c2NyZWVuSFVEV2luZG93Q29udHJvbGxlcgorCistIChpZClpbml0Cit7CisgICAgTlNXaW5kb3cg
KndpbmRvdyA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93IGFsbG9jXSBpbml0V2l0aENv
bnRlbnRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodCkgc3R5
bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOk5TQmFja2luZ1N0b3Jl
QnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2lu
ZG93XTsKKyAgICBbd2luZG93IHNldERlbGVnYXRlOnNlbGZdOworICAgIFt3aW5kb3cgcmVsZWFz
ZV07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIFtzZWxmIHdpbmRv
d0RpZExvYWRdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBBU1NFUlQoIV90aW1lbGluZVVwZGF0ZVRpbWVyKTsKKyAgICBBU1NFUlQoIV9hcmVhKTsKKyAg
ICBBU1NFUlQoIV9pc1NjcnViYmluZyk7CisgICAgW190aW1lbGluZSByZWxlYXNlXTsKKyAgICBb
X3JlbWFpbmluZ1RpbWVUZXh0IHJlbGVhc2VdOworICAgIFtfZWxhcHNlZFRpbWVUZXh0IHJlbGVh
c2VdOworICAgIFtfdm9sdW1lU2xpZGVyIHJlbGVhc2VdOworICAgIFtfcGxheUJ1dHRvbiByZWxl
YXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0QXJlYTooTlNUcmFj
a2luZ0FyZWEgKilhcmVhCit7CisgICAgaWYgKGFyZWEgPT0gX2FyZWEpCisgICAgICAgIHJldHVy
bjsKKyAgICBbX2FyZWEgcmVsZWFzZV07CisgICAgX2FyZWEgPSBbYXJlYSByZXRhaW5dOworfQor
CistICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIE5TU3RyaW5nICpjaGFy
YWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzXTsKKyAgICBpZiAoW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEp
IHsKKyAgICAgICAgc3dpdGNoIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJhY3Rl
ckF0SW5kZXg6MF0pIHsKKyAgICAgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgICAgIFtz
ZWxmIHRvZ2dsZVBsYXlpbmc6bmlsXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBjYXNlIE5TVXBBcnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgICAgIGlmIChbZXZl
bnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQorICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBzZXRWb2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBbc2VsZiBpbmNyZW1lbnRWb2x1bWVdOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5j
dGlvbktleToKKyAgICAgICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNF
dmVudE1vZGlmaWVyRmxhZ09wdGlvbikKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0Vm9s
dW1lOjBdOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYg
ZGVjcmVtZW50Vm9sdW1lXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
W3N1cGVyIGtleURvd246ZXZlbnRdOworfQorCistIChpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZGVsZWdh
dGU7Cit9CisKKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0gZGVs
ZWdhdGU7Cit9CisKKy0gKHZvaWQpc2NoZWR1bGVUaW1lVXBkYXRlCit7CisgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3Rvcih1bnNjaGVkdWxlVGltZVVwZGF0ZSkgb2JqZWN0OnNlbGZdOworCisgICAgLy8gRmly
c3QsIHVwZGF0ZSByaWdodCBhd2F5LCB0aGVuIHNjaGVkdWxlIGZ1dHVyZSB1cGRhdGUKKyAgICBb
c2VsZiB1cGRhdGVUaW1lXTsKKyAgICBbc2VsZiB1cGRhdGVQbGF5QnV0dG9uXTsKKworICAgIFtf
dGltZWxpbmVVcGRhdGVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGlt
ZXIgcmVsZWFzZV07CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjcmVhdGVzIGEgcmV0YWluIGN5
Y2xlIGJldHdlZW4gdGhlIHdpbmRvdyBhbmQgdXMuCisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIg
PSBbW05TVGltZXIgdGltZXJXaXRoVGltZUludGVydmFsOjAuMjUgdGFyZ2V0OnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKHVwZGF0ZVRpbWUpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10gcmV0YWlu
XTsKKyAgICBbW05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gYWRkVGltZXI6X3RpbWVsaW5lVXBk
YXRlVGltZXIgZm9yTW9kZTpOU1J1bkxvb3BDb21tb25Nb2Rlc107Cit9CisKKy0gKHZvaWQpdW5z
Y2hlZHVsZVRpbWVVcGRhdGUKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3Jt
UmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1l
VXBkYXRlKSBvYmplY3Q6bmlsXTsKKworICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciBpbnZhbGlk
YXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgcmVsZWFzZV07CisgICAgX3RpbWVsaW5l
VXBkYXRlVGltZXIgPSBuaWw7Cit9CisKKy0gKHZvaWQpZmFkZVdpbmRvd0luCit7CisgICAgTlNX
aW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgaWYgKCFbd2luZG93IGlzVmlzaWJs
ZV0pCisgICAgICAgIFt3aW5kb3cgc2V0QWxwaGFWYWx1ZTowXTsKKworICAgIFt3aW5kb3cgbWFr
ZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07CisgICAgW1t3aW5kb3cgYW5pbWF0b3JdIHNldEFscGhh
VmFsdWU6MV07CisgICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKKworICAgIFtOU09iamVj
dCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07CisgICAgaWYgKCFfbW91c2VJc0lu
SFVEICYmIFtzZWxmIHBsYXlpbmddKSAgIC8vIERvbid0IGZhZGUgb3V0IHdoZW4gcGF1c2VkLgor
ICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdp
dGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6SFVEV2luZG93RmFkZU91dERlbGF5XTsKK30KKworLSAo
dm9pZClmYWRlV2luZG93T3V0Cit7CisgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VN
b3ZlczpZRVNdOworICAgIFtbW3NlbGYgd2luZG93XSBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZTow
XTsKKyAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBk
YXRlKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjFdOworfQorCistICh2b2lkKWNsb3NlV2lu
ZG93Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRh
cmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsK
KyAgICBbc2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07CisgICAgTlNXaW5kb3cgKndpbmRvdyA9
IFtzZWxmIHdpbmRvd107CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHJlbW92ZVRyYWNraW5n
QXJlYTpfYXJlYV07CisgICAgW3NlbGYgc2V0QXJlYTpuaWxdOworICAgIFt3aW5kb3cgY2xvc2Vd
OworICAgIFt3aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6bmls
XTsKK30KKworc3RhdGljIE5TQ29udHJvbCAqY3JlYXRlTWVkaWFVSUNvbnRyb2woTWVkaWFVSUNv
bnRyb2wgY29udHJvbFR5cGUpCit7CisgICAgc3dpdGNoIChjb250cm9sVHlwZSkgeworICAgIGNh
c2UgTWVkaWFVSUNvbnRyb2w6OlRpbWVsaW5lOiB7CisgICAgICAgIE5TU2xpZGVyICpzbGlkZXIg
PSBbW1FUSFVEVGltZWxpbmUgYWxsb2NdIGluaXRdOworICAgICAgICBbW3NsaWRlciBjZWxsXSBz
ZXRDb250aW51b3VzOllFU107CisgICAgICAgIHJldHVybiBzbGlkZXI7CisgICAgfQorICAgIGNh
c2UgTWVkaWFVSUNvbnRyb2w6OlNsaWRlcjogeworICAgICAgICBOU0J1dHRvbiAqc2xpZGVyID0g
W1tRVEhVRFNsaWRlciBhbGxvY10gaW5pdF07CisgICAgICAgIFtbc2xpZGVyIGNlbGxdIHNldENv
bnRpbnVvdXM6WUVTXTsKKyAgICAgICAgcmV0dXJuIHNsaWRlcjsKKyAgICB9CisgICAgY2FzZSBN
ZWRpYVVJQ29udHJvbDo6UGxheVBhdXNlQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0
b24gPSBbW1FUSFVEQnV0dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFn
ZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNQbGF5VGVtcGxhdGUiXV07CisgICAgICAgIFtidXR0
b24gc2V0QWx0ZXJuYXRlSW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TUGF1c2VRVFByaXZh
dGVUZW1wbGF0ZSJdXTsKKworICAgICAgICBbW2J1dHRvbiBjZWxsXSBzZXRTaG93c1N0YXRlQnk6
TlNDb250ZW50c0NlbGxNYXNrXTsKKyAgICAgICAgW2J1dHRvbiBzZXRCb3JkZXJlZDpOT107Cisg
ICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAgIGNhc2UgTWVkaWFVSUNvbnRyb2w6OkV4
aXRGdWxsc2NyZWVuQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVE
QnV0dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBp
bWFnZU5hbWVkOkAiTlNFeGl0RnVsbFNjcmVlblRlbXBsYXRlIl1dOworICAgICAgICBbYnV0dG9u
IHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0dXJuIGJ1dHRvbjsKKyAgICB9CisgICAgY2Fz
ZSBNZWRpYVVJQ29udHJvbDo6UmV3aW5kQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0
b24gPSBbW1FUSFVEQnV0dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFn
ZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNSZXdpbmRUZW1wbGF0ZSJdXTsKKyAgICAgICAgW2J1
dHRvbiBzZXRCb3JkZXJlZDpOT107CisgICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAg
IGNhc2UgTWVkaWFVSUNvbnRyb2w6OkZhc3RGb3J3YXJkQnV0dG9uOiB7CisgICAgICAgIE5TQnV0
dG9uICpidXR0b24gPSBbW1FUSFVEQnV0dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRv
biBzZXRJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNGYXN0Rm9yd2FyZFRlbXBsYXRlIl1d
OworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0dXJuIGJ1dHRv
bjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0b246IHsKKyAg
ICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOworICAg
ICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0F1ZGlvT3V0cHV0
Vm9sdW1lSGlnaFRlbXBsYXRlIl1dOworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsK
KyAgICAgICAgcmV0dXJuIGJ1dHRvbjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6
Vm9sdW1lRG93bkJ1dHRvbjogeworICAgICAgICBOU0J1dHRvbiAqYnV0dG9uID0gW1tRVEhVREJ1
dHRvbiBhbGxvY10gaW5pdF07CisgICAgICAgIFtidXR0b24gc2V0SW1hZ2U6W05TSW1hZ2UgaW1h
Z2VOYW1lZDpAIk5TQXVkaW9PdXRwdXRWb2x1bWVMb3dUZW1wbGF0ZSJdXTsKKyAgICAgICAgW2J1
dHRvbiBzZXRCb3JkZXJlZDpOT107CisgICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBuaWw7Cit9CisKK3N0
YXRpYyBOU0NvbnRyb2wgKmNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKE1lZGlh
VUlDb250cm9sIGNvbnRyb2xUeXBlLCBOU1JlY3QgZnJhbWUpCit7CisgICAgTlNDb250cm9sICpj
b250cm9sID0gY3JlYXRlTWVkaWFVSUNvbnRyb2woY29udHJvbFR5cGUpOworICAgIGNvbnRyb2wu
ZnJhbWUgPSBmcmFtZTsKKyAgICByZXR1cm4gY29udHJvbDsKK30KKworc3RhdGljIE5TVGV4dEZp
ZWxkICpjcmVhdGVUaW1lVGV4dEZpZWxkKE5TUmVjdCBmcmFtZSkKK3sKKyAgICBOU1RleHRGaWVs
ZCAqdGV4dEZpZWxkID0gW1tOU1RleHRGaWVsZCBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV07
CisgICAgW3RleHRGaWVsZCBzZXRUZXh0Q29sb3I6W05TQ29sb3Igd2hpdGVDb2xvcl1dOworICAg
IFt0ZXh0RmllbGQgc2V0Qm9yZGVyZWQ6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0Rm9udDpbTlNG
b250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOjEwXV07CisgICAgW3RleHRGaWVsZCBzZXREcmF3c0Jh
Y2tncm91bmQ6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0QmV6ZWxlZDpOT107CisgICAgW3RleHRG
aWVsZCBzZXRFZGl0YWJsZTpOT107CisgICAgW3RleHRGaWVsZCBzZXRTZWxlY3RhYmxlOk5PXTsK
KyAgICByZXR1cm4gdGV4dEZpZWxkOworfQorCitzdGF0aWMgTlNWaWV3ICpjcmVhdGVNZWRpYVVJ
QmFja2dyb3VuZFZpZXcoKQoreworICAgIGlkIHZpZXcgPSBbW1FUSFVEQmFja2dyb3VuZFZpZXcg
YWxsb2NdIGluaXRdOworCisgICAgY29uc3QgQ0dGbG9hdCBxdWlja1RpbWVQbGF5ZXJIVURIZWln
aHQgPSA1OTsKKyAgICBjb25zdCBDR0Zsb2F0IHF1aWNrVGltZVBsYXllckhVRENvbnRlbnRCb3Jk
ZXJQb3NpdGlvbiA9IDM4OworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisg
ICAgW3ZpZXcgc2V0Q29udGVudEJvcmRlclBvc2l0aW9uOnF1aWNrVGltZVBsYXllckhVRENvbnRl
bnRCb3JkZXJQb3NpdGlvbiAvIHF1aWNrVGltZVBsYXllckhVREhlaWdodF07CisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCisKKyAgICByZXR1cm4gdmlldzsKK30KKworLSAodm9pZCl3aW5k
b3dEaWRMb2FkCit7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgaG9yaXpvbnRhbE1hcmdpbiA9
IDEwOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHBsYXlCdXR0b25XaWR0aCA9IDQxOworICAg
IHN0YXRpYyBjb25zdCBDR0Zsb2F0IHBsYXlCdXR0b25IZWlnaHQgPSAzNTsKKyAgICBzdGF0aWMg
Y29uc3QgQ0dGbG9hdCBwbGF5QnV0dG9uVG9wTWFyZ2luID0gNDsKKyAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCB2b2x1bWVTbGlkZXJXaWR0aCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0
IHZvbHVtZVNsaWRlckhlaWdodCA9IDEzOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVt
ZUJ1dHRvbldpZHRoID0gMTg7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lQnV0dG9u
SGVpZ2h0ID0gMTY7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lVXBCdXR0b25MZWZ0
TWFyZ2luID0gNDsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVDb250cm9sc1RvcE1h
cmdpbiA9IDEzOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9u
V2lkdGggPSAyNTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBleGl0RnVsbHNjcmVlbkJ1dHRv
bkhlaWdodCA9IDIxOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0
dG9uVG9wTWFyZ2luID0gMTE7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZWxpbmVXaWR0
aCA9IDMxNTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lbGluZUhlaWdodCA9IDE0Owor
ICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVsaW5lQm90dG9tTWFyZ2luID0gNzsKKyAgICBz
dGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lVGV4dEZpZWxkV2lkdGggPSA1NDsKKyAgICBzdGF0aWMg
Y29uc3QgQ0dGbG9hdCB0aW1lVGV4dEZpZWxkSGVpZ2h0ID0gMTM7CisgICAgc3RhdGljIGNvbnN0
IENHRmxvYXQgdGltZVRleHRGaWVsZEhvcml6b250YWxNYXJnaW4gPSA3OworCisgICAgTlNXaW5k
b3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgQVNTRVJUKHdpbmRvdyk7CisKKyAgICBO
U1ZpZXcgKmJhY2tncm91bmQgPSBjcmVhdGVNZWRpYVVJQmFja2dyb3VuZFZpZXcoKTsKKworICAg
IFt3aW5kb3cgc2V0Q29udGVudFZpZXc6YmFja2dyb3VuZF07CisgICAgX2FyZWEgPSBbW05TVHJh
Y2tpbmdBcmVhIGFsbG9jXSBpbml0V2l0aFJlY3Q6W2JhY2tncm91bmQgYm91bmRzXSBvcHRpb25z
Ok5TVHJhY2tpbmdNb3VzZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nQWN0aXZlQWx3YXlz
IG93bmVyOnNlbGYgdXNlckluZm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFja2luZ0Fy
ZWE6X2FyZWFdOworICAgIFtiYWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5TVmlldyAq
Y29udGVudFZpZXcgPSBbd2luZG93IGNvbnRlbnRWaWV3XTsKKworICAgIENHRmxvYXQgY2VudGVy
ID0gQ0dGbG9vcigod2luZG93V2lkdGggLSBwbGF5QnV0dG9uV2lkdGgpIC8gMik7CisgICAgX3Bs
YXlCdXR0b24gPSAoTlNCdXR0b24gKiljcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlw
ZShNZWRpYVVJQ29udHJvbDo6UGxheVBhdXNlQnV0dG9uLCBOU01ha2VSZWN0KGNlbnRlciwgd2lu
ZG93SGVpZ2h0IC0gcGxheUJ1dHRvblRvcE1hcmdpbiAtIHBsYXlCdXR0b25IZWlnaHQsIHBsYXlC
dXR0b25XaWR0aCwgcGxheUJ1dHRvbkhlaWdodCkpOworICAgIEFTU0VSVChbX3BsYXlCdXR0b24g
aXNLaW5kT2ZDbGFzczpbTlNCdXR0b24gY2xhc3NdXSk7CisgICAgW19wbGF5QnV0dG9uIHNldFRh
cmdldDpzZWxmXTsKKyAgICBbX3BsYXlCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3Rvcih0b2dnbGVQ
bGF5aW5nOildOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9wbGF5QnV0dG9uXTsKKwor
ICAgIENHRmxvYXQgY2xvc2VUb1JpZ2h0ID0gd2luZG93V2lkdGggLSBob3Jpem9udGFsTWFyZ2lu
IC0gZXhpdEZ1bGxzY3JlZW5CdXR0b25XaWR0aDsKKyAgICBOU0NvbnRyb2wgKmV4aXRGdWxsc2Ny
ZWVuQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFVSUNv
bnRyb2w6OkV4aXRGdWxsc2NyZWVuQnV0dG9uLCBOU01ha2VSZWN0KGNsb3NlVG9SaWdodCwgd2lu
ZG93SGVpZ2h0IC0gZXhpdEZ1bGxzY3JlZW5CdXR0b25Ub3BNYXJnaW4gLSBleGl0RnVsbHNjcmVl
bkJ1dHRvbkhlaWdodCwgZXhpdEZ1bGxzY3JlZW5CdXR0b25XaWR0aCwgZXhpdEZ1bGxzY3JlZW5C
dXR0b25IZWlnaHQpKTsKKyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0QWN0aW9uOkBzZWxl
Y3RvcihleGl0RnVsbHNjcmVlbjopXTsKKyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0VGFy
Z2V0OnNlbGZdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmV4aXRGdWxsc2NyZWVuQnV0
dG9uXTsKKyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gcmVsZWFzZV07CisgICAgCisgICAgQ0dG
bG9hdCB2b2x1bWVDb250cm9sc0JvdHRvbSA9IHdpbmRvd0hlaWdodCAtIHZvbHVtZUNvbnRyb2xz
VG9wTWFyZ2luIC0gdm9sdW1lQnV0dG9uSGVpZ2h0OworICAgIENHRmxvYXQgbGVmdCA9IGhvcml6
b250YWxNYXJnaW47CisgICAgTlNDb250cm9sICp2b2x1bWVEb3duQnV0dG9uID0gY3JlYXRlQ29u
dHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OlZvbHVtZURvd25CdXR0
b24sIE5TTWFrZVJlY3QobGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20sIHZvbHVtZUJ1dHRvbldp
ZHRoLCB2b2x1bWVCdXR0b25IZWlnaHQpKTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2
b2x1bWVEb3duQnV0dG9uXTsKKyAgICBbdm9sdW1lRG93bkJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07
CisgICAgW3ZvbHVtZURvd25CdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihzZXRWb2x1bWVUb1pl
cm86KV07CisgICAgW3ZvbHVtZURvd25CdXR0b24gcmVsZWFzZV07CisKKyAgICBsZWZ0ICs9IHZv
bHVtZUJ1dHRvbldpZHRoOworICAgIF92b2x1bWVTbGlkZXIgPSBjcmVhdGVDb250cm9sV2l0aE1l
ZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6U2xpZGVyLCBOU01ha2VSZWN0KGxlZnQs
IHZvbHVtZUNvbnRyb2xzQm90dG9tICsgQ0dGbG9vcigodm9sdW1lQnV0dG9uSGVpZ2h0IC0gdm9s
dW1lU2xpZGVySGVpZ2h0KSAvIDIpLCB2b2x1bWVTbGlkZXJXaWR0aCwgdm9sdW1lU2xpZGVySGVp
Z2h0KSk7CisgICAgW192b2x1bWVTbGlkZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhE
b3VibGU6W3NlbGYgbWF4Vm9sdW1lXV0gZm9yS2V5OkAibWF4VmFsdWUiXTsKKyAgICBbX3ZvbHVt
ZVNsaWRlciBzZXRUYXJnZXQ6c2VsZl07CisgICAgW192b2x1bWVTbGlkZXIgc2V0QWN0aW9uOkBz
ZWxlY3Rvcih2b2x1bWVDaGFuZ2VkOildOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol92
b2x1bWVTbGlkZXJdOworCisgICAgbGVmdCArPSB2b2x1bWVTbGlkZXJXaWR0aCArIHZvbHVtZVVw
QnV0dG9uTGVmdE1hcmdpbjsKKyAgICBOU0NvbnRyb2wgKnZvbHVtZVVwQnV0dG9uID0gY3JlYXRl
Q29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OlZvbHVtZVVwQnV0
dG9uLCBOU01ha2VSZWN0KGxlZnQsIHZvbHVtZUNvbnRyb2xzQm90dG9tLCB2b2x1bWVCdXR0b25X
aWR0aCwgdm9sdW1lQnV0dG9uSGVpZ2h0KSk7CisgICAgW3ZvbHVtZVVwQnV0dG9uIHNldFRhcmdl
dDpzZWxmXTsKKyAgICBbdm9sdW1lVXBCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihzZXRWb2x1
bWVUb01heGltdW06KV07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9sdW1lVXBCdXR0
b25dOworICAgIFt2b2x1bWVVcEJ1dHRvbiByZWxlYXNlXTsKKworICAgIF90aW1lbGluZSA9IGNy
ZWF0ZU1lZGlhVUlDb250cm9sKE1lZGlhVUlDb250cm9sOjpUaW1lbGluZSk7CisKKyAgICBbX3Rp
bWVsaW5lIHNldFRhcmdldDpzZWxmXTsKKyAgICBbX3RpbWVsaW5lIHNldEFjdGlvbjpAc2VsZWN0
b3IodGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6KV07CisgICAgW190aW1lbGluZSBzZXRGcmFtZTpO
U01ha2VSZWN0KENHRmxvb3IoKHdpbmRvd1dpZHRoIC0gdGltZWxpbmVXaWR0aCkgLyAyKSwgdGlt
ZWxpbmVCb3R0b21NYXJnaW4sIHRpbWVsaW5lV2lkdGgsIHRpbWVsaW5lSGVpZ2h0KV07CisgICAg
W2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3RpbWVsaW5lXTsKKworICAgIF9lbGFwc2VkVGltZVRl
eHQgPSBjcmVhdGVUaW1lVGV4dEZpZWxkKE5TTWFrZVJlY3QodGltZVRleHRGaWVsZEhvcml6b250
YWxNYXJnaW4sIHRpbWVsaW5lQm90dG9tTWFyZ2luLCB0aW1lVGV4dEZpZWxkV2lkdGgsIHRpbWVU
ZXh0RmllbGRIZWlnaHQpKTsKKyAgICBbX2VsYXBzZWRUaW1lVGV4dCBzZXRBbGlnbm1lbnQ6TlNU
ZXh0QWxpZ25tZW50TGVmdF07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X2VsYXBzZWRU
aW1lVGV4dF07CisKKyAgICBfcmVtYWluaW5nVGltZVRleHQgPSBjcmVhdGVUaW1lVGV4dEZpZWxk
KE5TTWFrZVJlY3Qod2luZG93V2lkdGggLSB0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiAt
IHRpbWVUZXh0RmllbGRXaWR0aCwgdGltZWxpbmVCb3R0b21NYXJnaW4sIHRpbWVUZXh0RmllbGRX
aWR0aCwgdGltZVRleHRGaWVsZEhlaWdodCkpOworICAgIFtfcmVtYWluaW5nVGltZVRleHQgc2V0
QWxpZ25tZW50Ok5TVGV4dEFsaWdubWVudFJpZ2h0XTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vi
dmlldzpfcmVtYWluaW5nVGltZVRleHRdOworCisgICAgW3dpbmRvdyByZWNhbGN1bGF0ZUtleVZp
ZXdMb29wXTsKKyAgICBbd2luZG93IHNldEluaXRpYWxGaXJzdFJlc3BvbmRlcjpfcGxheUJ1dHRv
bl07CisgICAgW3dpbmRvdyBjZW50ZXJdOworfQorCistICh2b2lkKXVwZGF0ZVZvbHVtZQorewor
ICAgIFtfdm9sdW1lU2xpZGVyIHNldEZsb2F0VmFsdWU6W3NlbGYgdm9sdW1lXV07Cit9CisKKy0g
KHZvaWQpdXBkYXRlVGltZQoreworICAgIFtzZWxmIHVwZGF0ZVZvbHVtZV07CisKKyAgICBbX3Rp
bWVsaW5lIHNldEZsb2F0VmFsdWU6W3NlbGYgY3VycmVudFRpbWVdXTsKKyAgICBbX3RpbWVsaW5l
IHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOltzZWxmIGR1cmF0aW9uXV0gZm9y
S2V5OkAibWF4VmFsdWUiXTsKKworICAgIFtfcmVtYWluaW5nVGltZVRleHQgc2V0U3RyaW5nVmFs
dWU6W3NlbGYgcmVtYWluaW5nVGltZVRleHRdXTsKKyAgICBbX2VsYXBzZWRUaW1lVGV4dCBzZXRT
dHJpbmdWYWx1ZTpbc2VsZiBlbGFwc2VkVGltZVRleHRdXTsKK30KKworLSAodm9pZCllbmRTY3J1
YmJpbmcKK3sKKyAgICBBU1NFUlQoX2lzU2NydWJiaW5nKTsKKyAgICBfaXNTY3J1YmJpbmcgPSBO
TzsKKyAgICBpZiAoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gW19kZWxlZ2F0ZSB2
aWRlb0VsZW1lbnRdKQorICAgICAgICB2aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOworfQor
CistICh2b2lkKXRpbWVsaW5lUG9zaXRpb25DaGFuZ2VkOihpZClzZW5kZXIKK3sKKyAgICBVTlVT
RURfUEFSQU0oc2VuZGVyKTsKKyAgICBbc2VsZiBzZXRDdXJyZW50VGltZTpbX3RpbWVsaW5lIGZs
b2F0VmFsdWVdXTsKKyAgICBpZiAoIV9pc1NjcnViYmluZykgeworICAgICAgICBfaXNTY3J1YmJp
bmcgPSBZRVM7CisgICAgICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBb
X2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgICAgICB2aWRlb0VsZW1lbnQtPmJlZ2lu
U2NydWJiaW5nKCk7CisgICAgICAgIHN0YXRpYyBOU0FycmF5ICplbmRTY3J1YmJpbmdNb2RlcyA9
IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOk5TRGVmYXVsdFJ1bkxvb3BNb2RlLCBO
U01vZGFsUGFuZWxSdW5Mb29wTW9kZSwgbmlsXTsKKyAgICAgICAgLy8gU2NoZWR1bGUgLWVuZFNj
cnViYmluZyBmb3Igd2hlbiBsZWF2aW5nIG1vdXNlIHRyYWNraW5nIG1vZGUuCisgICAgICAgIFtb
TlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGVuZFNj
cnViYmluZykgdGFyZ2V0OnNlbGYgYXJndW1lbnQ6bmlsIG9yZGVyOjAgbW9kZXM6ZW5kU2NydWJi
aW5nTW9kZXNdOworICAgIH0KK30KKworLSAoZmxvYXQpY3VycmVudFRpbWUKK3sKKyAgICByZXR1
cm4gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5j
dXJyZW50VGltZSgpIDogMDsKK30KKworLSAodm9pZClzZXRDdXJyZW50VGltZTooZmxvYXQpY3Vy
cmVudFRpbWUKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAg
cmV0dXJuOworICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+c2V0Q3VycmVudFRpbWUoY3Vy
cmVudFRpbWUpOworICAgIFtzZWxmIHVwZGF0ZVRpbWVdOworfQorCistIChkb3VibGUpZHVyYXRp
b24KK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0ZSB2
aWRlb0VsZW1lbnRdLT5kdXJhdGlvbigpIDogMDsKK30KKworLSAoZmxvYXQpbWF4Vm9sdW1lCit7
CisgICAgLy8gU2V0IHRoZSB2b2x1bWUgc2xpZGVyIHJlc29sdXRpb24KKyAgICByZXR1cm4gMTAw
OworfQorCistICh2b2lkKXZvbHVtZUNoYW5nZWQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9Q
QVJBTShzZW5kZXIpOworICAgIFtzZWxmIHNldFZvbHVtZTpbX3ZvbHVtZVNsaWRlciBmbG9hdFZh
bHVlXV07Cit9CisKKy0gKHZvaWQpc2V0Vm9sdW1lVG9aZXJvOihpZClzZW5kZXIKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBbc2VsZiBzZXRWb2x1bWU6MF07Cit9CisKKy0gKHZv
aWQpc2V0Vm9sdW1lVG9NYXhpbXVtOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Vu
ZGVyKTsKKyAgICBbc2VsZiBzZXRWb2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07Cit9CisKKy0gKHZv
aWQpZGVjcmVtZW50Vm9sdW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0p
CisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHZvbHVtZSA9IFtzZWxmIHZvbHVtZV0gLSAx
MDsKKyAgICBbc2VsZiBzZXRWb2x1bWU6TUFYKHZvbHVtZSwgMCldOworfQorCistICh2b2lkKWlu
Y3JlbWVudFZvbHVtZQoreworICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmbG9hdCB2b2x1bWUgPSBbc2VsZiB2b2x1bWVdICsgMTA7Cisg
ICAgW3NlbGYgc2V0Vm9sdW1lOnN0ZDo6bWluKHZvbHVtZSwgW3NlbGYgbWF4Vm9sdW1lXSldOwor
fQorCistIChmbG9hdCl2b2x1bWUKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB2aWRlb0VsZW1l
bnRdID8gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT52b2x1bWUoKSAqIFtzZWxmIG1heFZvbHVt
ZV0gOiAwOworfQorCistICh2b2lkKXNldFZvbHVtZTooZmxvYXQpdm9sdW1lCit7CisgICAgaWYg
KCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW19k
ZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5tdXRlZCgpKQorICAgICAgICBbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF0tPnNldE11dGVkKGZhbHNlKTsKKyAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0t
PnNldFZvbHVtZSh2b2x1bWUgLyBbc2VsZiBtYXhWb2x1bWVdKTsKKyAgICBbc2VsZiB1cGRhdGVW
b2x1bWVdOworfQorCistICh2b2lkKXVwZGF0ZVBsYXlCdXR0b24KK3sKKyAgICBbX3BsYXlCdXR0
b24gc2V0SW50VmFsdWU6W3NlbGYgcGxheWluZ11dOworfQorCistICh2b2lkKXVwZGF0ZVJhdGUK
K3sKKyAgICBCT09MIHBsYXlpbmcgPSBbc2VsZiBwbGF5aW5nXTsKKworICAgIC8vIEtlZXAgdGhl
IEhVRCB2aXNpYmxlIHdoZW4gcGF1c2VkLgorICAgIGlmICghcGxheWluZykKKyAgICAgICAgW3Nl
bGYgZmFkZVdpbmRvd0luXTsKKyAgICBlbHNlIGlmICghX21vdXNlSXNJbkhVRCkgeworICAgICAg
ICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOworICAgICAgICBb
c2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhPYmplY3Q6
bmlsIGFmdGVyRGVsYXk6SFVEV2luZG93RmFkZU91dERlbGF5XTsKKyAgICB9CisgICAgW3NlbGYg
dXBkYXRlUGxheUJ1dHRvbl07Cit9CisKKy0gKHZvaWQpdG9nZ2xlUGxheWluZzooaWQpc2VuZGVy
Cit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgW3NlbGYgc2V0UGxheWluZzohW3Nl
bGYgcGxheWluZ11dOworfQorCistIChCT09MKXBsYXlpbmcKK3sKKyAgICBIVE1MVmlkZW9FbGVt
ZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07CisgICAgaWYgKCF2
aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiAhdmlkZW9FbGVt
ZW50LT5jYW5QbGF5KCk7Cit9CisKKy0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCit7
CisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gW19kZWxlZ2F0ZSB2aWRlb0Vs
ZW1lbnRdOworCisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChwbGF5aW5nKQorICAgICAgICB2aWRlb0VsZW1lbnQtPnBsYXkoKTsKKyAgICBlbHNlCisg
ICAgICAgIHZpZGVvRWxlbWVudC0+cGF1c2UoKTsKK30KKworc3RhdGljIE5TU3RyaW5nICp0aW1l
VG9TdHJpbmcoZG91YmxlIHRpbWUpCit7CisgICAgQVNTRVJUX0FSRyh0aW1lLCB0aW1lID49IDAp
OworCisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHRpbWUpKQorICAgICAgICB0aW1lID0gMDsKKwor
ICAgIGludCBzZWNvbmRzID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGQ6OmFicyh0aW1lKSk7
CisgICAgaW50IGhvdXJzID0gc2Vjb25kcyAvICg2MCAqIDYwKTsKKyAgICBpbnQgbWludXRlcyA9
IChzZWNvbmRzIC8gNjApICUgNjA7CisgICAgc2Vjb25kcyAlPSA2MDsKKworICAgIGlmIChob3Vy
cykKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQ6JTAyZDol
MDJkIiwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdOworCisgICAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJTAyZDolMDJkIiwgbWludXRlcywgc2Vjb25kc107ICAgIAorfQor
CistIChOU1N0cmluZyAqKXJlbWFpbmluZ1RpbWVUZXh0Cit7CisgICAgSFRNTFZpZGVvRWxlbWVu
dCogdmlkZW9FbGVtZW50ID0gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdOworICAgIGlmICghdmlk
ZW9FbGVtZW50KQorICAgICAgICByZXR1cm4gQCIiOworCisgICAgZG91YmxlIHJlbWFpbmluZ1Rp
bWUgPSAwOworCisgICAgaWYgKHN0ZDo6aXNmaW5pdGUodmlkZW9FbGVtZW50LT5kdXJhdGlvbigp
KSAmJiBzdGQ6OmlzZmluaXRlKHZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSkpCisgICAgICAg
IHJlbWFpbmluZ1RpbWUgPSB2aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkgLSB2aWRlb0VsZW1lbnQt
PmN1cnJlbnRUaW1lKCk7CisKKyAgICByZXR1cm4gW0AiLSIgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6dGltZVRvU3RyaW5nKHJlbWFpbmluZ1RpbWUpXTsKK30KKworLSAoTlNTdHJpbmcgKillbGFw
c2VkVGltZVRleHQKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKworICAgIHJldHVybiB0aW1lVG9TdHJpbmcoW19kZWxlZ2F0ZSB2aWRl
b0VsZW1lbnRdLT5jdXJyZW50VGltZSgpKTsKK30KKworLy8gTUFSSzogTlNSZXNwb25kZXIKKwor
LSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFVOVVNFRF9Q
QVJBTSh0aGVFdmVudCk7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBIVUQgd29uJ3QgYmUgaGlkZGVu
IGZyb20gbm93CisgICAgX21vdXNlSXNJbkhVRCA9IFlFUzsKKyAgICBbc2VsZiBmYWRlV2luZG93
SW5dOworfQorCistICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAg
ICBVTlVTRURfUEFSQU0odGhlRXZlbnQpOworICAgIF9tb3VzZUlzSW5IVUQgPSBOTzsKKyAgICBb
c2VsZiBmYWRlV2luZG93SW5dOworfQorCistICh2b2lkKXJld2luZDooaWQpc2VuZGVyCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVu
dF0pCisgICAgICAgIHJldHVybjsKKyAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnJld2lu
ZCgzMCk7Cit9CisKKy0gKHZvaWQpZmFzdEZvcndhcmQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNF
RF9QQVJBTShzZW5kZXIpOworICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQorICAg
ICAgICByZXR1cm47Cit9CisKKy0gKHZvaWQpZXhpdEZ1bGxzY3JlZW46KGlkKXNlbmRlcgorewor
ICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQor
ICAgICAgICByZXR1cm47CisgICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKKyAgICBbX2Rl
bGVnYXRlIHJlcXVlc3RFeGl0RnVsbHNjcmVlbl07IAorfQorCisvLyBNQVJLOiBOU1dpbmRvd0Rl
bGVnYXRlCisKKy0gKHZvaWQpd2luZG93RGlkRXhwb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTShub3RpZmljYXRpb24pOworICAgIFtzZWxmIHNj
aGVkdWxlVGltZVVwZGF0ZV07Cit9CisKKy0gKHZvaWQpd2luZG93RGlkQ2xvc2U6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7
CisgICAgW3NlbGYgdW5zY2hlZHVsZVRpbWVVcGRhdGVdOworfQorCitAZW5kCisKKyNlbmRpZgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0KX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5t
bQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiwxMiArMjIsMTEgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgogCiAjaWYgRU5B
QkxFKFZJREVPKQogCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPFdlYkNv
cmUvRmxvYXRDb252ZXJzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQu
aD4KICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW1wb3J0IDxwYWwv
c3BpL21hYy9RVEtpdFNQSS5oPgpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsOSArMjQ0LDkgQEAK
ICNpbXBvcnQgIldlYk5TUGFzdGVib2FyZEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNQcmludE9w
ZXJhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiV2ViUERGVmlldy5oIgorI2ltcG9ydCAiV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9y
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3JXaW5kb3cuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oPgogI2ltcG9ydCA8cGFsL3NwaS9j
b2NvYS9BVktpdFNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTG9va3VwU1BJLmg+CiAjaW1w
b3J0IDxwYWwvc3BpL21hYy9OU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyU1BJLmg+
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2lu
ZG93QW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyODI3OCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oOjIyODI3OCkKKysrIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCitXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNl
IFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uIDogTlNBbmltYXRpb24geworQHByaXZhdGUKKyAgICBO
U1JlY3QgX2luaXRpYWxGcmFtZSwgX2ZpbmFsRnJhbWUsIF9yZWFsRnJhbWU7CisgICAgTlNXaW5k
b3cgKl93aW5kb3c7IC8vIChhc3NpZ24pCisgICAgTlNBbmltYXRpb24gKl9zdWJBbmltYXRpb247
IC8vIChyZXRhaW4pCisgICAgTlNUaW1lSW50ZXJ2YWwgX2hpbnRlZER1cmF0aW9uOworfQorLSAo
aWQpaW5pdFdpdGhIaW50ZWREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93
OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0YWxGcmFtZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5h
bEZyYW1lOihOU1JlY3QpZmluYWxGcmFtZTsKKworLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5T
QW5pbWF0aW9uICopYW5pbWF0aW9uOworCistIChOU1JlY3QpY3VycmVudEZyYW1lOworCisvLyBC
ZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93Om5pbCB0byBjbGVhciB0aGUgd2VhayBsaW5rIF93aW5k
b3cgd2hlbiBhcHByb3ByaWF0ZQorLSAodm9pZClzZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93
OworQGVuZAorCisKK1dFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViV2luZG93RmFkZUFuaW1h
dGlvbiA6IE5TQW5pbWF0aW9uIHsKK0Bwcml2YXRlCisgICAgQ0dGbG9hdCBfaW5pdGlhbEFscGhh
LCBfZmluYWxBbHBoYTsKKyAgICBOU1dpbmRvdyAqX3dpbmRvdzsgLy8gKGFzc2lnbikKKyAgICBC
T09MIF9pc1N0b3BwZWQ7CisgICAgCit9CistIChpZClpbml0V2l0aER1cmF0aW9uOihOU1RpbWVJ
bnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRpYWxBbHBoYToo
Q0dGbG9hdClpbml0aWFsQWxwaGEgZmluYWxBbHBoYTooQ0dGbG9hdClmaW5hbEFscGhhOworCist
IChDR0Zsb2F0KWN1cnJlbnRBbHBoYTsKKworLy8gQmUgc3VyZSB0byBjYWxsIHNldFdpbmRvdzpu
aWwgdG8gY2xlYXIgdGhlIHdlYWsgbGluayBfd2luZG93IHdoZW4gYXBwcm9wcmlhdGUKKy0gKHZv
aWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKK0BlbmQKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24uaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tbQkocmV2aXNpb24gMjI4Mjc4
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLm1t
OjIyODI3OCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5p
bWF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisKKyNpbXBvcnQgIldlYldpbmRvd0FuaW1hdGlvbi5oIgorCisjaW1wb3J0ICJGbG9hdENvbnZl
cnNpb24uaCIKKyNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBzbG93TW90aW9uRmFjdG9yID0g
MTA7CisKK3N0YXRpYyBOU1RpbWVJbnRlcnZhbCBXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlvbkZy
b21EdXJhdGlvbihOU1RpbWVJbnRlcnZhbCBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4gKFtbTlNB
cHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdTaGlm
dCkgPyBkdXJhdGlvbiAqIHNsb3dNb3Rpb25GYWN0b3IgOiBkdXJhdGlvbjsKK30KKworc3RhdGlj
IE5TUmVjdCBzY2FsZWRSZWN0KE5TUmVjdCBfaW5pdGlhbEZyYW1lLCBOU1JlY3QgX2ZpbmFsRnJh
bWUsIENHRmxvYXQgZmFjdG9yKQoreworICAgIE5TUmVjdCBjdXJyZW50UmVjdCA9IF9pbml0aWFs
RnJhbWU7CisgICAgY3VycmVudFJlY3Qub3JpZ2luLnggKz0gKE5TTWluWChfZmluYWxGcmFtZSkg
LSBOU01pblgoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0Lm9yaWdp
bi55ICs9IChOU01pblkoX2ZpbmFsRnJhbWUpIC0gTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSAqIGZh
Y3RvcjsKKyAgICBjdXJyZW50UmVjdC5zaXplLndpZHRoICs9IChOU1dpZHRoKF9maW5hbEZyYW1l
KSAtIE5TV2lkdGgoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAgIGN1cnJlbnRSZWN0LnNp
emUuaGVpZ2h0ICs9IChOU0hlaWdodChfZmluYWxGcmFtZSkgLSBOU0hlaWdodChfaW5pdGlhbEZy
YW1lKSkgKiBmYWN0b3I7CisgICAgcmV0dXJuIGN1cnJlbnRSZWN0OworfQorCitzdGF0aWMgQ0dG
bG9hdCBzcXVhcmVkRGlzdGFuY2UoTlNQb2ludCBwb2ludDEsIE5TUG9pbnQgcG9pbnQyKQorewor
ICAgIENHRmxvYXQgZGVsdGFYID0gcG9pbnQxLnggLSBwb2ludDIueDsKKyAgICBDR0Zsb2F0IGRl
bHRhWSA9IHBvaW50MS55IC0gcG9pbnQyLnk7CisgICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCAr
IGRlbHRhWSAqIGRlbHRhWTsKK30KKworfQorCit1c2luZyBXZWJDb3JlOjpXZWJXaW5kb3dBbmlt
YXRpb25EdXJhdGlvbkZyb21EdXJhdGlvbjsKK3VzaW5nIFdlYkNvcmU6Om5hcnJvd1ByZWNpc2lv
blRvRmxvYXQ7Cit1c2luZyBXZWJDb3JlOjpzY2FsZWRSZWN0OwordXNpbmcgV2ViQ29yZTo6c3F1
YXJlZERpc3RhbmNlOworQGltcGxlbWVudGF0aW9uIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uCisK
Ky0gKGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6
TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsKKyAgICBbc2VsZiBzZXRGcmFtZVJhdGU6
NjBdOworICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aEhpbnRlZER1cmF0aW9u
OihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRh
bEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KE5TUmVjdClmaW5hbEZyYW1l
Cit7CisgICAgc2VsZiA9IFtzZWxmIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBfaGludGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBfd2luZG93ID0g
d2luZG93OworICAgIF9pbml0aWFsRnJhbWUgPSBpbml0aWFsRnJhbWU7CisgICAgX2ZpbmFsRnJh
bWUgPSBmaW5hbEZyYW1lOworICAgIF9yZWFsRnJhbWUgPSBbd2luZG93IGZyYW1lXTsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCkgZGVhbGxvYworeworICAgIFtfc3ViQW5pbWF0aW9u
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREdXJhdGlv
bjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBbc3VwZXIgc2V0RHVyYXRpb246V2Vi
V2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oZHVyYXRpb24pXTsKK30KKworLSAo
dm9pZClzZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93Cit7CisgICAgX3dpbmRvdyA9IHdpbmRv
dzsKK30KKworLSAoZmxvYXQpY3VycmVudFZhbHVlCit7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC41IC0gMC41ICogY29zKHBpRG91YmxlICogKDEgLSBbc2VsZiBjdXJyZW50
UHJvZ3Jlc3NdKSkpOworfQorCistIChOU1JlY3QpY3VycmVudEZyYW1lCit7CisgICAgcmV0dXJu
IHNjYWxlZFJlY3QoX2ZpbmFsRnJhbWUsIF9pbml0aWFsRnJhbWUsIFtzZWxmIGN1cnJlbnRWYWx1
ZV0pOworfQorCitzdGF0aWMgdm9pZCBmbGlwUmVjdChOU1JlY3QqIHJlY3QpCit7CisgICAgcmVj
dC0+b3JpZ2luLnkgPSBOU01heFkoWyhOU1NjcmVlbiAqKVtbTlNTY3JlZW4gc2NyZWVuc10gb2Jq
ZWN0QXRJbmRleDowXSBmcmFtZV0pIC0gTlNNYXhZKCpyZWN0KTsKK30KKworc3RhdGljIENHU0Nv
bm5lY3Rpb25JRCBtYWluV2luZG93U2VydmVyQ29ubmVjdGlvbklEKCkKK3sKKyAgICBzdGF0aWMg
Q0dTQ29ubmVjdGlvbklEIGNnc0lkOworICAgIGlmICghY2dzSWQpCisgICAgICAgIGNnc0lkID0g
Q0dTTWFpbkNvbm5lY3Rpb25JRCgpOworICAgIHJldHVybiBjZ3NJZDsKK30KKworc3RhdGljIHZv
aWQgc2V0U2NhbGVkRnJhbWVGb3JXaW5kb3coTlNXaW5kb3cgKndpbmRvdywgTlNSZWN0IHNjYWxl
RnJhbWUsIE5TUmVjdCBub25TY2FsZWRGcmFtZSkKK3sKKyAgICBpZiAoTlNFcXVhbFJlY3RzKHNj
YWxlRnJhbWUsIG5vblNjYWxlZEZyYW1lKSkgeworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV25vbm51bGwiCisgICAgICAg
IENHU1NldFdpbmRvd1dhcnAobWFpbldpbmRvd1NlcnZlckNvbm5lY3Rpb25JRCgpLCB3aW5kb3cu
d2luZG93TnVtYmVyLCAwLCAwLCBudWxscHRyKTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBmbG9hdCBtZXNoWzE2XTsKKyAg
ICAKKyAgICBmbGlwUmVjdCgmc2NhbGVGcmFtZSk7CisgICAgZmxpcFJlY3QoJm5vblNjYWxlZEZy
YW1lKTsKKyAgICAKKyAgICAvLyB0b3AtbGVmdCBwb2ludCAodG8gYW5kIGZyb20pCisgICAgbWVz
aFswXSA9IDA7CisgICAgbWVzaFsxXSA9IDA7CisgICAgbWVzaFsyXSA9IE5TTWluWChzY2FsZUZy
YW1lKTsKKyAgICBtZXNoWzNdID0gTlNNaW5ZKHNjYWxlRnJhbWUpOworICAgIAorICAgIC8vIHRv
cC1yaWdodCBwb2ludCAodG8gYW5kIGZyb20pCisgICAgbWVzaFs0XSA9IE5TV2lkdGgobm9uU2Nh
bGVkRnJhbWUpOworICAgIG1lc2hbNV0gPSAwOworICAgIG1lc2hbNl0gPSBOU01heFgoc2NhbGVG
cmFtZSk7CisgICAgbWVzaFs3XSA9IE5TTWluWShzY2FsZUZyYW1lKTsKKyAgICAKKyAgICAvLyBi
b3R0b20tbGVmdCAodG8gYW5kIGZyb20pCisgICAgbWVzaFs4XSA9IDA7CisgICAgbWVzaFs5XSA9
IE5TSGVpZ2h0KG5vblNjYWxlZEZyYW1lKTsKKyAgICBtZXNoWzEwXSA9IE5TTWluWChzY2FsZUZy
YW1lKTsKKyAgICBtZXNoWzExXSA9IE5TTWF4WShzY2FsZUZyYW1lKTsKKyAgICAKKyAgICAvLyBi
b3R0b20tcmlnaHQgKHRvIGFuZCBmcm9tKQorICAgIG1lc2hbMTJdID0gTlNXaWR0aChub25TY2Fs
ZWRGcmFtZSk7CisgICAgbWVzaFsxM10gPSBOU0hlaWdodChub25TY2FsZWRGcmFtZSk7CisgICAg
bWVzaFsxNF0gPSBOU01heFgoc2NhbGVGcmFtZSk7CisgICAgbWVzaFsxNV0gPSBOU01heFkoc2Nh
bGVGcmFtZSk7CisgICAgCisgICAgLy8gQXBwbHkgdGhlIHdhcnAuCisgICAgQ0dTU2V0V2luZG93
V2FycChtYWluV2luZG93U2VydmVyQ29ubmVjdGlvbklEKCksIHdpbmRvdy53aW5kb3dOdW1iZXIs
IDIsIDIsIG1lc2gpOworfQorCistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNBbmltYXRp
b25Qcm9ncmVzcylwcm9ncmVzcworeworICAgIGlmICghX3dpbmRvdykKKyAgICAgICAgcmV0dXJu
OworCisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107CisKKyAgICBOU1Jl
Y3QgY3VycmVudFJlY3QgPSBbc2VsZiBjdXJyZW50RnJhbWVdOworICAgIHNldFNjYWxlZEZyYW1l
Rm9yV2luZG93KF93aW5kb3csIGN1cnJlbnRSZWN0LCBfcmVhbEZyYW1lKTsKKyAgICBbX3N1YkFu
aW1hdGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6cHJvZ3Jlc3NdOworfQorCistICh2b2lkKXNldFN1
YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilhbmltYXRpb24KK3sKKyAgICBpZCBvbGRBbmltYXRp
b24gPSBfc3ViQW5pbWF0aW9uOworICAgIF9zdWJBbmltYXRpb24gPSBbYW5pbWF0aW9uIHJldGFp
bl07CisgICAgW29sZEFuaW1hdGlvbiByZWxlYXNlXTsKK30KKworLSAoTlNUaW1lSW50ZXJ2YWwp
YWRkaXRpb25hbER1cmF0aW9uTmVlZGVkVG9SZWFjaEZpbmFsRnJhbWUKK3sKKyAgICBzdGF0aWMg
Y29uc3QgQ0dGbG9hdCBtYXhBZGRpdGlvbmFsRHVyYXRpb24gPSAxOworICAgIHN0YXRpYyBjb25z
dCBDR0Zsb2F0IHNwZWVkRmFjdG9yID0gMC4wMDAxZjsKKyAgICAKKyAgICBDR0Zsb2F0IG1heERp
c3QgPSBzcXVhcmVkRGlzdGFuY2UoX2luaXRpYWxGcmFtZS5vcmlnaW4sIF9maW5hbEZyYW1lLm9y
aWdpbik7CisgICAgQ0dGbG9hdCBkaXN0OworICAgIAorICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFu
Y2UoTlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUpLCBOU01pblkoX2luaXRpYWxGcmFt
ZSkpLCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUpLCBOU01pblkoX2ZpbmFsRnJhbWUp
KSk7CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQorICAgICAgICBtYXhEaXN0ID0gZGlzdDsKKyAg
ICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlh
bEZyYW1lKSwgTlNNYXhZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5h
bEZyYW1lKSwgTlNNYXhZKF9maW5hbEZyYW1lKSkpOworICAgIGlmIChkaXN0ID4gbWF4RGlzdCkK
KyAgICAgICAgbWF4RGlzdCA9IGRpc3Q7CisgICAgCisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5j
ZShOU01ha2VQb2ludChOU01pblgoX2luaXRpYWxGcmFtZSksIE5TTWluWShfaW5pdGlhbEZyYW1l
KSksIE5TTWFrZVBvaW50KE5TTWluWChfZmluYWxGcmFtZSksIE5TTWluWShfZmluYWxGcmFtZSkp
KTsKKyAgICBpZiAoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAg
IAorICAgIHJldHVybiBNSU4oc3FydChtYXhEaXN0KSAqIHNwZWVkRmFjdG9yLCBtYXhBZGRpdGlv
bmFsRHVyYXRpb24pOyAgICAKK30KKworLSAodm9pZClzdGFydEFuaW1hdGlvbgoreworICAgIC8v
IENvbXB1dGUgZXh0cmEgdGltZQorICAgIGlmIChfaGludGVkRHVyYXRpb24pCisgICAgICAgIFtz
ZWxmIHNldER1cmF0aW9uOl9oaW50ZWREdXJhdGlvbiArIFtzZWxmIGFkZGl0aW9uYWxEdXJhdGlv
bk5lZWRlZFRvUmVhY2hGaW5hbEZyYW1lXV07CisgICAgW3N1cGVyIHN0YXJ0QW5pbWF0aW9uXTsK
K30KKworLSAodm9pZClzdG9wQW5pbWF0aW9uCit7CisgICAgX3dpbmRvdyA9IG5pbDsKKyAgICBb
c3VwZXIgc3RvcEFuaW1hdGlvbl07CisgICAgW19zdWJBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07
Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYldpbmRvd0ZhZGVBbmltYXRpb24KKwor
LSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpO
U0FuaW1hdGlvbk5vbmJsb2NraW5nVGhyZWFkZWRdOworICAgIFtzZWxmIHNldEZyYW1lUmF0ZTo2
MF07CisgICAgW3NlbGYgc2V0QW5pbWF0aW9uQ3VydmU6TlNBbmltYXRpb25FYXNlSW5PdXRdOwor
ICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0V2l0aER1cmF0aW9uOihOU1RpbWVJbnRl
cnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGluaXRpYWxBbHBoYTooQ0dG
bG9hdClpbml0aWFsQWxwaGEgZmluYWxBbHBoYTooQ0dGbG9hdClmaW5hbEFscGhhCit7CisgICAg
c2VsZiA9IFtzZWxmIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsg
ICAgCisgICAgX3dpbmRvdyA9IHdpbmRvdzsKKyAgICBfaW5pdGlhbEFscGhhID0gaW5pdGlhbEFs
cGhhOworICAgIF9maW5hbEFscGhhID0gZmluYWxBbHBoYTsKKyAgICBbc2VsZiBzZXREdXJhdGlv
bjpkdXJhdGlvbl07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RHVyYXRpb246
KE5TVGltZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldp
bmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9uKGR1cmF0aW9uKV07Cit9CisKKy0gKENH
RmxvYXQpY3VycmVudEFscGhhCit7CisgICAgcmV0dXJuIE1BWCgwLCBNSU4oMSwgX2luaXRpYWxB
bHBoYSArIFtzZWxmIGN1cnJlbnRWYWx1ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5pdGlhbEFscGhh
KSkpOworfQorCistICh2b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNBbmltYXRpb25Qcm9ncmVz
cylwcm9ncmVzcworeworICAgIGlmIChfaXNTdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQoX3dpbmRvdyk7CisgICAgW3N1cGVyIHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVz
c107CisKKyAgICBDR1NTZXRXaW5kb3dBbHBoYShtYWluV2luZG93U2VydmVyQ29ubmVjdGlvbklE
KCksIF93aW5kb3cud2luZG93TnVtYmVyLCBzZWxmLmN1cnJlbnRBbHBoYSk7Cit9CisKKy0gKHZv
aWQpc2V0V2luZG93OihOU1dpbmRvdyopd2luZG93Cit7CisgICAgX3dpbmRvdyA9IHdpbmRvdzsK
K30KKworLSAodm9pZClzdG9wQW5pbWF0aW9uCit7CisgICAgLy8gVGhpcyBpcyByZWxldmFudCB3
aGVuIHdlIGFyZSBhIHN1YiBhbmltYXRpb24gb2YgYSBzY2FsZSBhbmltYXRpb24uCisgICAgLy8g
SW4gdGhpcyBjYXNlIHdlIGFyZSBob3N0ZWQgaW4gdGhlIGFuaW1hdGVkIHRocmVhZCBvZiB0aGUg
cGFyZW50CisgICAgLy8gYW5kIGV2ZW4gYWZ0ZXIgW3N1cGVyIHN0b3BBbmltYXRpb25dLCB0aGUg
cGFyZW50IG1pZ2h0IGNhbGwKKyAgICAvLyBzZXRDdXJycmVudFByb2dyZXNzLgorICAgIF9pc1N0
b3BwZWQgPSBZRVM7CisKKyAgICBbc3VwZXIgc3RvcEFuaW1hdGlvbl07Cit9CisKK0BlbmQKKwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYldpbmRv
d0FuaW1hdGlvbi5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEg
IyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYldpbmRvd0FuaW1hdGlvbi5t
bQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJXaW5kb3dBbmltYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMyw5IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW1wb3J0ICJjb25maWcuaCIKLQogI2ltcG9ydCAiV2Vi
V2luZG93QW5pbWF0aW9uLmgiCiAKLSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgorI2ltcG9y
dCA8V2ViQ29yZS9GbG9hdENvbnZlcnNpb24uaD4KICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8d3RmL01h
dGhFeHRyYXMuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333422</attachid>
            <date>2018-02-08 14:31:48 -0800</date>
            <delta_ts>2018-02-08 14:37:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182615-20180208143147.patch</filename>
            <type>text/plain</type>
            <size>155053</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE4LTAyLTA4ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgZnJvbSBXZWJDb3JlIHRvIFdlYktpdExlZ2FjeS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjYxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IGlzIG9ubHkgdXNlZCBi
eSBXSzEuIEFsc28gdGhlcmUgYXJlIGEgZmV3IHJlZmVyZW5jZXMgdG8gTlNBcHAgaW4gV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbS4KKyAgICAgICAgSWRlYWxseSwgd2Ugc2hvdWxkIG5v
dCByZWZlcmVuY2UgTlNBcHAgaW4gV2ViQ29yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5v
IGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXNNYWMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW06
IFJlbW92ZWQuCisKIDIwMTgtMDItMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCB0aW55IHBhcnRpYWwgcm9sbG91dCBvZiByMjI4MjYwIGFz
IGl0IGNhdXNlZCBzb21lIHdvcmtlciBmYWlsdXJlcwpJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlc01hYy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlc01hYy50eHQJ
KHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNNYWMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDMsOSArMTAzLDYgQEAgcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZQogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCiBw
bGF0Zm9ybS9tYWMvV2ViR0xCbGFja2xpc3QubW0KIHBsYXRmb3JtL21hYy9XZWJOU0F0dHJpYnV0
ZWRTdHJpbmdFeHRyYXMubW0KLXBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tIEBuby11bmlmeQotcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIubW0KLXBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0KIHBsYXRm
b3JtL21hYy9XaWRnZXRNYWMubW0KIAogcGxhdGZvcm0vbmV0d29yay9tYWMvTmV0d29ya1N0YXRl
Tm90aWZpZXJNYWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1
MjMsNyArMzUyMyw3IEBACiAJCUJDMDZFREEwMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJs
ZVJvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDZFRDlDMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVJvd0VsZW1lbnQuaCAq
LzsgfTsKIAkJQkMwNkVERTQwQkZENkQwRDAwODU2RTlEIC8qIEpTSFRNTFRhYmxlQ2VsbEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZF
REUyMEJGRDZEMEQwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUNlbGxFbGVtZW50LmggKi87IH07CiAJ
CUJDMDZFRTA1MEJGRDcxQUEwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFRTAzMEJGRDcxQUEw
MDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCAqLzsgfTsKLQkJQkMwNzNCQUEwQzM5OUIx
RjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwNzNCQTkwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29u
dmVyc2lvbi5oICovOyB9OworCQlCQzA3M0JBQTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252
ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzA3M0JBOTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxMEQ3NjgxN0Q4RUU3MTAw
NUUyNjI2IC8qIFJlbmRlckJsb2NrRmxvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGQjQ1RjMxN0Q4RTM5MjAwNDQ0NDQ2IC8qIFJlbmRlckJsb2Nr
Rmxvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDMTI0RUU4MEMyNjQxQ0QwMDlFMjM0OSAvKiBCYXJQcm9wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyNEVFNTBDMjY0MUNEMDA5RTIzNDkgLyog
QmFyUHJvcC5oICovOyB9OwogCQlCQzEyNEYwMDBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJQcm9w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyNEVG
RTBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJQcm9wLmggKi87IH07CkBAIC0zODY5LDkgKzM4Njks
NiBAQAogCQlDRDdEMzM0ODFDN0ExNkJGMDAwNDEyOTMgLyogQ29yZVZpZGVvU29mdExpbmsuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0QzMzQ2MUM3
QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5oICovOyB9OwogCQlDRDdEQkIyOTE4
Q0ExOUM2MDBDMTEwNjYgLyogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDdEQkIyNzE4Q0ExMUZGMDBDMTEwNjYg
LyogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggKi87IH07CiAJCUNEN0UwNTIyMTY1MUMyODIwMEMx
MjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDdFMDUyMTE2NTFBODQxMDBDMTIwMUYgLyogV2Vi
Q29yZUFWRlJlc291cmNlTG9hZGVyLm1tICovOyB9OwotCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDRDgyMDMxMDEzOTVBQ0U3MDBGOTU2QzYgLyog
V2ViV2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4
QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQjkxOTc3
MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovOyB9OwogCQlD
RDhBN0JCQzE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEE3QkJBMTk3
NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovOyB9OwogCQlD
RDhBQ0E4OTFEMjM3QUEyMDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhBQ0E4NzFEMjM3
QUEyMDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggKi87IH07CkBAIC00Mjcx
LDcgKzQyNjgsNiBAQAogCQlERTVGODYxMjFGQTIzOUU3MDA2REI2M0EgLyogSlNHQ09ic2VydmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NzE0RUFFMUNGNjY1NEEwMDQ3MjNDNCAvKiBKU0dDT2JzZXJ2YXRpb24uY3BwICovOyB9OwogCQlE
RTVGODYxRDFGQTI4MTVCMDA2REI2M0EgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTQ3
OEE3RTE2Q0Q3MEMzMDA3RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0gKi87IH07CiAJCURFNUY4NjFFMUZBMjgxRkQwMDZEQjYzQSAvKiBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOUE4MTI0NjBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLm1tICovOyB9OwotCQlERTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyog
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIwMzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovOyB9OwogCQlERTVGODY1MDFGQTJBRjI0MDA2REI2
M0EgLyogVW5pZmllZFNvdXJjZTUxLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREU1Rjg2MzYxRkEyQUYwNDAwNkRCNjNBIC8qIFVuaWZpZWRTb3Vy
Y2U1MS1tbS5tbSAqLzsgfTsKIAkJREU1Rjg2NTExRkEyQUYyNDAwNkRCNjNBIC8qIFVuaWZpZWRT
b3VyY2U1Mi1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERFNUY4NjM3MUZBMkFGMDUwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTItbW0ubW0gKi87
IH07CiAJCURFNUY4NjUyMUZBMkFGMjQwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTMtbW0ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERTVGODYzNTFG
QTJBRjAzMDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTUzLW1tLm1tICovOyB9OwpAQCAtMTI5ODMs
MTIgKzEyOTc5LDYgQEAKIAkJQ0Q3REJCMjcxOENBMTFGRjAwQzExMDY2IC8qIENTU0dyaWRMaW5l
TmFtZXNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NHcmlkTGlu
ZU5hbWVzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3RTA1MjAxNjUx
QTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q3RTA1MjExNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDRDgyMDMwNzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEODIwMzA4MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5p
bWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRvd0FuaW1h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRDgyMDMwRjEzOTVBQ0U3MDBG
OTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDg3MUM1QzFGQjUyQjYzMDBGMEI5NjUgLyogSVNPU2NoZW1lVHlwZUJveC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJU09TY2hlbWVUeXBlQm94Lmg7IHBh
dGggPSBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPU2NoZW1lVHlwZUJveC5oOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CiAJCUNEODcxQzVFMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBJU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHA7IHBhdGggPSBwbGF0Zm9ybS9ncmFw
aGljcy9pc28vSVNPUHJvdGVjdGlvblNjaGVtZUluZm9Cb3guY3BwOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CiAJCUNEODcxQzVGMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09TY2hlbWVUeXBl
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElTT1NjaGVtZVR5
cGVCb3guY3BwOyBwYXRoID0gcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1NjaGVtZVR5cGVCb3gu
Y3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC0xODY4MCwxMiArMTg2NzAsNiBA
QAogCQkJCUUxQTMxNjJDMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdF
eHRyYXMubW0gKi8sCiAJCQkJQ0Q1ODk2RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q1ODk2REYxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tICovLAotCQkJCUNEODIwMzA2MTM5NUFCNkEwMEY5
NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8sCi0JCQkJQ0Q4MjAzMDcx
Mzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCi0J
CQkJQ0Q4MjAzMDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIuaCAqLywKLQkJCQlDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLywKLQkJCQlDRDgyMDMwRTEzOTVB
Q0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8sCi0JCQkJQ0Q4MjAzMEYxMzk1
QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLywKIAkJCQk5MzgwRjQ3NzA5
QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7
CkBAIC0yODI3Myw3ICsyODI1Nyw2IEBACiAJCQkJMDc5NjlEQzIxN0QxNDE1MTAwN0ZGODQyIC8q
IEpTUlRDU3RhdHNSZXBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVFMkM0MzZDMUJDRjA3MUUw
MDAxRTJCQyAvKiBKU1JUQ1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUMwMUMz
MEMyNzREREQwMDlGNEVDOSAvKiBKU1NjcmVlbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY1QjQw
OEEyMDIxMkY3NzAwODBGOTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU1NjcmlwdFByb2Nlc3Nvck5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzNDQ3NkVGMURBNUJDNUUwMDJCNkVEMiAvKiBKU1Nj
cm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRG
QUYxIC8qIEpTU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yODg5Myw2ICsyODg3Niw3IEBACiAJCQkJNDE4NEY1MTYxRUFGMDVBODAwRjE4QkYwIC8qIE9y
aWVudGF0aW9uTm90aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwMTQ2MjhCMTAzQ0QxREUw
MDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RTg5
RkMxNkUyREMwNTAwQTkwOEY4IC8qIE9yaWdpbkxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NUI0MDhBMjAyMTJGNzcwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDU4MUZBRjE1MjBGOTFGMDAzQTdBNzUgLyogT3NjaWxsYXRvck5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUREMEU4MUI4REQwMEIyNTk2NSAvKiBPdXRsaW5l
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMjlGNTcyMThDNjk1MTQwMDREMEY4MSAvKiBP
dXRPZkJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjQ4LDE0
ICszMDIzMiwxMSBAQAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEODIwMzBBMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjQyQjMxRDE4ODExOTFCMDAy
NzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggaW4gSGVhZGVycyAq
LywKLQkJCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjEyMTcxRjYxNkE4Q0YwQjAw
MDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVEMjFBODAzMTNF
Q0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIxMEI2
OTgwMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjEwQjY5ODIxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQ0Q4MjAzMTAxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERTAxMjUxRjEyRDAwM0VGMjY5IC8qIFdlZWtJbnB1
dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjUxMEE0NEVGQzcwMEY5OTJFMCAvKiBX
aGVlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRUJCQzNEODFCNjU5ODgzMDBGNTI1M0Qg
LyogV2hlZWxFdmVudERlbHRhRmlsdGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNDc3LDcgKzMx
NDU4LDYgQEAKIAkJCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2
QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywKLQkJCQlE
RTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAv
KiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAw
QkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2
LDcgKzE1Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBiZXN0
TWVkaWFFbGVtZW50Rm9yU2hvd2luZ1BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKE1lZGlhRWxlbWVu
dFNlc3Npb246OlBsYXliYWNrQ29udHJvbHNQdXJwb3NlKTsKIAotICAgIHZvaWQgcmV3aW5kKGRv
dWJsZSB0aW1lRGVsdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV3aW5kKGRvdWJsZSB0
aW1lRGVsdGEpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV0dXJuVG9SZWFsdGltZSgpIG92
ZXJyaWRlOwogCiAgICAgLy8gRXZlbnR1YWxseSBvdmVybG9hZGVkIGluIEhUTUxWaWRlb0VsZW1l
bnQKQEAgLTIyNyw3ICsyMjcsNyBAQCBwdWJsaWM6CiAKIC8vIHBsYXliYWNrIHN0YXRlCiAgICAg
V0VCQ09SRV9FWFBPUlQgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnJl
bnRUaW1lV2l0aFRvbGVyYW5jZShkb3VibGUsIGRvdWJsZSB0b2xlcmFuY2VCZWZvcmUsIGRvdWJs
ZSB0b2xlcmFuY2VBZnRlcik7CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lRm9yQmluZGluZ3MoKSBj
b25zdCB7IHJldHVybiBjdXJyZW50VGltZSgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0Q3VycmVudFRpbWVGb3JCaW5kaW5ncyhkb3VibGUpOwpAQCAtMzA2LDcg
KzMwNiw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRyb2xzKCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb250cm9scyhib29sKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBkb3VibGUgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0Vm9sdW1lKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0Vm9sdW1lKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBtdXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPKQotCi0jaW1wb3J0IDxBcHBLaXQvTlNXaW5kb3dDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNTY3JlZW4uaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFBBTCB7Ci1jbGFzcyBTbGVlcERpc2FibGVyOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9jb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlOwotQGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXI7Ci1AY2xhc3MgV2ViV2luZG93RmFkZUFuaW1hdGlvbjsKLUBj
bGFzcyBDQUxheWVyOwotCi1XRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewotQHByaXZhdGUKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsgLy8gKHJldGFpbikK
LSAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7
IC8vIChhc3NpZ24pCi0KLSAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93
OyAvLyAocmV0YWluKQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIg
Kl9odWRDb250cm9sbGVyOyAvLyAocmV0YWluKQotCi0gICAgV2ViV2luZG93RmFkZUFuaW1hdGlv
biAqX2ZhZGVBbmltYXRpb247IC8vIChyZXRhaW4pCi0KLSAgICBCT09MIF9pc0VuZGluZ0Z1bGxz
Y3JlZW47Ci0gICAgQk9PTCBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFBBTDo6U2xlZXBEaXNhYmxlcj4gX2Rpc3BsYXlTbGVlcERpc2FibGVyOwotfQotCi0t
IChpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKLS0g
KHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdh
dGU+KWRlbGVnYXRlOwotCi0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyKilsYXll
cjsKLS0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2
aWRlb0VsZW1lbnQ7Ci0tIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7
Ci0KLS0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKLS0gKHZvaWQp
ZXhpdEZ1bGxzY3JlZW47Ci0KLUBlbmQKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
bW0JKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNTM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJ
REVPKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgiCi0KLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldl
YldpbmRvd0FuaW1hdGlvbi5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyTGF5ZXIu
aD4KLSNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVv
RWxlbWVudC5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3lzdGVt
L1NsZWVwRGlzYWJsZXIuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi9Tb2Z0TGlua2luZy5oPgotCi11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotCi0j
aWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0j
ZW5kaWYKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pCi1TT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQotCi11c2luZyBXZWJDb3JlOjpQbGF0Zm9y
bU1lZGlhOwotQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgOiBOU1dpbmRvdzxO
U0FuaW1hdGlvbkRlbGVnYXRlPgotewotICAgIFNFTCBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0
aW9uRW5kOwotICAgIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uICpfZnVsbHNjcmVlbkFuaW1hdGlv
bjsgLy8gKHJldGFpbikKLX0KLS0gKHZvaWQpYW5pbWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRS
ZWN0IHRvUmVjdDooTlNSZWN0KWVuZFJlY3Qgd2l0aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24g
KilzdWJBbmltYXRpb24gY29udHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xsZXJBY3Rpb247Ci1A
ZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcihIVURXaW5kb3dD
b250cm9sbGVyRGVsZWdhdGUpIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
RGVsZWdhdGU+Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJP
T0wpYW5pbWF0aW9uOwotLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW47Ci0t
ICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9uczsKLUBlbmQKLQotQGludGVyZmFjZSBOU1dpbmRv
dyhJc09uQWN0aXZlU3BhY2VBZGRpdGlvbkZvclRpZ2VyQW5kTGVvcGFyZCkKLS0gKEJPT0wpaXNP
bkFjdGl2ZVNwYWNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlcgotLSAoaWQpaW5pdAotewotICAgIC8vIERvIG5vdCBkZWZlciB3aW5kb3cgY3Jl
YXRpb24sIHRvIG1ha2Ugc3VyZSAtd2luZG93TnVtYmVyIGlzIGNyZWF0ZWQgKG5lZWRlZCBieSBX
ZWJXaW5kb3dTY2FsZUFuaW1hdGlvbikuCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2ViVmlk
ZW9GdWxsc2NyZWVuV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qg
c3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1
ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoV2luZG93OndpbmRv
d107Ci0gICAgW3dpbmRvdyByZWxlYXNlXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgW3NlbGYgd2luZG93RGlkTG9hZF07Ci0gICAgcmV0dXJuIHNlbGY7Ci0gICAg
Ci19Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBBU1NFUlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVl
bldpbmRvdyk7Ci0gICAgQVNTRVJUKCFfZmFkZUFuaW1hdGlvbik7Ci0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLS0gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKWZ1bGxzY3Jl
ZW5XaW5kb3cKLXsKLSAgICByZXR1cm4gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKVtzdXBl
ciB3aW5kb3ddOwotfQotCi0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyICopbGF5
ZXIKLXsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxz
Y3JlZW5XaW5kb3ddOwotICAgIFsoTlNWaWV3Kilbd2luZG93IGNvbnRlbnRWaWV3XSBzZXRMYXll
cjpsYXllcl07Ci0gICAgW1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6WUVTXTsK
LX0KLQotLSAodm9pZCl3aW5kb3dEaWRMb2FkCi17Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuV2lu
ZG93ICp3aW5kb3cgPSBbc2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLSAgICBbd2luZG93IHNldEhh
c1NoYWRvdzpZRVNdOyAvLyBUaGlzIGlzIG5pY2VyIHdpdGggYSBzaGFkb3cuCi0gICAgW3dpbmRv
dyBzZXRMZXZlbDpOU1BvcFVwTWVudVdpbmRvd0xldmVsLTFdOwotICAgIFsoTlNWaWV3Kilbd2lu
ZG93IGNvbnRlbnRWaWV3XSBzZXRMYXllcjpbQ0FMYXllciBsYXllcl1dOwotICAgIFtbd2luZG93
IGNvbnRlbnRWaWV3XSBzZXRXYW50c0xheWVyOllFU107Ci0KLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KGFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOikgbmFtZTpOU0FwcGxpY2F0aW9uRGlkUmVzaWdu
QWN0aXZlTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihh
cHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25E
aWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07Ci19Ci0K
LS0gKEhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAotewotICAgIHJldHVybiBfdmlkZW9F
bGVtZW50LmdldCgpOwotfQotCi0tICh2b2lkKXNldFZpZGVvRWxlbWVudDooSFRNTFZpZGVvRWxl
bWVudCopdmlkZW9FbGVtZW50Ci17Ci0gICAgX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsK
LQotICAgIGlmICghX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtz
ZWxmIGlzV2luZG93TG9hZGVkXSkgewotICAgICAgICBpZiAoX3ZpZGVvRWxlbWVudC0+cGxhdGZv
cm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQbGF5ZXJU
eXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0gX3ZpZGVvRWxlbWVudC0+cGxh
dGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOwotICAgICAgICAgICAgUmV0YWluUHRy
PEFWUGxheWVyTGF5ZXI+IGxheWVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXllckxheWVySW5zdGFu
Y2UoKSBpbml0XSk7Ci0gICAgICAgICAgICBbc2VsZiBzZXR1cFZpZGVvT3ZlcmxheTpsYXllci5n
ZXQoKV07Ci0gICAgICAgICAgICBbbGF5ZXIuZ2V0KCkgc2V0UGxheWVyOnBsYXllcl07Ci0KLSAg
ICAgICAgICAgIFtwbGF5ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAicmF0ZSIgb3B0
aW9uczowIGNvbnRleHQ6bnVsbHB0cl07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKGlkIDxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0
dXJuIF9kZWxlZ2F0ZTsKLX0KLQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKLX0KLQotLSAoQ0dGbG9hdCljbGVhckZhZGVBbmltYXRpb24KLXsKLSAgICBbX2Zh
ZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgQ0dGbG9hdCBwcmV2aW91c0FscGhhID0g
W19mYWRlQW5pbWF0aW9uIGN1cnJlbnRBbHBoYV07Ci0gICAgW19mYWRlQW5pbWF0aW9uIHNldFdp
bmRvdzpuaWxdOwotICAgIFtfZmFkZUFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBfZmFkZUFuaW1h
dGlvbiA9IG5pbDsKLSAgICByZXR1cm4gcHJldmlvdXNBbHBoYTsKLX0KLQotLSAodm9pZCl3aW5k
b3dEaWRFeGl0RnVsbHNjcmVlbgotewotICAgIENBTGF5ZXIgKmxheWVyID0gWyhOU1ZpZXcqKVtb
c2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBsYXllcl07Ci0gICAgaWYgKFtsYXllciBpc0tpbmRP
ZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSkKLSAgICAgICAgW1soQVZQbGF5ZXJMYXll
ciopbGF5ZXIgcGxheWVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJyYXRlIl07
Ci0KLSAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOwotICAgIFtbc2VsZiB3aW5kb3ddIGNs
b3NlXTsKLSAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKLSAgICBbc2VsZiB1cGRhdGVNZW51QW5k
RG9ja0ZvckZ1bGxzY3JlZW5dOyAgIAotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0aW9uc107
Ci0gICAgW19odWRDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19odWRDb250cm9s
bGVyIHJlbGVhc2VdOwotICAgIF9odWRDb250cm9sbGVyID0gbmlsOwotICAgIFtfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgY2xvc2VdOwotICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgcmVsZWFzZV07Ci0gICAgX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOwotICAg
IAotICAgIFtzZWxmIGF1dG9yZWxlYXNlXTsgLy8gQXNzb2NpYXRlZCAtcmV0YWluIGlzIGluIC1l
eGl0RnVsbHNjcmVlbi4KLSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gTk87Ci19Ci0KLS0gKHZv
aWQpd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0
aW9uXTsKLQotICAgIEFTU0VSVCghX2h1ZENvbnRyb2xsZXIpOwotICAgIF9odWRDb250cm9sbGVy
ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsK
LSAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0KLSAgICBbc2VsZiB1cGRh
dGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOwotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0
aW9uc107Ci0gICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOwotICAg
IAotICAgIC8vIEdpdmUgdGhlIEhVRCBrZXlib2FyZCBmb2N1cyBpbml0aWFsbHkKLSAgICBbX2h1
ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKLX0KLQotLSAoTlNSZWN0KXZpZGVvRWxlbWVudFJl
Y3QKLXsKLSAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpOwotfQotCi0tICh2
b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0
aW9uCi17ICAgCi0gICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgTlNXaW5kb3cq
IGZ1bGxzY3JlZW5XaW5kb3cgPSBbc2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLQotICAgIC8vIFJl
cGxpY2F0ZSB0aGUgUXVpY2tUaW1lIFBsYXllciAoWCkgYmVoYXZpb3Igd2hlbiBsb3NpbmcgYWN0
aXZlIGFwcGxpY2F0aW9uIHN0YXR1czoKLSAgICAvLyBJcyB0aGUgZnVsbHNjcmVlbiBzY3JlZW4g
dGhlIG1haW4gc2NyZWVuPyAoTm90ZTogdGhpcyBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgb25seSBh
IAotICAgIC8vIHNpbmdsZSBzY3JlZW4gaXMgYXZhaWxhYmxlLikgIElzIHRoZSBmdWxsc2NyZWVu
IHNjcmVlbiBvbiB0aGUgY3VycmVudCBzcGFjZT8gSUZGIHNvLCAKLSAgICAvLyB0aGVuIGV4aXQg
ZnVsbHNjcmVlbiBtb2RlLiAgICAKLSAgICBpZiAoZnVsbHNjcmVlbldpbmRvdy5zY3JlZW4gPT0g
W05TU2NyZWVuIHNjcmVlbnNdWzBdICYmIGZ1bGxzY3JlZW5XaW5kb3cub25BY3RpdmVTcGFjZSkK
LSAgICAgICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246Tk9dOwot
fQotICAgICAgICAgCi0gICAgICAgICAKLS8vIE1BUks6IC0KLS8vIE1BUks6IEV4cG9zZWQgSW50
ZXJmYWNlCi0KLXN0YXRpYyBOU1JlY3QgZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZyYW1lKE5TUmVj
dCBmcmFtZVRvRXhwYW5kLCBOU1JlY3QgZnJhbWUpCi17Ci0gICAgLy8gS2VlcCBhIGNvbnN0cmFp
bmVkIGFzcGVjdCByYXRpbyBmb3IgdGhlIGRlc3RpbmF0aW9uIHdpbmRvdwotICAgIE5TUmVjdCBy
ZXN1bHQgPSBmcmFtZVRvRXhwYW5kOwotICAgIENHRmxvYXQgbmV3UmF0aW8gPSBmcmFtZS5zaXpl
LndpZHRoIC8gZnJhbWUuc2l6ZS5oZWlnaHQ7Ci0gICAgQ0dGbG9hdCBvcmlnaW5hbFJhdGlvID0g
ZnJhbWVUb0V4cGFuZC5zaXplLndpZHRoIC8gZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAg
ICBpZiAobmV3UmF0aW8gPiBvcmlnaW5hbFJhdGlvKSB7Ci0gICAgICAgIENHRmxvYXQgbmV3V2lk
dGggPSBuZXdSYXRpbyAqIGZyYW1lVG9FeHBhbmQuc2l6ZS5oZWlnaHQ7Ci0gICAgICAgIENHRmxv
YXQgZGlmZiA9IG5ld1dpZHRoIC0gZnJhbWVUb0V4cGFuZC5zaXplLndpZHRoOwotICAgICAgICBy
ZXN1bHQuc2l6ZS53aWR0aCA9IG5ld1dpZHRoOwotICAgICAgICByZXN1bHQub3JpZ2luLnggLT0g
ZGlmZiAvIDI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ0dGbG9hdCBuZXdIZWlnaHQgPSBmcmFt
ZVRvRXhwYW5kLnNpemUud2lkdGggLyBuZXdSYXRpbzsKLSAgICAgICAgQ0dGbG9hdCBkaWZmID0g
bmV3SGVpZ2h0IC0gZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAgICAgICAgcmVzdWx0LnNp
emUuaGVpZ2h0ID0gbmV3SGVpZ2h0OwotICAgICAgICByZXN1bHQub3JpZ2luLnkgLT0gZGlmZiAv
IDI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU1dpbmRvdyAqY3Jl
YXRlQmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3coTlNSZWN0IGZyYW1lLCBpbnQgbGV2ZWwpCi17
Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVu
dFJlY3Q6ZnJhbWUgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0Jh
Y2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBbd2luZG93IHNldE9wYXF1ZTpZRVNd
OwotICAgIFt3aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsK
LSAgICBbd2luZG93IHNldExldmVsOmxldmVsXTsKLSAgICBbd2luZG93IHNldFJlbGVhc2VkV2hl
bkNsb3NlZDpOT107Ci0gICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotLSAodm9pZClzZXR1cEZhZGVB
bmltYXRpb25JZk5lZWRlZEFuZEZhZGVJbjooQk9PTClmYWRlSW4KLXsKLSAgICBDR0Zsb2F0IGlu
aXRpYWxBbHBoYSA9IGZhZGVJbiA/IDAgOiAxOwotICAgIGlmIChfZmFkZUFuaW1hdGlvbikgewot
ICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiBpZiB0aGUg
cHJldmlvdXMgb25lIGlzbid0IG92ZXIgeWV0Ci0gICAgICAgIGluaXRpYWxBbHBoYSA9IFtzZWxm
IGNsZWFyRmFkZUFuaW1hdGlvbl07Ci0gICAgfQotICAgIGlmICghX2ZvcmNlRGlzYWJsZUFuaW1h
dGlvbikKLSAgICAgICAgX2ZhZGVBbmltYXRpb24gPSBbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24g
YWxsb2NdIGluaXRXaXRoRHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxzY3JlZW5X
aW5kb3cgaW5pdGlhbEFscGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOmZhZGVJbiA/IDEgOiAw
XTsKLX0KLQotLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCi17Ci0g
ICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsK
LQotICAgIE5TUmVjdCBlbmRGcmFtZSA9IFtzY3JlZW4gZnJhbWVdOwotICAgIE5TUmVjdCBmcmFt
ZSA9IGZyYW1lRXhwYW5kZWRUb1JhdGlvT2ZGcmFtZShbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XSwg
ZW5kRnJhbWUpOwotCi0gICAgLy8gQ3JlYXRlIGEgYmxhY2sgd2luZG93IGlmIG5lZWRlZAotICAg
IGlmICghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KQotICAgICAgICBfYmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3cgPSBjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhbc2NyZWVu
IGZyYW1lXSwgW1tzZWxmIHdpbmRvd10gbGV2ZWxdLTEpOwotICAgIGVsc2UKLSAgICAgICAgW19i
YWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRGcmFtZTpbc2NyZWVuIGZyYW1lXSBkaXNwbGF5
Ok5PXTsKLQotICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOllF
U107Ci0gICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAgLy8gVGhpcyB3
aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGZyYW1lID0gTlNaZXJvUmVjdDsK
LSAgICB9Ci0gICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpmcmFt
ZSB0b1JlY3Q6ZW5kRnJhbWUgd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFuaW1hdGlvbiBjb250cm9s
bGVyQWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4pXTsKLQotICAgIFtf
YmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgb3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxh
dGl2ZVRvOltbc2VsZiBmdWxsc2NyZWVuV2luZG93XSB3aW5kb3dOdW1iZXJdXTsKLX0KLQotLSAo
dm9pZClleGl0RnVsbHNjcmVlbgotewotICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQotICAg
ICAgICByZXR1cm47Ci0gICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKLSAgICBbX2h1ZENv
bnRyb2xsZXIgY2xvc2VXaW5kb3ddOwotCi0gICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYgdmlk
ZW9FbGVtZW50UmVjdF07Ci0KLSAgICBbc2VsZiBzZXR1cEZhZGVBbmltYXRpb25JZk5lZWRlZEFu
ZEZhZGVJbjpOT107Ci0gICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAg
Ly8gVGhpcyB3aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGVuZEZyYW1lID0g
TlNaZXJvUmVjdDsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgaGF2ZSB0byByZXRhaW4gb3Vyc2Vs
dmVzIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhbGl2ZSBmb3IgdGhlIGVuZCBvZiB0aGUgYW5pbWF0
aW9uLgotICAgIC8vIElmIG91ciBvd25lciByZWxlYXNlcyB1cyB3ZSBjb3VsZCBjcmFzaCBpZiB0
aGlzIGlzIG5vdCB0aGUgY2FzZS4KLSAgICAvLyBCYWxhbmNlZCBpbiB3aW5kb3dEaWRFeGl0RnVs
bHNjcmVlbgotICAgIFtzZWxmIHJldGFpbl07ICAgIAotCi0gICAgTlNSZWN0IHN0YXJ0RnJhbWUg
PSBbW3NlbGYgd2luZG93XSBmcmFtZV07Ci0gICAgZW5kRnJhbWUgPSBmcmFtZUV4cGFuZGVkVG9S
YXRpb09mRnJhbWUoZW5kRnJhbWUsIHN0YXJ0RnJhbWUpOwotCi0gICAgW1tzZWxmIGZ1bGxzY3Jl
ZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpzdGFydEZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRo
U3ViQW5pbWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdp
bmRvd0RpZEV4aXRGdWxsc2NyZWVuKV07Ci19Ci0KLS0gKHZvaWQpYXBwbGljYXRpb25EaWRDaGFu
Z2VTY3JlZW5QYXJhbWV0ZXJzOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCi17Ci0gICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgLy8gVGhlIHVzZXIgbWF5IGhhdmUgY2hh
bmdlZCB0aGUgbWFpbiBzY3JlZW4gYnkgbW92aW5nIHRoZSBtZW51IGJhciwgb3IgdGhleSBtYXkg
aGF2ZSBjaGFuZ2VkCi0gICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBvciB0aGV5
IG1heSBoYXZlIGNoYW5nZWQgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9ucy4gIAot
ICAgIC8vIFVwZGF0ZSBvdXIgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMsIGFuZCBlbnN1cmUgdGhh
dCB0aGUgZnVsbCBzY3JlZW4gd2luZG93IG9jY3VwaWVzIHRoZSAKLSAgICAvLyBlbnRpcmUgc2Ny
ZWVuOgotICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07Ci0gICAgW1tz
ZWxmIHdpbmRvd10gc2V0RnJhbWU6W1tbc2VsZiB3aW5kb3ddIHNjcmVlbl0gZnJhbWVdIGRpc3Bs
YXk6WUVTXTsKLX0KLQotLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW4KLXsK
LSAgICAvLyBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBpcyBhdmFpbGFibGUgb24g
PiAxMC42IG9ubHk6Ci0gICAgTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbk9wdGlvbnMgb3B0aW9u
cyA9IE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25EZWZhdWx0OwotICAgIE5TU2NyZWVuKiBmdWxs
c2NyZWVuU2NyZWVuID0gW1tzZWxmIHdpbmRvd10gc2NyZWVuXTsKLQotICAgIGlmICghX2lzRW5k
aW5nRnVsbHNjcmVlbikgewotICAgICAgICAvLyBBdXRvLWhpZGUgdGhlIG1lbnUgYmFyIGlmIHRo
ZSBmdWxsc2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhcjoKLSAgICAgICAgLy8gTk9U
RTogaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyIGJ1dCBub3Qg
dGhlIGRvY2ssIHdlIG11c3Qgc3RpbGwgCi0gICAgICAgIC8vIGF1dG8taGlkZSB0aGUgZG9jaywg
b3IgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICAgICAgICBpZiAoW1tOU1NjcmVlbiBz
Y3JlZW5zXSBvYmplY3RBdEluZGV4OjBdID09IGZ1bGxzY3JlZW5TY3JlZW4pCi0gICAgICAgICAg
ICBvcHRpb25zIHw9IChOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVNZW51QmFyIHwg
TlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jayk7Ci0gICAgICAgIC8vIENoZWNr
IGlmIHRoZSBjdXJyZW50IHNjcmVlbiBjb250YWlucyB0aGUgZG9jayBieSBjb21wYXJpbmcgdGhl
IHNjcmVlbidzIGZyYW1lIHRvIGl0cwotICAgICAgICAvLyB2aXNpYmxlRnJhbWU7IGlmIGEgZG9j
ayBpcyBwcmVzZW50LCB0aGUgdmlzaWJsZUZyYW1lIHdpbGwgZGlmZmVyLiAgSWYgdGhlIGN1cnJl
bnQgc2NyZWVuCi0gICAgICAgIC8vIGNvbnRhaW5zIHRoZSBkb2NrLCBoaWRlIGl0LgotICAgICAg
ICBlbHNlIGlmICghTlNFcXVhbFJlY3RzKFtmdWxsc2NyZWVuU2NyZWVuIGZyYW1lXSwgW2Z1bGxz
Y3JlZW5TY3JlZW4gdmlzaWJsZUZyYW1lXSkpCi0gICAgICAgICAgICBvcHRpb25zIHw9IE5TQXBw
bGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZURvY2s7Ci0gICAgfQotCi0gICAgTlNBcHAucHJl
c2VudGF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUG93ZXJBc3Nl
cnRpb25zCi17Ci0gICAgX2Rpc3BsYXlTbGVlcERpc2FibGVyID0gbnVsbHB0cjsKLX0KLQotLy8g
TUFSSzogLQotLy8gTUFSSzogV2luZG93IGNhbGxiYWNrCi0KLS0gKHZvaWQpX3JlcXVlc3RFeGl0
Ci17Ci0gICAgaWYgKF92aWRlb0VsZW1lbnQpCi0gICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRG
dWxsc2NyZWVuKCk7Ci0gICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwotfQotCi0tICh2
b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uCi17
Ci0gICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9m
b3JjZURpc2FibGVBbmltYXRpb24gPSAhYW5pbWF0aW9uOwotICAgIFtzZWxmIHBlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3IoX3JlcXVlc3RFeGl0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBd
OwotCi19Ci0KLS0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgcmVx
dWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpZRVNdOwotfQotCi0tICh2b2lkKWZhZGVI
VURJbgotewotICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOwotfQotCi0tICh2b2lk
KW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQp
b2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250
ZXh0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoYW5n
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotCi0gICAgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUbzpAInJhdGUiXSkKLSAgICAgICAgW3NlbGYgcmF0ZUNoYW5nZWQ6bmlsXTsKLX0KLQotLSAo
dm9pZClyYXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KLXsK
LSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKLSAgICBbX2h1ZENvbnRyb2xs
ZXIgdXBkYXRlUmF0ZV07Ci0gICAgW3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKLX0KLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93Ci0KLS0gKGlk
KWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUlu
dGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRl
ZmVyOihCT09MKWZsYWcKLXsKLSAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVy
bGVzc1dpbmRvd01hc2sgYmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwot
ICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAg
W3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKLSAgICBbc2VsZiBzZXRBY2NlcHRzTW91
c2VNb3ZlZEV2ZW50czpZRVNdOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBBU1NFUlQoIV9mdWxsc2NyZWVuQW5pbWF0aW9uKTsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4g
Tk87Ci19Ci0KLS0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Ci17Ci0gICAgcmV0dXJuIE5POwot
fQotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VE
X1BBUkFNKHRoZUV2ZW50KTsKLX0KLQotLSAodm9pZCljYW5jZWxPcGVyYXRpb246KGlkKXNlbmRl
cgotewotICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtbc2VsZiB3aW5kb3dDb250cm9s
bGVyXSByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5dOwotfQotCi0tICh2b2lkKWFuaW1hdGVkUmVzaXpl
RGlkRW5kCi17Ci0gICAgLy8gQ2FsbCBvdXIgd2luZG93Q29udHJvbGxlci4KLSAgICBpZiAoX2Nv
bnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCkKLSAgICAgICAgW1tzZWxmIHdpbmRvd0NvbnRy
b2xsZXJdIHBlcmZvcm1TZWxlY3RvcjpfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kXTsK
LSAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kID0gTlVMTDsKLX0KLQotLy8KLS8v
IFRoaXMgZnVuY3Rpb24gd2lsbCBhbmltYXRlIGEgY2hhbmdlIG9mIGZyYW1lIHJlY3RhbmdsZQot
Ly8gV2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiwgdGhhdCBtZWFucyB0aGF0IHdlJ2xsIGNv
cnJlY3RseQotLy8gaW50ZXJydXB0IHRoZSBydW5uaW5nIGFuaW1hdGlvbiwgYW5kIHF1ZXVlIHRo
ZSBuZXh0IG9uZS4KLS8vCi0tICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVj
dCB0b1JlY3Q6KE5TUmVjdCllbmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICop
c3ViQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246KFNFTCljb250cm9sbGVyQWN0aW9uCi17Ci0g
ICAgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCA9IGNvbnRyb2xsZXJBY3Rpb247Ci0K
LSAgICBCT09MIHdhc0FuaW1hdGluZyA9IE5POwotICAgIGlmIChfZnVsbHNjcmVlbkFuaW1hdGlv
bikgewotICAgICAgICB3YXNBbmltYXRpbmcgPSBZRVM7Ci0KLSAgICAgICAgLy8gSW50ZXJydXB0
IGFueSBydW5uaW5nIGFuaW1hdGlvbi4KLSAgICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0
b3BBbmltYXRpb25dOwotCi0gICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVjdCB0byBlbnN1
cmUgYSBzbW9vdGggdHJhbnNpdGlvbi4KLSAgICAgICAgc3RhcnRSZWN0ID0gW19mdWxsc2NyZWVu
QW5pbWF0aW9uIGN1cnJlbnRGcmFtZV07Ci0gICAgICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBy
ZWxlYXNlXTsKLSAgICAgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7Ci0gICAgfQotICAg
IAotICAgIGlmIChOU0lzRW1wdHlSZWN0KHN0YXJ0UmVjdCkgfHwgTlNJc0VtcHR5UmVjdChlbmRS
ZWN0KSkgewotICAgICAgICAvLyBGYWtlbHkgZW5kIHRoZSBzdWJhbmltYXRpb24uCi0gICAgICAg
IFtzdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjFdOwotICAgICAgICAvLyBBbmQgcmVt
b3ZlIHRoZSB3ZWFrIGxpbmsgdG8gdGhlIHdpbmRvdy4KLSAgICAgICAgW3N1YkFuaW1hdGlvbiBz
dG9wQW5pbWF0aW9uXTsKLQotICAgICAgICBbc2VsZiBzZXRGcmFtZTplbmRSZWN0IGRpc3BsYXk6
Tk9dOwotICAgICAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLSAgICAgICAg
W3NlbGYgYW5pbWF0ZWRSZXNpemVEaWRFbmRdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCF3YXNBbmltYXRpbmcpIHsKLSAgICAgICAgLy8gV2UnbGwgZG93bnNjYWxlIHRoZSB3
aW5kb3cgZHVyaW5nIHRoZSBhbmltYXRpb24gYmFzZWQgb24gdGhlIGhpZ2hlciByZXNvbHV0aW9u
IHJlY3QKLSAgICAgICAgQk9PTCBoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID0gc3RhcnRSZWN0
LnNpemUud2lkdGggPCBlbmRSZWN0LnNpemUud2lkdGggJiYgc3RhcnRSZWN0LnNpemUuaGVpZ2h0
IDwgZW5kUmVjdC5zaXplLmhlaWdodDsKLSAgICAgICAgW3NlbGYgc2V0RnJhbWU6aGlnaGVyUmVz
b2x1dGlvbklzRW5kUmVjdCA/IGVuZFJlY3QgOiBzdGFydFJlY3QgZGlzcGxheTpOT107Ci0gICAg
fQotICAgIAotICAgIEFTU0VSVCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOwotICAgIF9mdWxsc2Ny
ZWVuQW5pbWF0aW9uID0gW1tXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhI
aW50ZWREdXJhdGlvbjowLjIgd2luZG93OnNlbGYgaW5pdGFsRnJhbWU6c3RhcnRSZWN0IGZpbmFs
RnJhbWU6ZW5kUmVjdF07Ci0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFN1YkFuaW1hdGlv
bjpzdWJBbmltYXRpb25dOwotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBoYXMgc2NhbGVkIHRo
ZSB3aW5kb3cgYmVmb3JlIHNob3dpbmcgaXQuCi0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczowXTsKLSAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxm
XTsKLQotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0g
KHZvaWQpYW5pbWF0aW9uRGlkRW5kOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgotewotICAgIGlm
ICghW05TVGhyZWFkIGlzTWFpblRocmVhZF0pIHsKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVj
dG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihhbmltYXRpb25EaWRFbmQ6KSB3aXRoT2JqZWN0OmFu
aW1hdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoYW5pbWF0aW9uICE9IF9mdWxsc2NyZWVuQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBUaGUgYW5pbWF0aW9uIGlzIG5vdCByZWFsbHkgb3ZlciBhbmQgd2FzIGludGVycnVw
dGVkCi0gICAgLy8gRG9uJ3Qgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KLSAgICBpZiAoW2FuaW1h
dGlvbiBjdXJyZW50UHJvZ3Jlc3NdIDwgMS4wKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBF
bnN1cmUgdGhhdCBhbmltYXRpb24gKGFuZCBzdWJhbmltYXRpb24pIGRvbid0IGtlZXAKLSAgICAv
LyB0aGUgd2VhayByZWZlcmVuY2UgdG8gdGhlIHdpbmRvdyBpdmFyIHRoYXQgbWF5IGJlIGRlc3Ry
b3llZCBmcm9tCi0gICAgLy8gbm93IG9uLgotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXRX
aW5kb3c6bmlsXTsKLQotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBhdXRvcmVsZWFzZV07Ci0g
ICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7Ci0KLSAgICBbc2VsZiBhbmltYXRlZFJlc2l6
ZURpZEVuZF07Ci19Ci0KLS0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17
Ci0gICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50KTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxl
cl0gZmFkZUhVREluXTsKLX0KLQotQGVuZAotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLQotI2VuZGlmIC8qIEVOQUJMRShWSURFTykg
Ki8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhV
RFdpbmRvd0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lvbiAy
MjgyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbXBvcnQgPEFwcEtpdC9OU0J1dHRvbi5o
PgotI2ltcG9ydCA8QXBwS2l0L05TQ29udHJvbC5oPgotI2ltcG9ydCA8QXBwS2l0L05TVGV4dEZp
ZWxkLmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNUcmFja2luZ0FyZWEuaD4KLSNpbXBvcnQgPEFwcEtp
dC9OU1dpbmRvdy5oPgotI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9j
b2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOwotCi1AaW50
ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0Nv
bnRyb2xsZXIKLXsKLSAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ckRlbGVnYXRlPiBfZGVsZWdhdGU7Ci0gICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7
Ci0gICAgTlNUcmFja2luZ0FyZWEgKl9hcmVhOwotICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKLSAg
ICBCT09MIF9pc0VuZGluZ0Z1bGxzY3JlZW47Ci0gICAgQk9PTCBfaXNTY3J1YmJpbmc7Ci0KLSAg
ICBOU0NvbnRyb2wgKl90aW1lbGluZTsKLSAgICBOU1RleHRGaWVsZCAqX3JlbWFpbmluZ1RpbWVU
ZXh0OwotICAgIE5TVGV4dEZpZWxkICpfZWxhcHNlZFRpbWVUZXh0OwotICAgIE5TQ29udHJvbCAq
X3ZvbHVtZVNsaWRlcjsKLSAgICBOU0J1dHRvbiAqX3BsYXlCdXR0b247Ci19Ci0KLS0gKGlkIDxX
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwot
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7Ci0tICh2b2lkKWZhZGVXaW5kb3dJbjsKLS0gKHZvaWQp
ZmFkZVdpbmRvd091dDsKLS0gKHZvaWQpY2xvc2VXaW5kb3c7Ci0tICh2b2lkKXVwZGF0ZVJhdGU7
Ci0KLUBlbmQKLQotQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKLS0g
KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKLUBlbmQKLQotI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3Zu
OmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0JKHJl
dmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNzM4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0K
LSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9F
bGVtZW50Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9y
dCA8cGFsL3NwaS9tYWMvUVRLaXRTUEkuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgot
Ci1TT0ZUX0xJTktfRlJBTUVXT1JLKFFUS2l0KQotCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFU
SFVEQmFja2dyb3VuZFZpZXcpCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEQnV0dG9uKQot
U09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVRFNsaWRlcikKLVNPRlRfTElOS19DTEFTUyhRVEtp
dCwgUVRIVURUaW1lbGluZSkKLQotI2RlZmluZSBRVEhVREJhY2tncm91bmRWaWV3IGdldFFUSFVE
QmFja2dyb3VuZFZpZXdDbGFzcygpCi0jZGVmaW5lIFFUSFVEQnV0dG9uIGdldFFUSFVEQnV0dG9u
Q2xhc3MoKQotI2RlZmluZSBRVEhVRFNsaWRlciBnZXRRVEhVRFNsaWRlckNsYXNzKCkKLSNkZWZp
bmUgUVRIVURUaW1lbGluZSBnZXRRVEhVRFRpbWVsaW5lQ2xhc3MoKQotCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotZW51bSBjbGFzcyBNZWRpYVVJQ29udHJvbCB7Ci0gICAgVGltZWxpbmUsCi0g
ICAgU2xpZGVyLAotICAgIFBsYXlQYXVzZUJ1dHRvbiwKLSAgICBFeGl0RnVsbHNjcmVlbkJ1dHRv
biwKLSAgICBSZXdpbmRCdXR0b24sCi0gICAgRmFzdEZvcndhcmRCdXR0b24sCi0gICAgVm9sdW1l
VXBCdXR0b24sCi0gICAgVm9sdW1lRG93bkJ1dHRvbiwKLX07Ci0KLX0KLQotdXNpbmcgV2ViQ29y
ZTo6TWVkaWFVSUNvbnRyb2w7Ci11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotdXNp
bmcgV2ViQ29yZTo6bmFycm93UHJlY2lzaW9uVG9GbG9hdDsKLUBpbnRlcmZhY2UgV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciAoUHJpdmF0ZSkgPE5TV2luZG93RGVsZWdhdGU+
Ci0KLS0gKHZvaWQpdXBkYXRlVGltZTsKLS0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6
KGlkKXNlbmRlcjsKLS0gKGZsb2F0KWN1cnJlbnRUaW1lOwotLSAodm9pZClzZXRDdXJyZW50VGlt
ZTooZmxvYXQpY3VycmVudFRpbWU7Ci0tIChkb3VibGUpZHVyYXRpb247Ci0KLS0gKHZvaWQpdm9s
dW1lQ2hhbmdlZDooaWQpc2VuZGVyOwotLSAoZmxvYXQpbWF4Vm9sdW1lOwotLSAoZmxvYXQpdm9s
dW1lOwotLSAodm9pZClzZXRWb2x1bWU6KGZsb2F0KXZvbHVtZTsKLS0gKHZvaWQpZGVjcmVtZW50
Vm9sdW1lOwotLSAodm9pZClpbmNyZW1lbnRWb2x1bWU7Ci0KLS0gKHZvaWQpdXBkYXRlUGxheUJ1
dHRvbjsKLS0gKHZvaWQpdG9nZ2xlUGxheWluZzooaWQpc2VuZGVyOwotLSAoQk9PTClwbGF5aW5n
OwotLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmc7Ci0KLS0gKHZvaWQpcmV3aW5kOihp
ZClzZW5kZXI7Ci0tICh2b2lkKWZhc3RGb3J3YXJkOihpZClzZW5kZXI7Ci0KLS0gKE5TU3RyaW5n
ICopcmVtYWluaW5nVGltZVRleHQ7Ci0tIChOU1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dDsKLQot
LSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyOwotQGVuZAotCi1AaW50ZXJmYWNlIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyA6IE5TV2luZG93Ci1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cKLQotLSAoaWQpaW5pdFdpdGhDb250ZW50
UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFj
a2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZwot
ewotICAgIFVOVVNFRF9QQVJBTShhU3R5bGUpOwotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhD
b250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJs
ZXNzIGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpmbGFnXTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwotICAgIFtzZWxm
IHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW3NlbGYgc2V0
TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07Ci0gICAgW3NlbGYgc2V0QWNjZXB0c01vdXNl
TW92ZWRFdmVudHM6WUVTXTsKLSAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6Tk9dOwot
ICAgIFtzZWxmIHNldE1vdmFibGVCeVdpbmRvd0JhY2tncm91bmQ6WUVTXTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tIChCT09MKWNhbkJlY29tZUtleVdpbmRvdwotewotICAgIHJldHVybiBZ
RVM7Ci19Ci0KLS0gKHZvaWQpY2FuY2VsT3BlcmF0aW9uOihpZClzZW5kZXIKLXsKLSAgICBVTlVT
RURfUEFSQU0oc2VuZGVyKTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxz
Y3JlZW46c2VsZl07Ci19Ci0KLS0gKHZvaWQpY2VudGVyCi17Ci0gICAgTlNSZWN0IGh1ZEZyYW1l
ID0gW3NlbGYgZnJhbWVdOwotICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFp
blNjcmVlbl0gZnJhbWVdOwotICAgIFtzZWxmIHNldEZyYW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBv
aW50KHNjcmVlbkZyYW1lLm9yaWdpbi54ICsgKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRG
cmFtZS5zaXplLndpZHRoKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyZWVuRnJhbWUub3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQg
LSBodWRGcmFtZS5zaXplLmhlaWdodCkgLyA2KV07Ci19Ci0KLS0gKHZvaWQpa2V5RG93bjooTlNF
dmVudCAqKWV2ZW50Ci17Ci0gICAgW3N1cGVyIGtleURvd246ZXZlbnRdOwotICAgIFtbc2VsZiB3
aW5kb3dDb250cm9sbGVyXSBmYWRlV2luZG93SW5dOwotfQotCi0tIChCT09MKXJlc2lnbkZpcnN0
UmVzcG9uZGVyCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKXBlcmZvcm1LZXlFcXVp
dmFsZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBCbG9jayBhbGwgY29tbWFuZCBrZXkg
ZXZlbnRzIHdoaWxlIHRoZSBmdWxsc2NyZWVuIHdpbmRvdyBpcyB1cC4KLSAgICBpZiAoW2V2ZW50
IHR5cGVdICE9IE5TRXZlbnRUeXBlS2V5RG93bikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAot
ICAgIGlmICghKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdDb21t
YW5kKSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKLQot
c3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93SGVpZ2h0ID0gNTk7Ci1zdGF0aWMgY29uc3QgQ0dG
bG9hdCB3aW5kb3dXaWR0aCA9IDQzODsKLQotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIEhV
RFdpbmRvd0ZhZGVPdXREZWxheSA9IDM7Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyCi0KLS0gKGlkKWluaXQKLXsKLSAgICBOU1dpbmRvdyAq
d2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29u
dGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0KSBzdHls
ZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVC
dWZmZXJlZCBkZWZlcjpOT107Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aFdpbmRvdzp3aW5k
b3ddOwotICAgIFt3aW5kb3cgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW3dpbmRvdyByZWxlYXNl
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYgd2luZG93
RGlkTG9hZF07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IEFTU0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOwotICAgIEFTU0VSVCghX2FyZWEpOwotICAg
IEFTU0VSVCghX2lzU2NydWJiaW5nKTsKLSAgICBbX3RpbWVsaW5lIHJlbGVhc2VdOwotICAgIFtf
cmVtYWluaW5nVGltZVRleHQgcmVsZWFzZV07Ci0gICAgW19lbGFwc2VkVGltZVRleHQgcmVsZWFz
ZV07Ci0gICAgW192b2x1bWVTbGlkZXIgcmVsZWFzZV07Ci0gICAgW19wbGF5QnV0dG9uIHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXRBcmVhOihOU1RyYWNr
aW5nQXJlYSAqKWFyZWEKLXsKLSAgICBpZiAoYXJlYSA9PSBfYXJlYSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFtfYXJlYSByZWxlYXNlXTsKLSAgICBfYXJlYSA9IFthcmVhIHJldGFpbl07Ci19Ci0K
LS0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgTlNTdHJpbmcgKmNoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnNdOwotICAgIGlmIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGxlbmd0aF0gPT0gMSkg
ewotICAgICAgICBzd2l0Y2ggKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgY2hhcmFjdGVy
QXRJbmRleDowXSkgewotICAgICAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICAgICAgW3Nl
bGYgdG9nZ2xlUGxheWluZzpuaWxdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGNhc2UgTlNVcEFycm93RnVuY3Rpb25LZXk6Ci0gICAgICAgICAgICAgICAgaWYgKFtldmVu
dCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdPcHRpb24pCi0gICAgICAgICAg
ICAgICAgICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFtzZWxmIGluY3JlbWVudFZvbHVtZV07Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0
aW9uS2V5OgotICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2
ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRWb2x1
bWU6MF07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBk
ZWNyZW1lbnRWb2x1bWVdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBb
c3VwZXIga2V5RG93bjpldmVudF07Ci19Ci0KLS0gKGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9kZWxlZ2F0
ZTsKLX0KLQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKLX0KLQotLSAodm9pZClzY2hlZHVsZVRpbWVVcGRhdGUKLXsKLSAgICBbTlNPYmplY3Qg
Y2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6c2VsZl07Ci0KLSAgICAvLyBGaXJz
dCwgdXBkYXRlIHJpZ2h0IGF3YXksIHRoZW4gc2NoZWR1bGUgZnV0dXJlIHVwZGF0ZQotICAgIFtz
ZWxmIHVwZGF0ZVRpbWVdOwotICAgIFtzZWxmIHVwZGF0ZVBsYXlCdXR0b25dOwotCi0gICAgW190
aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRhdGVdOwotICAgIFtfdGltZWxpbmVVcGRhdGVUaW1l
ciByZWxlYXNlXTsKLQotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMgYSByZXRhaW4gY3lj
bGUgYmV0d2VlbiB0aGUgd2luZG93IGFuZCB1cy4KLSAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9
IFtbTlNUaW1lciB0aW1lcldpdGhUaW1lSW50ZXJ2YWw6MC4yNSB0YXJnZXQ6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IodXBkYXRlVGltZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5d
OwotICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxpbmVVcGRh
dGVUaW1lciBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKLX0KLQotLSAodm9pZCl1bnNj
aGVkdWxlVGltZVVwZGF0ZQotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVV
cGRhdGUpIG9iamVjdDpuaWxdOwotCi0gICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRh
dGVdOwotICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciByZWxlYXNlXTsKLSAgICBfdGltZWxpbmVV
cGRhdGVUaW1lciA9IG5pbDsKLX0KLQotLSAodm9pZClmYWRlV2luZG93SW4KLXsKLSAgICBOU1dp
bmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAoIVt3aW5kb3cgaXNWaXNpYmxl
XSkKLSAgICAgICAgW3dpbmRvdyBzZXRBbHBoYVZhbHVlOjBdOwotCi0gICAgW3dpbmRvdyBtYWtl
S2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLSAgICBbW3dpbmRvdyBhbmltYXRvcl0gc2V0QWxwaGFW
YWx1ZToxXTsKLSAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwotCi0gICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAoIV9tb3VzZUlzSW5I
VUQgJiYgW3NlbGYgcGxheWluZ10pICAgLy8gRG9uJ3QgZmFkZSBvdXQgd2hlbiBwYXVzZWQuCi0g
ICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0
aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVsYXldOwotfQotCi0tICh2
b2lkKWZhZGVXaW5kb3dPdXQKLXsKLSAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1v
dmVzOllFU107Ci0gICAgW1tbc2VsZiB3aW5kb3ddIGFuaW1hdG9yXSBzZXRBbHBoYVZhbHVlOjBd
OwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRh
dGUpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MV07Ci19Ci0KLS0gKHZvaWQpY2xvc2VXaW5k
b3cKLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOwot
ICAgIFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0g
W3NlbGYgd2luZG93XTsKLSAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gcmVtb3ZlVHJhY2tpbmdB
cmVhOl9hcmVhXTsKLSAgICBbc2VsZiBzZXRBcmVhOm5pbF07Ci0gICAgW3dpbmRvdyBjbG9zZV07
Ci0gICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtzZWxmIHNldFdpbmRvdzpuaWxd
OwotfQotCi1zdGF0aWMgTlNDb250cm9sICpjcmVhdGVNZWRpYVVJQ29udHJvbChNZWRpYVVJQ29u
dHJvbCBjb250cm9sVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGNvbnRyb2xUeXBlKSB7Ci0gICAgY2Fz
ZSBNZWRpYVVJQ29udHJvbDo6VGltZWxpbmU6IHsKLSAgICAgICAgTlNTbGlkZXIgKnNsaWRlciA9
IFtbUVRIVURUaW1lbGluZSBhbGxvY10gaW5pdF07Ci0gICAgICAgIFtbc2xpZGVyIGNlbGxdIHNl
dENvbnRpbnVvdXM6WUVTXTsKLSAgICAgICAgcmV0dXJuIHNsaWRlcjsKLSAgICB9Ci0gICAgY2Fz
ZSBNZWRpYVVJQ29udHJvbDo6U2xpZGVyOiB7Ci0gICAgICAgIE5TQnV0dG9uICpzbGlkZXIgPSBb
W1FUSFVEU2xpZGVyIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW1tzbGlkZXIgY2VsbF0gc2V0Q29u
dGludW91czpZRVNdOwotICAgICAgICByZXR1cm4gc2xpZGVyOwotICAgIH0KLSAgICBjYXNlIE1l
ZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRv
biA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdl
OltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1BsYXlUZW1wbGF0ZSJdXTsKLSAgICAgICAgW2J1dHRv
biBzZXRBbHRlcm5hdGVJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNQYXVzZVFUUHJpdmF0
ZVRlbXBsYXRlIl1dOwotCi0gICAgICAgIFtbYnV0dG9uIGNlbGxdIHNldFNob3dzU3RhdGVCeTpO
U0NvbnRlbnRzQ2VsbE1hc2tdOwotICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAg
ICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6RXhp
dEZ1bGxzY3JlZW5CdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURC
dXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGlt
YWdlTmFtZWQ6QCJOU0V4aXRGdWxsU2NyZWVuVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0b24g
c2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBjYXNl
IE1lZGlhVUlDb250cm9sOjpSZXdpbmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRv
biA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdl
OltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1Jld2luZFRlbXBsYXRlIl1dOwotICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAg
Y2FzZSBNZWRpYVVJQ29udHJvbDo6RmFzdEZvcndhcmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0
b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9u
IHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0Zhc3RGb3J3YXJkVGVtcGxhdGUiXV07
Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4gYnV0dG9u
OwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpWb2x1bWVVcEJ1dHRvbjogewotICAg
ICAgICBOU0J1dHRvbiAqYnV0dG9uID0gW1tRVEhVREJ1dHRvbiBhbGxvY10gaW5pdF07Ci0gICAg
ICAgIFtidXR0b24gc2V0SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQXVkaW9PdXRwdXRW
b2x1bWVIaWdoVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOwot
ICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpW
b2x1bWVEb3duQnV0dG9uOiB7Ci0gICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0
dG9uIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNBdWRpb091dHB1dFZvbHVtZUxvd1RlbXBsYXRlIl1dOwotICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotc3Rh
dGljIE5TQ29udHJvbCAqY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFV
SUNvbnRyb2wgY29udHJvbFR5cGUsIE5TUmVjdCBmcmFtZSkKLXsKLSAgICBOU0NvbnRyb2wgKmNv
bnRyb2wgPSBjcmVhdGVNZWRpYVVJQ29udHJvbChjb250cm9sVHlwZSk7Ci0gICAgY29udHJvbC5m
cmFtZSA9IGZyYW1lOwotICAgIHJldHVybiBjb250cm9sOwotfQotCi1zdGF0aWMgTlNUZXh0Rmll
bGQgKmNyZWF0ZVRpbWVUZXh0RmllbGQoTlNSZWN0IGZyYW1lKQotewotICAgIE5TVGV4dEZpZWxk
ICp0ZXh0RmllbGQgPSBbW05TVGV4dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXTsK
LSAgICBbdGV4dEZpZWxkIHNldFRleHRDb2xvcjpbTlNDb2xvciB3aGl0ZUNvbG9yXV07Ci0gICAg
W3RleHRGaWVsZCBzZXRCb3JkZXJlZDpOT107Ci0gICAgW3RleHRGaWVsZCBzZXRGb250OltOU0Zv
bnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MTBdXTsKLSAgICBbdGV4dEZpZWxkIHNldERyYXdzQmFj
a2dyb3VuZDpOT107Ci0gICAgW3RleHRGaWVsZCBzZXRCZXplbGVkOk5PXTsKLSAgICBbdGV4dEZp
ZWxkIHNldEVkaXRhYmxlOk5PXTsKLSAgICBbdGV4dEZpZWxkIHNldFNlbGVjdGFibGU6Tk9dOwot
ICAgIHJldHVybiB0ZXh0RmllbGQ7Ci19Ci0KLXN0YXRpYyBOU1ZpZXcgKmNyZWF0ZU1lZGlhVUlC
YWNrZ3JvdW5kVmlldygpCi17Ci0gICAgaWQgdmlldyA9IFtbUVRIVURCYWNrZ3JvdW5kVmlldyBh
bGxvY10gaW5pdF07Ci0KLSAgICBjb25zdCBDR0Zsb2F0IHF1aWNrVGltZVBsYXllckhVREhlaWdo
dCA9IDU5OwotICAgIGNvbnN0IENHRmxvYXQgcXVpY2tUaW1lUGxheWVySFVEQ29udGVudEJvcmRl
clBvc2l0aW9uID0gMzg7Ci0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAg
ICBbdmlldyBzZXRDb250ZW50Qm9yZGVyUG9zaXRpb246cXVpY2tUaW1lUGxheWVySFVEQ29udGVu
dEJvcmRlclBvc2l0aW9uIC8gcXVpY2tUaW1lUGxheWVySFVESGVpZ2h0XTsKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIHJldHVybiB2aWV3OwotfQotCi0tICh2b2lkKXdpbmRv
d0RpZExvYWQKLXsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBob3Jpem9udGFsTWFyZ2luID0g
MTA7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbldpZHRoID0gNDE7Ci0gICAg
c3RhdGljIGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbkhlaWdodCA9IDM1OwotICAgIHN0YXRpYyBj
b25zdCBDR0Zsb2F0IHBsYXlCdXR0b25Ub3BNYXJnaW4gPSA0OwotICAgIHN0YXRpYyBjb25zdCBD
R0Zsb2F0IHZvbHVtZVNsaWRlcldpZHRoID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQg
dm9sdW1lU2xpZGVySGVpZ2h0ID0gMTM7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1l
QnV0dG9uV2lkdGggPSAxODsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVCdXR0b25I
ZWlnaHQgPSAxNjsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVVcEJ1dHRvbkxlZnRN
YXJnaW4gPSA0OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZUNvbnRyb2xzVG9wTWFy
Z2luID0gMTM7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0b25X
aWR0aCA9IDI1OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9u
SGVpZ2h0ID0gMjE7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0
b25Ub3BNYXJnaW4gPSAxMTsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lbGluZVdpZHRo
ID0gMzE1OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVsaW5lSGVpZ2h0ID0gMTQ7Ci0g
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZWxpbmVCb3R0b21NYXJnaW4gPSA3OwotICAgIHN0
YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRXaWR0aCA9IDU0OwotICAgIHN0YXRpYyBj
b25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRIZWlnaHQgPSAxMzsKLSAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCB0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiA9IDc7Ci0KLSAgICBOU1dpbmRv
dyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBBU1NFUlQod2luZG93KTsKLQotICAgIE5T
VmlldyAqYmFja2dyb3VuZCA9IGNyZWF0ZU1lZGlhVUlCYWNrZ3JvdW5kVmlldygpOwotCi0gICAg
W3dpbmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5kXTsKLSAgICBfYXJlYSA9IFtbTlNUcmFj
a2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6
TlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdBY3RpdmVBbHdheXMg
b3duZXI6c2VsZiB1c2VySW5mbzpuaWxdOwotICAgIFtiYWNrZ3JvdW5kIGFkZFRyYWNraW5nQXJl
YTpfYXJlYV07Ci0gICAgW2JhY2tncm91bmQgcmVsZWFzZV07ICAgIAotCi0gICAgTlNWaWV3ICpj
b250ZW50VmlldyA9IFt3aW5kb3cgY29udGVudFZpZXddOwotCi0gICAgQ0dGbG9hdCBjZW50ZXIg
PSBDR0Zsb29yKCh3aW5kb3dXaWR0aCAtIHBsYXlCdXR0b25XaWR0aCkgLyAyKTsKLSAgICBfcGxh
eUJ1dHRvbiA9IChOU0J1dHRvbiAqKWNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBl
KE1lZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b24sIE5TTWFrZVJlY3QoY2VudGVyLCB3aW5k
b3dIZWlnaHQgLSBwbGF5QnV0dG9uVG9wTWFyZ2luIC0gcGxheUJ1dHRvbkhlaWdodCwgcGxheUJ1
dHRvbldpZHRoLCBwbGF5QnV0dG9uSGVpZ2h0KSk7Ci0gICAgQVNTRVJUKFtfcGxheUJ1dHRvbiBp
c0tpbmRPZkNsYXNzOltOU0J1dHRvbiBjbGFzc11dKTsKLSAgICBbX3BsYXlCdXR0b24gc2V0VGFy
Z2V0OnNlbGZdOwotICAgIFtfcGxheUJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHRvZ2dsZVBs
YXlpbmc6KV07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3BsYXlCdXR0b25dOwotCi0g
ICAgQ0dGbG9hdCBjbG9zZVRvUmlnaHQgPSB3aW5kb3dXaWR0aCAtIGhvcml6b250YWxNYXJnaW4g
LSBleGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoOwotICAgIE5TQ29udHJvbCAqZXhpdEZ1bGxzY3Jl
ZW5CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29u
dHJvbDo6RXhpdEZ1bGxzY3JlZW5CdXR0b24sIE5TTWFrZVJlY3QoY2xvc2VUb1JpZ2h0LCB3aW5k
b3dIZWlnaHQgLSBleGl0RnVsbHNjcmVlbkJ1dHRvblRvcE1hcmdpbiAtIGV4aXRGdWxsc2NyZWVu
QnV0dG9uSGVpZ2h0LCBleGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoLCBleGl0RnVsbHNjcmVlbkJ1
dHRvbkhlaWdodCkpOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVj
dG9yKGV4aXRGdWxsc2NyZWVuOildOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRUYXJn
ZXQ6c2VsZl07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6ZXhpdEZ1bGxzY3JlZW5CdXR0
b25dOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiByZWxlYXNlXTsKLSAgICAKLSAgICBDR0Zs
b2F0IHZvbHVtZUNvbnRyb2xzQm90dG9tID0gd2luZG93SGVpZ2h0IC0gdm9sdW1lQ29udHJvbHNU
b3BNYXJnaW4gLSB2b2x1bWVCdXR0b25IZWlnaHQ7Ci0gICAgQ0dGbG9hdCBsZWZ0ID0gaG9yaXpv
bnRhbE1hcmdpbjsKLSAgICBOU0NvbnRyb2wgKnZvbHVtZURvd25CdXR0b24gPSBjcmVhdGVDb250
cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lRG93bkJ1dHRv
biwgTlNNYWtlUmVjdChsZWZ0LCB2b2x1bWVDb250cm9sc0JvdHRvbSwgdm9sdW1lQnV0dG9uV2lk
dGgsIHZvbHVtZUJ1dHRvbkhlaWdodCkpOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnZv
bHVtZURvd25CdXR0b25dOwotICAgIFt2b2x1bWVEb3duQnV0dG9uIHNldFRhcmdldDpzZWxmXTsK
LSAgICBbdm9sdW1lRG93bkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVtZVRvWmVy
bzopXTsKLSAgICBbdm9sdW1lRG93bkJ1dHRvbiByZWxlYXNlXTsKLQotICAgIGxlZnQgKz0gdm9s
dW1lQnV0dG9uV2lkdGg7Ci0gICAgX3ZvbHVtZVNsaWRlciA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVk
aWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9sOjpTbGlkZXIsIE5TTWFrZVJlY3QobGVmdCwg
dm9sdW1lQ29udHJvbHNCb3R0b20gKyBDR0Zsb29yKCh2b2x1bWVCdXR0b25IZWlnaHQgLSB2b2x1
bWVTbGlkZXJIZWlnaHQpIC8gMiksIHZvbHVtZVNsaWRlcldpZHRoLCB2b2x1bWVTbGlkZXJIZWln
aHQpKTsKLSAgICBbX3ZvbHVtZVNsaWRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTpbc2VsZiBtYXhWb2x1bWVdXSBmb3JLZXk6QCJtYXhWYWx1ZSJdOwotICAgIFtfdm9sdW1l
U2xpZGVyIHNldFRhcmdldDpzZWxmXTsKLSAgICBbX3ZvbHVtZVNsaWRlciBzZXRBY3Rpb246QHNl
bGVjdG9yKHZvbHVtZUNoYW5nZWQ6KV07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3Zv
bHVtZVNsaWRlcl07Ci0KLSAgICBsZWZ0ICs9IHZvbHVtZVNsaWRlcldpZHRoICsgdm9sdW1lVXBC
dXR0b25MZWZ0TWFyZ2luOwotICAgIE5TQ29udHJvbCAqdm9sdW1lVXBCdXR0b24gPSBjcmVhdGVD
b250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0
b24sIE5TTWFrZVJlY3QobGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20sIHZvbHVtZUJ1dHRvbldp
ZHRoLCB2b2x1bWVCdXR0b25IZWlnaHQpKTsKLSAgICBbdm9sdW1lVXBCdXR0b24gc2V0VGFyZ2V0
OnNlbGZdOwotICAgIFt2b2x1bWVVcEJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVt
ZVRvTWF4aW11bTopXTsKLSAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVVcEJ1dHRv
bl07Ci0gICAgW3ZvbHVtZVVwQnV0dG9uIHJlbGVhc2VdOwotCi0gICAgX3RpbWVsaW5lID0gY3Jl
YXRlTWVkaWFVSUNvbnRyb2woTWVkaWFVSUNvbnRyb2w6OlRpbWVsaW5lKTsKLQotICAgIFtfdGlt
ZWxpbmUgc2V0VGFyZ2V0OnNlbGZdOwotICAgIFtfdGltZWxpbmUgc2V0QWN0aW9uOkBzZWxlY3Rv
cih0aW1lbGluZVBvc2l0aW9uQ2hhbmdlZDopXTsKLSAgICBbX3RpbWVsaW5lIHNldEZyYW1lOk5T
TWFrZVJlY3QoQ0dGbG9vcigod2luZG93V2lkdGggLSB0aW1lbGluZVdpZHRoKSAvIDIpLCB0aW1l
bGluZUJvdHRvbU1hcmdpbiwgdGltZWxpbmVXaWR0aCwgdGltZWxpbmVIZWlnaHQpXTsKLSAgICBb
Y29udGVudFZpZXcgYWRkU3VidmlldzpfdGltZWxpbmVdOwotCi0gICAgX2VsYXBzZWRUaW1lVGV4
dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdCh0aW1lVGV4dEZpZWxkSG9yaXpvbnRh
bE1hcmdpbiwgdGltZWxpbmVCb3R0b21NYXJnaW4sIHRpbWVUZXh0RmllbGRXaWR0aCwgdGltZVRl
eHRGaWVsZEhlaWdodCkpOwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldEFsaWdubWVudDpOU1Rl
eHRBbGlnbm1lbnRMZWZ0XTsKLSAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfZWxhcHNlZFRp
bWVUZXh0XTsKLQotICAgIF9yZW1haW5pbmdUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQo
TlNNYWtlUmVjdCh3aW5kb3dXaWR0aCAtIHRpbWVUZXh0RmllbGRIb3Jpem9udGFsTWFyZ2luIC0g
dGltZVRleHRGaWVsZFdpZHRoLCB0aW1lbGluZUJvdHRvbU1hcmdpbiwgdGltZVRleHRGaWVsZFdp
ZHRoLCB0aW1lVGV4dEZpZWxkSGVpZ2h0KSk7Ci0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRB
bGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50UmlnaHRdOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2
aWV3Ol9yZW1haW5pbmdUaW1lVGV4dF07Ci0KLSAgICBbd2luZG93IHJlY2FsY3VsYXRlS2V5Vmll
d0xvb3BdOwotICAgIFt3aW5kb3cgc2V0SW5pdGlhbEZpcnN0UmVzcG9uZGVyOl9wbGF5QnV0dG9u
XTsKLSAgICBbd2luZG93IGNlbnRlcl07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlVm9sdW1lCi17Ci0g
ICAgW192b2x1bWVTbGlkZXIgc2V0RmxvYXRWYWx1ZTpbc2VsZiB2b2x1bWVdXTsKLX0KLQotLSAo
dm9pZCl1cGRhdGVUaW1lCi17Ci0gICAgW3NlbGYgdXBkYXRlVm9sdW1lXTsKLQotICAgIFtfdGlt
ZWxpbmUgc2V0RmxvYXRWYWx1ZTpbc2VsZiBjdXJyZW50VGltZV1dOwotICAgIFtfdGltZWxpbmUg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6W3NlbGYgZHVyYXRpb25dXSBmb3JL
ZXk6QCJtYXhWYWx1ZSJdOwotCi0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRTdHJpbmdWYWx1
ZTpbc2VsZiByZW1haW5pbmdUaW1lVGV4dF1dOwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldFN0
cmluZ1ZhbHVlOltzZWxmIGVsYXBzZWRUaW1lVGV4dF1dOwotfQotCi0tICh2b2lkKWVuZFNjcnVi
YmluZwotewotICAgIEFTU0VSVChfaXNTY3J1YmJpbmcpOwotICAgIF9pc1NjcnViYmluZyA9IE5P
OwotICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0pCi0gICAgICAgIHZpZGVvRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0K
LS0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6KGlkKXNlbmRlcgotewotICAgIFVOVVNF
RF9QQVJBTShzZW5kZXIpOwotICAgIFtzZWxmIHNldEN1cnJlbnRUaW1lOltfdGltZWxpbmUgZmxv
YXRWYWx1ZV1dOwotICAgIGlmICghX2lzU2NydWJiaW5nKSB7Ci0gICAgICAgIF9pc1NjcnViYmlu
ZyA9IFlFUzsKLSAgICAgICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IFtf
ZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgICAgIHZpZGVvRWxlbWVudC0+YmVnaW5T
Y3J1YmJpbmcoKTsKLSAgICAgICAgc3RhdGljIE5TQXJyYXkgKmVuZFNjcnViYmluZ01vZGVzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6TlNEZWZhdWx0UnVuTG9vcE1vZGUsIE5T
TW9kYWxQYW5lbFJ1bkxvb3BNb2RlLCBuaWxdOwotICAgICAgICAvLyBTY2hlZHVsZSAtZW5kU2Ny
dWJiaW5nIGZvciB3aGVuIGxlYXZpbmcgbW91c2UgdHJhY2tpbmcgbW9kZS4KLSAgICAgICAgW1tO
U1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZW5kU2Ny
dWJiaW5nKSB0YXJnZXQ6c2VsZiBhcmd1bWVudDpuaWwgb3JkZXI6MCBtb2RlczplbmRTY3J1YmJp
bmdNb2Rlc107Ci0gICAgfQotfQotCi0tIChmbG9hdCljdXJyZW50VGltZQotewotICAgIHJldHVy
biBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmN1
cnJlbnRUaW1lKCkgOiAwOwotfQotCi0tICh2b2lkKXNldEN1cnJlbnRUaW1lOihmbG9hdCljdXJy
ZW50VGltZQotewotICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAgICBy
ZXR1cm47Ci0gICAgW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5zZXRDdXJyZW50VGltZShjdXJy
ZW50VGltZSk7Ci0gICAgW3NlbGYgdXBkYXRlVGltZV07Ci19Ci0KLS0gKGRvdWJsZSlkdXJhdGlv
bgotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0tPmR1cmF0aW9uKCkgOiAwOwotfQotCi0tIChmbG9hdCltYXhWb2x1bWUKLXsK
LSAgICAvLyBTZXQgdGhlIHZvbHVtZSBzbGlkZXIgcmVzb2x1dGlvbgotICAgIHJldHVybiAxMDA7
Ci19Ci0KLS0gKHZvaWQpdm9sdW1lQ2hhbmdlZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNlbmRlcik7Ci0gICAgW3NlbGYgc2V0Vm9sdW1lOltfdm9sdW1lU2xpZGVyIGZsb2F0VmFs
dWVdXTsKLX0KLQotLSAodm9pZClzZXRWb2x1bWVUb1plcm86KGlkKXNlbmRlcgotewotICAgIFVO
VVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtzZWxmIHNldFZvbHVtZTowXTsKLX0KLQotLSAodm9p
ZClzZXRWb2x1bWVUb01heGltdW06KGlkKXNlbmRlcgotewotICAgIFVOVVNFRF9QQVJBTShzZW5k
ZXIpOwotICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLX0KLQotLSAodm9p
ZClkZWNyZW1lbnRWb2x1bWUKLXsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgdm9sdW1lID0gW3NlbGYgdm9sdW1lXSAtIDEw
OwotICAgIFtzZWxmIHNldFZvbHVtZTpNQVgodm9sdW1lLCAwKV07Ci19Ci0KLS0gKHZvaWQpaW5j
cmVtZW50Vm9sdW1lCi17Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZsb2F0IHZvbHVtZSA9IFtzZWxmIHZvbHVtZV0gKyAxMDsKLSAg
ICBbc2VsZiBzZXRWb2x1bWU6c3RkOjptaW4odm9sdW1lLCBbc2VsZiBtYXhWb2x1bWVdKV07Ci19
Ci0KLS0gKGZsb2F0KXZvbHVtZQotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVu
dF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnZvbHVtZSgpICogW3NlbGYgbWF4Vm9sdW1l
XSA6IDA7Ci19Ci0KLS0gKHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWUKLXsKLSAgICBpZiAo
IVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChbX2Rl
bGVnYXRlIHZpZGVvRWxlbWVudF0tPm11dGVkKCkpCi0gICAgICAgIFtfZGVsZWdhdGUgdmlkZW9F
bGVtZW50XS0+c2V0TXV0ZWQoZmFsc2UpOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+
c2V0Vm9sdW1lKHZvbHVtZSAvIFtzZWxmIG1heFZvbHVtZV0pOwotICAgIFtzZWxmIHVwZGF0ZVZv
bHVtZV07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUGxheUJ1dHRvbgotewotICAgIFtfcGxheUJ1dHRv
biBzZXRJbnRWYWx1ZTpbc2VsZiBwbGF5aW5nXV07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUmF0ZQot
ewotICAgIEJPT0wgcGxheWluZyA9IFtzZWxmIHBsYXlpbmddOwotCi0gICAgLy8gS2VlcCB0aGUg
SFVEIHZpc2libGUgd2hlbiBwYXVzZWQuCi0gICAgaWYgKCFwbGF5aW5nKQotICAgICAgICBbc2Vs
ZiBmYWRlV2luZG93SW5dOwotICAgIGVsc2UgaWYgKCFfbW91c2VJc0luSFVEKSB7Ci0gICAgICAg
IFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07Ci0gICAgICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0aE9iamVjdDpu
aWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVsYXldOwotICAgIH0KLSAgICBbc2VsZiB1
cGRhdGVQbGF5QnV0dG9uXTsKLX0KLQotLSAodm9pZCl0b2dnbGVQbGF5aW5nOihpZClzZW5kZXIK
LXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBbc2VsZiBzZXRQbGF5aW5nOiFbc2Vs
ZiBwbGF5aW5nXV07Ci19Ci0KLS0gKEJPT0wpcGxheWluZwotewotICAgIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvRWxlbWVudCA9IFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XTsKLSAgICBpZiAoIXZp
ZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuICF2aWRlb0VsZW1l
bnQtPmNhblBsYXkoKTsKLX0KLQotLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmcKLXsK
LSAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxl
bWVudF07Ci0KLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKHBsYXlpbmcpCi0gICAgICAgIHZpZGVvRWxlbWVudC0+cGxheSgpOwotICAgIGVsc2UKLSAg
ICAgICAgdmlkZW9FbGVtZW50LT5wYXVzZSgpOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnRpbWVU
b1N0cmluZyhkb3VibGUgdGltZSkKLXsKLSAgICBBU1NFUlRfQVJHKHRpbWUsIHRpbWUgPj0gMCk7
Ci0KLSAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodGltZSkpCi0gICAgICAgIHRpbWUgPSAwOwotCi0g
ICAgaW50IHNlY29uZHMgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0ZDo6YWJzKHRpbWUpKTsK
LSAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOwotICAgIGludCBtaW51dGVzID0g
KHNlY29uZHMgLyA2MCkgJSA2MDsKLSAgICBzZWNvbmRzICU9IDYwOwotCi0gICAgaWYgKGhvdXJz
KQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZDolMDJkOiUw
MmQiLCBob3VycywgbWludXRlcywgc2Vjb25kc107Ci0KLSAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlMDJkOiUwMmQiLCBtaW51dGVzLCBzZWNvbmRzXTsgICAgCi19Ci0K
LS0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQKLXsKLSAgICBIVE1MVmlkZW9FbGVtZW50
KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07Ci0gICAgaWYgKCF2aWRl
b0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBAIiI7Ci0KLSAgICBkb3VibGUgcmVtYWluaW5nVGlt
ZSA9IDA7Ci0KLSAgICBpZiAoc3RkOjppc2Zpbml0ZSh2aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkp
ICYmIHN0ZDo6aXNmaW5pdGUodmlkZW9FbGVtZW50LT5jdXJyZW50VGltZSgpKSkKLSAgICAgICAg
cmVtYWluaW5nVGltZSA9IHZpZGVvRWxlbWVudC0+ZHVyYXRpb24oKSAtIHZpZGVvRWxlbWVudC0+
Y3VycmVudFRpbWUoKTsKLQotICAgIHJldHVybiBbQCItIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
Zzp0aW1lVG9TdHJpbmcocmVtYWluaW5nVGltZSldOwotfQotCi0tIChOU1N0cmluZyAqKWVsYXBz
ZWRUaW1lVGV4dAotewotICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAg
ICByZXR1cm4gQCIiOwotCi0gICAgcmV0dXJuIHRpbWVUb1N0cmluZyhbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF0tPmN1cnJlbnRUaW1lKCkpOwotfQotCi0vLyBNQVJLOiBOU1Jlc3BvbmRlcgotCi0t
ICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VEX1BB
UkFNKHRoZUV2ZW50KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIEhVRCB3b24ndCBiZSBoaWRkZW4g
ZnJvbSBub3cKLSAgICBfbW91c2VJc0luSFVEID0gWUVTOwotICAgIFtzZWxmIGZhZGVXaW5kb3dJ
bl07Ci19Ci0KLS0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAg
IFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7Ci0gICAgX21vdXNlSXNJbkhVRCA9IE5POwotICAgIFtz
ZWxmIGZhZGVXaW5kb3dJbl07Ci19Ci0KLS0gKHZvaWQpcmV3aW5kOihpZClzZW5kZXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+cmV3aW5k
KDMwKTsKLX0KLQotLSAodm9pZClmYXN0Rm9yd2FyZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNlbmRlcik7Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAg
ICAgIHJldHVybjsKLX0KLQotLSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7Ci0gICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCi0g
ICAgICAgIHJldHVybjsKLSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVTOwotICAgIFtfZGVs
ZWdhdGUgcmVxdWVzdEV4aXRGdWxsc2NyZWVuXTsgCi19Ci0KLS8vIE1BUks6IE5TV2luZG93RGVs
ZWdhdGUKLQotLSAodm9pZCl3aW5kb3dEaWRFeHBvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgW3NlbGYgc2No
ZWR1bGVUaW1lVXBkYXRlXTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRDbG9zZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsK
LSAgICBbc2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93
QW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJXaW5kb3dBbmltYXRpb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8
Q29jb2EvQ29jb2EuaD4KLQotV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJXaW5kb3dTY2Fs
ZUFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uIHsKLUBwcml2YXRlCi0gICAgTlNSZWN0IF9pbml0aWFs
RnJhbWUsIF9maW5hbEZyYW1lLCBfcmVhbEZyYW1lOwotICAgIE5TV2luZG93ICpfd2luZG93OyAv
LyAoYXNzaWduKQotICAgIE5TQW5pbWF0aW9uICpfc3ViQW5pbWF0aW9uOyAvLyAocmV0YWluKQot
ICAgIE5TVGltZUludGVydmFsIF9oaW50ZWREdXJhdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRoSGlu
dGVkRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3
aW5kb3cgaW5pdGFsRnJhbWU6KE5TUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooTlNSZWN0
KWZpbmFsRnJhbWU7Ci0KLS0gKHZvaWQpc2V0U3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKWFu
aW1hdGlvbjsKLQotLSAoTlNSZWN0KWN1cnJlbnRGcmFtZTsKLQotLy8gQmUgc3VyZSB0byBjYWxs
IHNldFdpbmRvdzpuaWwgdG8gY2xlYXIgdGhlIHdlYWsgbGluayBfd2luZG93IHdoZW4gYXBwcm9w
cmlhdGUKLS0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLUBlbmQKLQotCi1X
RUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gOiBOU0FuaW1h
dGlvbiB7Ci1AcHJpdmF0ZQotICAgIENHRmxvYXQgX2luaXRpYWxBbHBoYSwgX2ZpbmFsQWxwaGE7
Ci0gICAgTlNXaW5kb3cgKl93aW5kb3c7IC8vIChhc3NpZ24pCi0gICAgQk9PTCBfaXNTdG9wcGVk
OwotICAgIAotfQotLSAoaWQpaW5pdFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRp
b24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlh
bEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxBbHBoYTsKLQotLSAoQ0dGbG9hdCljdXJy
ZW50QWxwaGE7Ci0KLS8vIEJlIHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRo
ZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVuIGFwcHJvcHJpYXRlCi0tICh2b2lkKXNldFdpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3c7Ci1AZW5kCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93
QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJXaW5kb3dBbmltYXRpb24ubW0JKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0JKG5vbmV4aXN0ZW50KQpAQCAtMSwy
OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24u
aCIKLQotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IENH
RmxvYXQgc2xvd01vdGlvbkZhY3RvciA9IDEwOwotCi1zdGF0aWMgTlNUaW1lSW50ZXJ2YWwgV2Vi
V2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oTlNUaW1lSW50ZXJ2YWwgZHVyYXRp
b24pCi17Ci0gICAgcmV0dXJuIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10g
JiBOU0V2ZW50TW9kaWZpZXJGbGFnU2hpZnQpID8gZHVyYXRpb24gKiBzbG93TW90aW9uRmFjdG9y
IDogZHVyYXRpb247Ci19Ci0KLXN0YXRpYyBOU1JlY3Qgc2NhbGVkUmVjdChOU1JlY3QgX2luaXRp
YWxGcmFtZSwgTlNSZWN0IF9maW5hbEZyYW1lLCBDR0Zsb2F0IGZhY3RvcikKLXsKLSAgICBOU1Jl
Y3QgY3VycmVudFJlY3QgPSBfaW5pdGlhbEZyYW1lOwotICAgIGN1cnJlbnRSZWN0Lm9yaWdpbi54
ICs9IChOU01pblgoX2ZpbmFsRnJhbWUpIC0gTlNNaW5YKF9pbml0aWFsRnJhbWUpKSAqIGZhY3Rv
cjsKLSAgICBjdXJyZW50UmVjdC5vcmlnaW4ueSArPSAoTlNNaW5ZKF9maW5hbEZyYW1lKSAtIE5T
TWluWShfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7Ci0gICAgY3VycmVudFJlY3Quc2l6ZS53aWR0
aCArPSAoTlNXaWR0aChfZmluYWxGcmFtZSkgLSBOU1dpZHRoKF9pbml0aWFsRnJhbWUpKSAqIGZh
Y3RvcjsKLSAgICBjdXJyZW50UmVjdC5zaXplLmhlaWdodCArPSAoTlNIZWlnaHQoX2ZpbmFsRnJh
bWUpIC0gTlNIZWlnaHQoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOwotICAgIHJldHVybiBjdXJy
ZW50UmVjdDsKLX0KLQotc3RhdGljIENHRmxvYXQgc3F1YXJlZERpc3RhbmNlKE5TUG9pbnQgcG9p
bnQxLCBOU1BvaW50IHBvaW50MikKLXsKLSAgICBDR0Zsb2F0IGRlbHRhWCA9IHBvaW50MS54IC0g
cG9pbnQyLng7Ci0gICAgQ0dGbG9hdCBkZWx0YVkgPSBwb2ludDEueSAtIHBvaW50Mi55OwotICAg
IHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVk7Ci19Ci0KLX0KLQotdXNp
bmcgV2ViQ29yZTo6V2ViV2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb247Ci11c2lu
ZyBXZWJDb3JlOjpuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0OwotdXNpbmcgV2ViQ29yZTo6c2NhbGVk
UmVjdDsKLXVzaW5nIFdlYkNvcmU6OnNxdWFyZWREaXN0YW5jZTsKLUBpbXBsZW1lbnRhdGlvbiBX
ZWJXaW5kb3dTY2FsZUFuaW1hdGlvbgotCi0tIChpZClpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYg
c2V0QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07
Ci0gICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aWQpaW5pdFdpdGhIaW50ZWREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93
OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0YWxGcmFtZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5h
bEZyYW1lOihOU1JlY3QpZmluYWxGcmFtZQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2hpbnRlZER1cmF0aW9uID0g
ZHVyYXRpb247Ci0gICAgX3dpbmRvdyA9IHdpbmRvdzsKLSAgICBfaW5pdGlhbEZyYW1lID0gaW5p
dGlhbEZyYW1lOwotICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKLSAgICBfcmVhbEZyYW1l
ID0gW3dpbmRvdyBmcmFtZV07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpIGRlYWxs
b2MKLXsKLSAgICBbX3N1YkFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0g
ICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0
aW9uKGR1cmF0aW9uKV07Ci19Ci0KLS0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dwotewotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci19Ci0KLS0gKGZsb2F0KWN1cnJlbnRWYWx1ZQot
ewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNSAtIDAuNSAqIGNvcyhwaURv
dWJsZSAqICgxIC0gW3NlbGYgY3VycmVudFByb2dyZXNzXSkpKTsKLX0KLQotLSAoTlNSZWN0KWN1
cnJlbnRGcmFtZQotewotICAgIHJldHVybiBzY2FsZWRSZWN0KF9maW5hbEZyYW1lLCBfaW5pdGlh
bEZyYW1lLCBbc2VsZiBjdXJyZW50VmFsdWVdKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcFJlY3Qo
TlNSZWN0KiByZWN0KQotewotICAgIHJlY3QtPm9yaWdpbi55ID0gTlNNYXhZKFsoTlNTY3JlZW4g
KilbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKSAtIE5TTWF4WSgq
cmVjdCk7Ci19Ci0KLXN0YXRpYyBDR1NDb25uZWN0aW9uSUQgbWFpbldpbmRvd1NlcnZlckNvbm5l
Y3Rpb25JRCgpCi17Ci0gICAgc3RhdGljIENHU0Nvbm5lY3Rpb25JRCBjZ3NJZDsKLSAgICBpZiAo
IWNnc0lkKQotICAgICAgICBjZ3NJZCA9IENHU01haW5Db25uZWN0aW9uSUQoKTsKLSAgICByZXR1
cm4gY2dzSWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFNjYWxlZEZyYW1lRm9yV2luZG93KE5TV2lu
ZG93ICp3aW5kb3csIE5TUmVjdCBzY2FsZUZyYW1lLCBOU1JlY3Qgbm9uU2NhbGVkRnJhbWUpCi17
Ci0gICAgaWYgKE5TRXF1YWxSZWN0cyhzY2FsZUZyYW1lLCBub25TY2FsZWRGcmFtZSkpIHsKLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdub25udWxsIgotICAgICAgICBDR1NTZXRXaW5kb3dXYXJwKG1haW5XaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uSUQoKSwgd2luZG93LndpbmRvd051bWJlciwgMCwgMCwgbnVsbHB0cik7Ci0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgZmxvYXQgbWVzaFsxNl07Ci0gICAgCi0gICAgZmxpcFJlY3QoJnNjYWxlRnJhbWUpOwot
ICAgIGZsaXBSZWN0KCZub25TY2FsZWRGcmFtZSk7Ci0gICAgCi0gICAgLy8gdG9wLWxlZnQgcG9p
bnQgKHRvIGFuZCBmcm9tKQotICAgIG1lc2hbMF0gPSAwOwotICAgIG1lc2hbMV0gPSAwOwotICAg
IG1lc2hbMl0gPSBOU01pblgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFszXSA9IE5TTWluWShzY2Fs
ZUZyYW1lKTsKLSAgICAKLSAgICAvLyB0b3AtcmlnaHQgcG9pbnQgKHRvIGFuZCBmcm9tKQotICAg
IG1lc2hbNF0gPSBOU1dpZHRoKG5vblNjYWxlZEZyYW1lKTsKLSAgICBtZXNoWzVdID0gMDsKLSAg
ICBtZXNoWzZdID0gTlNNYXhYKHNjYWxlRnJhbWUpOwotICAgIG1lc2hbN10gPSBOU01pblkoc2Nh
bGVGcmFtZSk7Ci0gICAgCi0gICAgLy8gYm90dG9tLWxlZnQgKHRvIGFuZCBmcm9tKQotICAgIG1l
c2hbOF0gPSAwOwotICAgIG1lc2hbOV0gPSBOU0hlaWdodChub25TY2FsZWRGcmFtZSk7Ci0gICAg
bWVzaFsxMF0gPSBOU01pblgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFsxMV0gPSBOU01heFkoc2Nh
bGVGcmFtZSk7Ci0gICAgCi0gICAgLy8gYm90dG9tLXJpZ2h0ICh0byBhbmQgZnJvbSkKLSAgICBt
ZXNoWzEyXSA9IE5TV2lkdGgobm9uU2NhbGVkRnJhbWUpOwotICAgIG1lc2hbMTNdID0gTlNIZWln
aHQobm9uU2NhbGVkRnJhbWUpOwotICAgIG1lc2hbMTRdID0gTlNNYXhYKHNjYWxlRnJhbWUpOwot
ICAgIG1lc2hbMTVdID0gTlNNYXhZKHNjYWxlRnJhbWUpOwotICAgIAotICAgIC8vIEFwcGx5IHRo
ZSB3YXJwLgotICAgIENHU1NldFdpbmRvd1dhcnAobWFpbldpbmRvd1NlcnZlckNvbm5lY3Rpb25J
RCgpLCB3aW5kb3cud2luZG93TnVtYmVyLCAyLCAyLCBtZXNoKTsKLX0KLQotLSAodm9pZClzZXRD
dXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAo
IV93aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzdXBlciBzZXRDdXJyZW50UHJvZ3Jl
c3M6cHJvZ3Jlc3NdOwotCi0gICAgTlNSZWN0IGN1cnJlbnRSZWN0ID0gW3NlbGYgY3VycmVudEZy
YW1lXTsKLSAgICBzZXRTY2FsZWRGcmFtZUZvcldpbmRvdyhfd2luZG93LCBjdXJyZW50UmVjdCwg
X3JlYWxGcmFtZSk7Ci0gICAgW19zdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOnByb2dy
ZXNzXTsKLX0KLQotLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopYW5pbWF0
aW9uCi17Ci0gICAgaWQgb2xkQW5pbWF0aW9uID0gX3N1YkFuaW1hdGlvbjsKLSAgICBfc3ViQW5p
bWF0aW9uID0gW2FuaW1hdGlvbiByZXRhaW5dOwotICAgIFtvbGRBbmltYXRpb24gcmVsZWFzZV07
Ci19Ci0KLS0gKE5TVGltZUludGVydmFsKWFkZGl0aW9uYWxEdXJhdGlvbk5lZWRlZFRvUmVhY2hG
aW5hbEZyYW1lCi17Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgbWF4QWRkaXRpb25hbER1cmF0
aW9uID0gMTsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBzcGVlZEZhY3RvciA9IDAuMDAwMWY7
Ci0gICAgCi0gICAgQ0dGbG9hdCBtYXhEaXN0ID0gc3F1YXJlZERpc3RhbmNlKF9pbml0aWFsRnJh
bWUub3JpZ2luLCBfZmluYWxGcmFtZS5vcmlnaW4pOwotICAgIENHRmxvYXQgZGlzdDsKLSAgICAK
LSAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZy
YW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZy
YW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOwotICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKLSAg
ICAgICAgbWF4RGlzdCA9IGRpc3Q7Ci0gICAgCi0gICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShO
U01ha2VQb2ludChOU01heFgoX2luaXRpYWxGcmFtZSksIE5TTWF4WShfaW5pdGlhbEZyYW1lKSks
IE5TTWFrZVBvaW50KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWF4WShfZmluYWxGcmFtZSkpKTsK
LSAgICBpZiAoZGlzdCA+IG1heERpc3QpCi0gICAgICAgIG1heERpc3QgPSBkaXN0OwotICAgIAot
ICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJh
bWUpLCBOU01pblkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJh
bWUpLCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7Ci0gICAgaWYgKGRpc3QgPiBtYXhEaXN0KQotICAg
ICAgICBtYXhEaXN0ID0gZGlzdDsKLSAgICAKLSAgICByZXR1cm4gTUlOKHNxcnQobWF4RGlzdCkg
KiBzcGVlZEZhY3RvciwgbWF4QWRkaXRpb25hbER1cmF0aW9uKTsgICAgCi19Ci0KLS0gKHZvaWQp
c3RhcnRBbmltYXRpb24KLXsKLSAgICAvLyBDb21wdXRlIGV4dHJhIHRpbWUKLSAgICBpZiAoX2hp
bnRlZER1cmF0aW9uKQotICAgICAgICBbc2VsZiBzZXREdXJhdGlvbjpfaGludGVkRHVyYXRpb24g
KyBbc2VsZiBhZGRpdGlvbmFsRHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZV1dOwotICAg
IFtzdXBlciBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewot
ICAgIF93aW5kb3cgPSBuaWw7Ci0gICAgW3N1cGVyIHN0b3BBbmltYXRpb25dOwotICAgIFtfc3Vi
QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
ZWJXaW5kb3dGYWRlQW5pbWF0aW9uCi0KLS0gKGlkKWluaXQKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBz
ZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsK
LSAgICBbc2VsZiBzZXRGcmFtZVJhdGU6NjBdOwotICAgIFtzZWxmIHNldEFuaW1hdGlvbkN1cnZl
Ok5TQW5pbWF0aW9uRWFzZUluT3V0XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQpaW5p
dFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAq
KXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6KENH
RmxvYXQpZmluYWxBbHBoYQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7ICAgIAotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci0gICAg
X2luaXRpYWxBbHBoYSA9IGluaXRpYWxBbHBoYTsKLSAgICBfZmluYWxBbHBoYSA9IGZpbmFsQWxw
aGE7Ci0gICAgW3NlbGYgc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAg
IFtzdXBlciBzZXREdXJhdGlvbjpXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlv
bihkdXJhdGlvbildOwotfQotCi0tIChDR0Zsb2F0KWN1cnJlbnRBbHBoYQotewotICAgIHJldHVy
biBNQVgoMCwgTUlOKDEsIF9pbml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9m
aW5hbEFscGhhIC0gX2luaXRpYWxBbHBoYSkpKTsKLX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJv
Z3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAoX2lzU3RvcHBl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKF93aW5kb3cpOwotICAgIFtzdXBlciBz
ZXRDdXJyZW50UHJvZ3Jlc3M6cHJvZ3Jlc3NdOwotCi0gICAgQ0dTU2V0V2luZG93QWxwaGEobWFp
bldpbmRvd1NlcnZlckNvbm5lY3Rpb25JRCgpLCBfd2luZG93LndpbmRvd051bWJlciwgc2VsZi5j
dXJyZW50QWxwaGEpOwotfQotCi0tICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cqKXdpbmRvdwot
ewotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewot
ICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgd2hlbiB3ZSBhcmUgYSBzdWIgYW5pbWF0aW9uIG9mIGEg
c2NhbGUgYW5pbWF0aW9uLgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgaG9zdGVkIGluIHRo
ZSBhbmltYXRlZCB0aHJlYWQgb2YgdGhlIHBhcmVudAotICAgIC8vIGFuZCBldmVuIGFmdGVyIFtz
dXBlciBzdG9wQW5pbWF0aW9uXSwgdGhlIHBhcmVudCBtaWdodCBjYWxsCi0gICAgLy8gc2V0Q3Vy
cnJlbnRQcm9ncmVzcy4KLSAgICBfaXNTdG9wcGVkID0gWUVTOwotCi0gICAgW3N1cGVyIHN0b3BB
bmltYXRpb25dOwotfQotCi1AZW5kCi0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0KX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MjkwKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxOC0wMi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20gV2ViQ29y
ZSB0byBXZWJLaXRMZWdhY3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODI2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBhIGZldyBy
ZWZlcmVuY2VzIHRvIE5TQXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0uCisg
ICAgICAgIElkZWFsbHksIHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdlYkNvcmUu
CisKKyAgICAgICAgKiBXZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxOC0wMS0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVzZSBDb21wbGV0aW9uSGFuZGxlcnMgZm9yIFJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJL
aXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NzQsNiArNzc0LDkgQEAKIAkJ
QzBCODhFOEIxMEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBCODhFOEEx
MEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMwQzVCM0VFMTE3N0E0
QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQzVCM0VDMTE3N0E0QTAwMDJCMEFFRiAv
KiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDMEM1QjNFRjExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzBDNUIzRUQxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJM
UGF0dGVybi5tbSAqLzsgfTsKKwkJQzFEODExMjgyMDJDRDgwMDAwRUU3NEY5IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJQzFEODExMkIyMDJDRENDNDAwRUU3NEY5IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMUQ4MTEyOTIwMkNEQ0MyMDBFRTc0RjkgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKKwkJQzFEODEx
MkUyMDJDRUQwODAwRUU3NEY5IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMxRDgxMTJEMjAyQ0VEMDcwMEVFNzRG
OSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gKi87IH07CiAJCUNEOEJGQ0U3MTU1MzEyMjQwMDVB
RkIyNSAvKiBXZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUgLyogV2Vi
S2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tICovOyB9OwogCQlDRDhCRkNFODE1NTMxMjI0MDA1QUZC
MjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0
RnVsbFNjcmVlbkxpc3RlbmVyLmggKi87IH07CiAJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAv
KiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLmggKi87IH07CkBAIC0xNTI1LDYgKzE1MjgsMTIgQEAKIAkJQzBCODhFOEEx
MEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUIzRUMxMTc3QTRBMDAwMkIwQUVGIC8q
IFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzBDNUIzRUQxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVy
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlVzZXJDb250
ZW50VVJMUGF0dGVybi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMjYy
MDJDRDdGRTAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyNzIwMkNEODAwMDBFRTc0Rjkg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRGOSAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMkEyMDJDRENDMzAwRUU3
NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyQzIwMkNFRDA2MDBF
RTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMUQ4MTEyRDIwMkNFRDA3MDBFRTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUg
LyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNj
cmVlbkxpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEZ1
bGxTY3JlZW5MaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE2MkFF
MDEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzAsMTIgKzIwNzksMTggQEAKIAkJCQlGODM0QUFE
NjBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLm1tICovLAogCQkJCTUxNUUyN0ND
MDQ1OEM4NjUwMENBMkQzQSAvKiBXZWJVSURlbGVnYXRlLmggKi8sCiAJCQkJNjVBN0Q0NEEwNTY4
QUIyNjAwRTcwRUY2IC8qIFdlYlVJRGVsZWdhdGVQcml2YXRlLmggKi8sCisJCQkJQzFEODExMjYy
MDJDRDdGRTAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKKwkJ
CQlDMUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ci5tbSAqLywKKwkJCQlDMUQ4MTEyQTIwMkNEQ0MzMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5oICovLAorCQkJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRG
OSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovLAogCQkJCTUx
QThCNTc5MDQyODM0RjcwMENBMkQzQSAvKiBXZWJWaWV3LmggKi8sCiAJCQkJNTFBOEI1N0EwNDI4
MzRGNzAwQ0EyRDNBIC8qIFdlYlZpZXcubW0gKi8sCiAJCQkJQkMyRTQ2NEIwRkQ4QTk2ODAwQTlE
OURFIC8qIFdlYlZpZXdEYXRhLmggKi8sCiAJCQkJQkMyRTQ2NEMwRkQ4QTk2ODAwQTlEOURFIC8q
IFdlYlZpZXdEYXRhLm1tICovLAogCQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2NzAxRSAvKiBXZWJW
aWV3SW50ZXJuYWwuaCAqLywKIAkJCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyogV2ViVmll
d1ByaXZhdGUuaCAqLywKKwkJCQlDMUQ4MTEyQzIwMkNFRDA2MDBFRTc0RjkgLyogV2ViV2luZG93
QW5pbWF0aW9uLmggKi8sCisJCQkJQzFEODExMkQyMDJDRUQwNzAwRUU3NEY5IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gV2ViVmlldzsKIAkJCXBhdGggPSBt
YWMvV2ViVmlldzsKQEAgLTM2NzIsMTEgKzM2ODcsMTQgQEAKIAkJCQlDMEM1QjNFRjExNzdBNEEw
MDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDcwRjU0OUMxN0YxRTQyQjAwMTY5RTA0IC8qIFdlYlVzZXJNZWRpYUNsaWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTQ2MThERkY5MURFRjc2MEEwMDMzQzNBQSAvKiBXZWJWYWxpZGF0aW9u
TWVzc2FnZUNsaWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUMxRDgxMTI4MjAyQ0Q4MDAwMEVF
NzRGOSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzFEODExMkIyMDJDRENDNDAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTEwNzA4MjRCRjAxMDA4REYw
MzggLyogV2ViVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMkU0NjRFMEZEOEE5NjgwMEE5
RDlERSAvKiBXZWJWaWV3RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MzBDMTJDMUIyQzVE
RjcwMERFQTAxRCAvKiBXZWJWaWV3R3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFE
NzcxODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBQzcxNzZFMUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQzFEODExMkUyMDJDRUQwODAwRUU3NEY5IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzcwOSw5ICszNzI3LDcgQEAKIAkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMUM5MDRGRDIwQkE5REQwRjAwODFFOUQwIC8qIFdl
YktpdExlZ2FjeS54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJREVCVUdf
REVGSU5FUyA9ICIkKERFQlVHX0RFRklORVNfZGVidWcpIEVOQUJMRV9XRUJLSVRfVU5TRVRfRFlM
RF9GUkFNRVdPUktfUEFUSCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICgKLQkJCQkJIiQoT1RIRVJf
TERGTEFHUykiLAotCQkJCSk7CisJCQkJT1RIRVJfTERGTEFHUyA9ICIkKE9USEVSX0xERkxBR1Mp
IjsKIAkJCX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07CkBAIC0zNzIwLDkgKzM3MzYsNyBAQAog
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQzkwNEZEMjBCQTlERDBGMDA4MUU5RDAg
LyogV2ViS2l0TGVnYWN5LnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlE
RUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpIEVOQUJM
RV9XRUJLSVRfVU5TRVRfRFlMRF9GUkFNRVdPUktfUEFUSCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9
ICgKLQkJCQkJIiQoT1RIRVJfTERGTEFHUykiLAotCQkJCSk7CisJCQkJT1RIRVJfTERGTEFHUyA9
ICIkKE9USEVSX0xERkxBR1MpIjsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKQEAg
LTM3MzEsOSArMzc0NSw3IEBACiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDFDOTA0
RkQyMEJBOUREMEYwMDgxRTlEMCAvKiBXZWJLaXRMZWdhY3kueGNjb25maWcgKi87CiAJCQlidWls
ZFNldHRpbmdzID0gewogCQkJCUJVSUxEX1ZBUklBTlRTID0gbm9ybWFsOwotCQkJCU9USEVSX0xE
RkxBR1MgPSAoCi0JCQkJCSIkKE9USEVSX0xERkxBR1MpIiwKLQkJCQkpOworCQkJCU9USEVSX0xE
RkxBR1MgPSAiJChPVEhFUl9MREZMQUdTKSI7CiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjgyNzgp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMiBAQAorMjAxOC0wMi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20g
V2ViQ29yZSB0byBXZWJLaXRMZWdhY3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODI2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJdCBpcyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBh
IGZldyByZWZlcmVuY2VzIHRvIE5TQXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
bW0uCisgICAgICAgIElkZWFsbHksIHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdl
YkNvcmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0uCisgICAgICAgICogV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmguCisgICAgICAgICog
V2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlci5tbS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAg
ICogV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oLgorICAgICAgICAqIFdlYlZpZXcv
V2ViV2luZG93QW5pbWF0aW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLm1tLgorCiAyMDE4LTAxLTEzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBFdmVudCBpbXByb3ZlbWVudHMKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5tbQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiV2ViTlNXaW5kb3dFeHRyYXMuaCIKICNpbXBvcnQg
IldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KQEAgLTQyLDcgKzQzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29y
ZUZ1bGxTY3JlZW5XaW5kb3cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViV2luZG93QW5pbWF0aW9u
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcu
aD4KIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyODI3OCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIuaDoyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxl
ci5oPgorI2ltcG9ydCA8QXBwS2l0L05TU2NyZWVuLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBQQUwgeworY2xhc3MgU2xlZXBEaXNhYmxlcjsKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK30KKworQHByb3RvY29sIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKK0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdlYldpbmRvd0ZhZGVBbmltYXRpb247CitA
Y2xhc3MgQ0FMYXllcjsKKworV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIDogTlNXaW5kb3dDb250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgUmVm
UHRyPFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7IC8vIChyZXRhaW4p
CisgICAgaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRl
OyAvLyAoYXNzaWduKQorCisgICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRv
dzsgLy8gKHJldGFpbikKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
ICpfaHVkQ29udHJvbGxlcjsgLy8gKHJldGFpbikKKworICAgIFdlYldpbmRvd0ZhZGVBbmltYXRp
b24gKl9mYWRlQW5pbWF0aW9uOyAvLyAocmV0YWluKQorCisgICAgQk9PTCBfaXNFbmRpbmdGdWxs
c2NyZWVuOworICAgIEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQQUw6OlNsZWVwRGlzYWJsZXI+IF9kaXNwbGF5U2xlZXBEaXNhYmxlcjsKK30KKwor
LSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7Cist
ICh2b2lkKXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVn
YXRlPilkZWxlZ2F0ZTsKKworLSAodm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5
ZXI7CistICh2b2lkKXNldFZpZGVvRWxlbWVudDooV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCop
dmlkZW9FbGVtZW50OworLSAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50
OworCistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47CistICh2b2lk
KWV4aXRGdWxsc2NyZWVuOworCitAZW5kCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDggKzI3LDggQEAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPKQogCi0jaW1w
b3J0IDxBcHBLaXQvTlNXaW5kb3dDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNTY3Jl
ZW4uaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1dpbmRvd0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFBBTCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyLm1tCShyZXZpc2lvbiAyMjgyNzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tOjIyODI3OCkKKysrIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgorI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KKyNpbXBvcnQgPHBhbC9zeXN0ZW0vU2xlZXBEaXNhYmxlci5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK3VzaW5nIFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ7CisKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorCitTT0ZUX0xJTktfRlJBTUVXT1JL
KEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5
ZXIpCisKK3VzaW5nIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWE7CitAaW50ZXJmYWNlIFdlYlZpZGVv
RnVsbHNjcmVlbldpbmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+Cit7CisgICAg
U0VMIF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQ7CisgICAgV2ViV2luZG93U2NhbGVB
bmltYXRpb24gKl9mdWxsc2NyZWVuQW5pbWF0aW9uOyAvLyAocmV0YWluKQorfQorLSAodm9pZClh
bmltYXRlRnJvbVJlY3Q6KE5TUmVjdClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3
aXRoU3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0
aW9uOihTRUwpY29udHJvbGxlckFjdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyKEhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSkgPFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKy0gKHZvaWQpcmVxdWVzdEV4
aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247CistICh2b2lkKXVwZGF0
ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbjsKKy0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRpb25z
OworQGVuZAorCitAaW50ZXJmYWNlIE5TV2luZG93KElzT25BY3RpdmVTcGFjZUFkZGl0aW9uRm9y
VGlnZXJBbmRMZW9wYXJkKQorLSAoQk9PTClpc09uQWN0aXZlU3BhY2U7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCistIChpZClpbml0Cit7Cisg
ICAgLy8gRG8gbm90IGRlZmVyIHdpbmRvdyBjcmVhdGlvbiwgdG8gbWFrZSBzdXJlIC13aW5kb3dO
dW1iZXIgaXMgY3JlYXRlZCAobmVlZGVkIGJ5IFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uKS4KKyAg
ICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgYWxsb2NdIGlu
aXRXaXRoQ29udGVudFJlY3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93
TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiB3aW5kb3dEaWRM
b2FkXTsKKyAgICByZXR1cm4gc2VsZjsKKyAgICAKK30KKy0gKHZvaWQpZGVhbGxvYworeworICAg
IEFTU0VSVCghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KTsKKyAgICBBU1NFUlQoIV9mYWRl
QW5pbWF0aW9uKTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOnNlbGZdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoV2ViVmlk
ZW9GdWxsc2NyZWVuV2luZG93ICopZnVsbHNjcmVlbldpbmRvdworeworICAgIHJldHVybiAoV2Vi
VmlkZW9GdWxsc2NyZWVuV2luZG93ICopW3N1cGVyIHdpbmRvd107Cit9CisKKy0gKHZvaWQpc2V0
dXBWaWRlb092ZXJsYXk6KENBTGF5ZXIgKilsYXllcgoreworICAgIFdlYlZpZGVvRnVsbHNjcmVl
bldpbmRvdyAqd2luZG93ID0gW3NlbGYgZnVsbHNjcmVlbldpbmRvd107CisgICAgWyhOU1ZpZXcq
KVt3aW5kb3cgY29udGVudFZpZXddIHNldExheWVyOmxheWVyXTsKKyAgICBbW3dpbmRvdyBjb250
ZW50Vmlld10gc2V0V2FudHNMYXllcjpZRVNdOworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQK
K3sKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxzY3Jl
ZW5XaW5kb3ddOworICAgIFt3aW5kb3cgc2V0SGFzU2hhZG93OllFU107IC8vIFRoaXMgaXMgbmlj
ZXIgd2l0aCBhIHNoYWRvdy4KKyAgICBbd2luZG93IHNldExldmVsOk5TUG9wVXBNZW51V2luZG93
TGV2ZWwtMV07CisgICAgWyhOU1ZpZXcqKVt3aW5kb3cgY29udGVudFZpZXddIHNldExheWVyOltD
QUxheWVyIGxheWVyXV07CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6
WUVTXTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6
KSBuYW1lOk5TQXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Ok5T
QXBwXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFy
YW1ldGVyczopIG5hbWU6TlNBcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnNOb3Rp
ZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKK30KKworLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9F
bGVtZW50Cit7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7Cit9CisKKy0gKHZvaWQp
c2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKK3sKKyAgICBf
dmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCisgICAgaWYgKCFfdmlkZW9FbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3NlbGYgaXNXaW5kb3dMb2FkZWRdKSB7CisgICAg
ICAgIGlmIChfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1l
ZGlhOjpBVkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGUpIHsKKyAgICAgICAgICAgIEFWUGxheWVy
ICpwbGF5ZXIgPSBfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEuYXZmTWVkaWFQ
bGF5ZXI7CisgICAgICAgICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJMYXllcj4gbGF5ZXIgPSBhZG9w
dE5TKFthbGxvY0FWUGxheWVyTGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICAgICAgICAgIFtz
ZWxmIHNldHVwVmlkZW9PdmVybGF5OmxheWVyLmdldCgpXTsKKyAgICAgICAgICAgIFtsYXllci5n
ZXQoKSBzZXRQbGF5ZXI6cGxheWVyXTsKKworICAgICAgICAgICAgW3BsYXllciBhZGRPYnNlcnZl
cjpzZWxmIGZvcktleVBhdGg6QCJyYXRlIiBvcHRpb25zOjAgY29udGV4dDpudWxscHRyXTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworLSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJE
ZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQorCistICh2b2lk
KXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilk
ZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChDR0Zsb2F0KWNs
ZWFyRmFkZUFuaW1hdGlvbgoreworICAgIFtfZmFkZUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsK
KyAgICBDR0Zsb2F0IHByZXZpb3VzQWxwaGEgPSBbX2ZhZGVBbmltYXRpb24gY3VycmVudEFscGhh
XTsKKyAgICBbX2ZhZGVBbmltYXRpb24gc2V0V2luZG93Om5pbF07CisgICAgW19mYWRlQW5pbWF0
aW9uIHJlbGVhc2VdOworICAgIF9mYWRlQW5pbWF0aW9uID0gbmlsOworICAgIHJldHVybiBwcmV2
aW91c0FscGhhOworfQorCistICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCit7CisgICAg
Q0FMYXllciAqbGF5ZXIgPSBbKE5TVmlldyopW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGxh
eWVyXTsKKyAgICBpZiAoW2xheWVyIGlzS2luZE9mQ2xhc3M6Z2V0QVZQbGF5ZXJMYXllckNsYXNz
KCldKQorICAgICAgICBbWyhBVlBsYXllckxheWVyKilsYXllciBwbGF5ZXJdIHJlbW92ZU9ic2Vy
dmVyOnNlbGYgZm9yS2V5UGF0aDpAInJhdGUiXTsKKworICAgIFtzZWxmIGNsZWFyRmFkZUFuaW1h
dGlvbl07CisgICAgW1tzZWxmIHdpbmRvd10gY2xvc2VdOworICAgIFtzZWxmIHNldFdpbmRvdzpu
aWxdOworICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07ICAgCisgICAg
W3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6bmlsXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgX2h1ZENvbnRy
b2xsZXIgPSBuaWw7CisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBjbG9zZV07Cisg
ICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyByZWxlYXNlXTsKKyAgICBfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgPSBuaWw7CisgICAgCisgICAgW3NlbGYgYXV0b3JlbGVhc2VdOyAv
LyBBc3NvY2lhdGVkIC1yZXRhaW4gaXMgaW4gLWV4aXRGdWxsc2NyZWVuLgorICAgIF9pc0VuZGlu
Z0Z1bGxzY3JlZW4gPSBOTzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4K
K3sKKyAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOworCisgICAgQVNTRVJUKCFfaHVkQ29u
dHJvbGxlcik7CisgICAgX2h1ZENvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOworICAgIFtfaHVkQ29udHJvbGxlciBzZXREZWxl
Z2F0ZTpzZWxmXTsKKworICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07
CisgICAgW3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICBbTlNDdXJzb3Igc2V0SGlk
ZGVuVW50aWxNb3VzZU1vdmVzOllFU107CisgICAgCisgICAgLy8gR2l2ZSB0aGUgSFVEIGtleWJv
YXJkIGZvY3VzIGluaXRpYWxseQorICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOwor
fQorCistIChOU1JlY3QpdmlkZW9FbGVtZW50UmVjdAoreworICAgIHJldHVybiBfdmlkZW9FbGVt
ZW50LT5zY3JlZW5SZWN0KCk7Cit9CisKKy0gKHZvaWQpYXBwbGljYXRpb25EaWRSZXNpZ25BY3Rp
dmU6KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb24KK3sgICAKKyAgICBVTlVTRURfUEFSQU0o
bm90aWZpY2F0aW9uKTsKKyAgICBOU1dpbmRvdyogZnVsbHNjcmVlbldpbmRvdyA9IFtzZWxmIGZ1
bGxzY3JlZW5XaW5kb3ddOworCisgICAgLy8gUmVwbGljYXRlIHRoZSBRdWlja1RpbWUgUGxheWVy
IChYKSBiZWhhdmlvciB3aGVuIGxvc2luZyBhY3RpdmUgYXBwbGljYXRpb24gc3RhdHVzOgorICAg
IC8vIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVlbiB0aGUgbWFpbiBzY3JlZW4/IChOb3RlOiB0aGlz
IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBvbmx5IGEgCisgICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBh
dmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNl
PyBJRkYgc28sIAorICAgIC8vIHRoZW4gZXhpdCBmdWxsc2NyZWVuIG1vZGUuICAgIAorICAgIGlm
IChmdWxsc2NyZWVuV2luZG93LnNjcmVlbiA9PSBbTlNTY3JlZW4gc2NyZWVuc11bMF0gJiYgZnVs
bHNjcmVlbldpbmRvdy5vbkFjdGl2ZVNwYWNlKQorICAgICAgICAgW3NlbGYgcmVxdWVzdEV4aXRG
dWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107Cit9CisgICAgICAgICAKKyAgICAgICAgIAorLy8g
TUFSSzogLQorLy8gTUFSSzogRXhwb3NlZCBJbnRlcmZhY2UKKworc3RhdGljIE5TUmVjdCBmcmFt
ZUV4cGFuZGVkVG9SYXRpb09mRnJhbWUoTlNSZWN0IGZyYW1lVG9FeHBhbmQsIE5TUmVjdCBmcmFt
ZSkKK3sKKyAgICAvLyBLZWVwIGEgY29uc3RyYWluZWQgYXNwZWN0IHJhdGlvIGZvciB0aGUgZGVz
dGluYXRpb24gd2luZG93CisgICAgTlNSZWN0IHJlc3VsdCA9IGZyYW1lVG9FeHBhbmQ7CisgICAg
Q0dGbG9hdCBuZXdSYXRpbyA9IGZyYW1lLnNpemUud2lkdGggLyBmcmFtZS5zaXplLmhlaWdodDsK
KyAgICBDR0Zsb2F0IG9yaWdpbmFsUmF0aW8gPSBmcmFtZVRvRXhwYW5kLnNpemUud2lkdGggLyBm
cmFtZVRvRXhwYW5kLnNpemUuaGVpZ2h0OworICAgIGlmIChuZXdSYXRpbyA+IG9yaWdpbmFsUmF0
aW8pIHsKKyAgICAgICAgQ0dGbG9hdCBuZXdXaWR0aCA9IG5ld1JhdGlvICogZnJhbWVUb0V4cGFu
ZC5zaXplLmhlaWdodDsKKyAgICAgICAgQ0dGbG9hdCBkaWZmID0gbmV3V2lkdGggLSBmcmFtZVRv
RXhwYW5kLnNpemUud2lkdGg7CisgICAgICAgIHJlc3VsdC5zaXplLndpZHRoID0gbmV3V2lkdGg7
CisgICAgICAgIHJlc3VsdC5vcmlnaW4ueCAtPSBkaWZmIC8gMjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBDR0Zsb2F0IG5ld0hlaWdodCA9IGZyYW1lVG9FeHBhbmQuc2l6ZS53aWR0aCAvIG5ld1Jh
dGlvOworICAgICAgICBDR0Zsb2F0IGRpZmYgPSBuZXdIZWlnaHQgLSBmcmFtZVRvRXhwYW5kLnNp
emUuaGVpZ2h0OworICAgICAgICByZXN1bHQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7CisgICAg
ICAgIHJlc3VsdC5vcmlnaW4ueSAtPSBkaWZmIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIE5TV2luZG93ICpjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRv
dyhOU1JlY3QgZnJhbWUsIGludCBsZXZlbCkKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tO
U1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpmcmFtZSBzdHlsZU1hc2s6TlNCb3Jk
ZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9d
OworICAgIFt3aW5kb3cgc2V0T3BhcXVlOllFU107CisgICAgW3dpbmRvdyBzZXRCYWNrZ3JvdW5k
Q29sb3I6W05TQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFt3aW5kb3cgc2V0TGV2ZWw6bGV2ZWxd
OworICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICByZXR1cm4gd2lu
ZG93OworfQorCistICh2b2lkKXNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOihC
T09MKWZhZGVJbgoreworICAgIENHRmxvYXQgaW5pdGlhbEFscGhhID0gZmFkZUluID8gMCA6IDE7
CisgICAgaWYgKF9mYWRlQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdXBw
b3J0IHF1ZXVpbmcgYW5pbWF0aW9uIGlmIHRoZSBwcmV2aW91cyBvbmUgaXNuJ3Qgb3ZlciB5ZXQK
KyAgICAgICAgaW5pdGlhbEFscGhhID0gW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKyAgICB9
CisgICAgaWYgKCFfZm9yY2VEaXNhYmxlQW5pbWF0aW9uKQorICAgICAgICBfZmFkZUFuaW1hdGlv
biA9IFtbV2ViV2luZG93RmFkZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjowLjIg
d2luZG93Ol9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBpbml0aWFsQWxwaGE6aW5pdGlhbEFs
cGhhIGZpbmFsQWxwaGE6ZmFkZUluID8gMSA6IDBdOworfQorCistICh2b2lkKWVudGVyRnVsbHNj
cmVlbjooTlNTY3JlZW4gKilzY3JlZW4KK3sKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgc2Ny
ZWVuID0gW05TU2NyZWVuIG1haW5TY3JlZW5dOworCisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3Nj
cmVlbiBmcmFtZV07CisgICAgTlNSZWN0IGZyYW1lID0gZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZy
YW1lKFtzZWxmIHZpZGVvRWxlbWVudFJlY3RdLCBlbmRGcmFtZSk7CisKKyAgICAvLyBDcmVhdGUg
YSBibGFjayB3aW5kb3cgaWYgbmVlZGVkCisgICAgaWYgKCFfYmFja2dyb3VuZEZ1bGxzY3JlZW5X
aW5kb3cpCisgICAgICAgIF9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyA9IGNyZWF0ZUJhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93KFtzY3JlZW4gZnJhbWVdLCBbW3NlbGYgd2luZG93XSBsZXZl
bF0tMSk7CisgICAgZWxzZQorICAgICAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IHNl
dEZyYW1lOltzY3JlZW4gZnJhbWVdIGRpc3BsYXk6Tk9dOworCisgICAgW3NlbGYgc2V0dXBGYWRl
QW5pbWF0aW9uSWZOZWVkZWRBbmRGYWRlSW46WUVTXTsKKyAgICBpZiAoX2ZvcmNlRGlzYWJsZUFu
aW1hdGlvbikgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmltYXRpb24K
KyAgICAgICAgZnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICBbW3NlbGYgZnVsbHNjcmVl
bldpbmRvd10gYW5pbWF0ZUZyb21SZWN0OmZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRoU3ViQW5p
bWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdpbmRvd0Rp
ZEVudGVyRnVsbHNjcmVlbildOworCisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBv
cmRlcldpbmRvdzpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86W1tzZWxmIGZ1bGxzY3JlZW5XaW5k
b3ddIHdpbmRvd051bWJlcl1dOworfQorCistICh2b2lkKWV4aXRGdWxsc2NyZWVuCit7CisgICAg
aWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBfaXNFbmRpbmdG
dWxsc2NyZWVuID0gWUVTOworICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CisKKyAg
ICBOU1JlY3QgZW5kRnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKKworICAgIFtzZWxm
IHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOk5PXTsKKyAgICBpZiAoX2ZvcmNl
RGlzYWJsZUFuaW1hdGlvbikgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBh
bmltYXRpb24KKyAgICAgICAgZW5kRnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICAKKyAg
ICAvLyBXZSBoYXZlIHRvIHJldGFpbiBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFs
aXZlIGZvciB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uCisgICAgLy8gSWYgb3VyIG93bmVyIHJl
bGVhc2VzIHVzIHdlIGNvdWxkIGNyYXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorICAgIC8v
IEJhbGFuY2VkIGluIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCisgICAgW3NlbGYgcmV0YWluXTsg
ICAgCisKKyAgICBOU1JlY3Qgc3RhcnRGcmFtZSA9IFtbc2VsZiB3aW5kb3ddIGZyYW1lXTsKKyAg
ICBlbmRGcmFtZSA9IGZyYW1lRXhwYW5kZWRUb1JhdGlvT2ZGcmFtZShlbmRGcmFtZSwgc3RhcnRG
cmFtZSk7CisKKyAgICBbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0ZUZyb21SZWN0OnN0
YXJ0RnJhbWUgdG9SZWN0OmVuZEZyYW1lIHdpdGhTdWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24g
Y29udHJvbGxlckFjdGlvbjpAc2VsZWN0b3Iod2luZG93RGlkRXhpdEZ1bGxzY3JlZW4pXTsKK30K
KworLSAodm9pZClhcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KE5TTm90aWZp
Y2F0aW9uKilub3RpZmljYXRpb24KK3sKKyAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsK
KyAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBtYWluIHNjcmVlbiBieSBtb3Zp
bmcgdGhlIG1lbnUgYmFyLCBvciB0aGV5IG1heSBoYXZlIGNoYW5nZWQKKyAgICAvLyB0aGUgRG9j
aydzIHNpemUgb3IgbG9jYXRpb24sIG9yIHRoZXkgbWF5IGhhdmUgY2hhbmdlZCB0aGUgZnVsbHNj
cmVlbiBzY3JlZW4ncyBkaW1lbnNpb25zLiAgCisgICAgLy8gVXBkYXRlIG91ciBwcmVzZW50YXRp
b24gcGFyYW1ldGVycywgYW5kIGVuc3VyZSB0aGF0IHRoZSBmdWxsIHNjcmVlbiB3aW5kb3cgb2Nj
dXBpZXMgdGhlIAorICAgIC8vIGVudGlyZSBzY3JlZW46CisgICAgW3NlbGYgdXBkYXRlTWVudUFu
ZERvY2tGb3JGdWxsc2NyZWVuXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTpbW1tzZWxm
IHdpbmRvd10gc2NyZWVuXSBmcmFtZV0gZGlzcGxheTpZRVNdOworfQorCistICh2b2lkKXVwZGF0
ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgoreworICAgIC8vIE5TQXBwbGljYXRpb25QcmVzZW50
YXRpb25PcHRpb25zIGlzIGF2YWlsYWJsZSBvbiA+IDEwLjYgb25seToKKyAgICBOU0FwcGxpY2F0
aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBvcHRpb25zID0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlv
bkRlZmF1bHQ7CisgICAgTlNTY3JlZW4qIGZ1bGxzY3JlZW5TY3JlZW4gPSBbW3NlbGYgd2luZG93
XSBzY3JlZW5dOworCisgICAgaWYgKCFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CisgICAgICAgIC8v
IEF1dG8taGlkZSB0aGUgbWVudSBiYXIgaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMg
dGhlIG1lbnUgYmFyOgorICAgICAgICAvLyBOT1RFOiBpZiB0aGUgZnVsbHNjcmVlblNjcmVlbiBj
b250YWlucyB0aGUgbWVudSBiYXIgYnV0IG5vdCB0aGUgZG9jaywgd2UgbXVzdCBzdGlsbCAKKyAg
ICAgICAgLy8gYXV0by1oaWRlIHRoZSBkb2NrLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJv
d24uCisgICAgICAgIGlmIChbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gPT0g
ZnVsbHNjcmVlblNjcmVlbikKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gKE5TQXBwbGljYXRpb25Q
cmVzZW50YXRpb25BdXRvSGlkZU1lbnVCYXIgfCBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0
b0hpZGVEb2NrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgc2NyZWVuIGNvbnRh
aW5zIHRoZSBkb2NrIGJ5IGNvbXBhcmluZyB0aGUgc2NyZWVuJ3MgZnJhbWUgdG8gaXRzCisgICAg
ICAgIC8vIHZpc2libGVGcmFtZTsgaWYgYSBkb2NrIGlzIHByZXNlbnQsIHRoZSB2aXNpYmxlRnJh
bWUgd2lsbCBkaWZmZXIuICBJZiB0aGUgY3VycmVudCBzY3JlZW4KKyAgICAgICAgLy8gY29udGFp
bnMgdGhlIGRvY2ssIGhpZGUgaXQuCisgICAgICAgIGVsc2UgaWYgKCFOU0VxdWFsUmVjdHMoW2Z1
bGxzY3JlZW5TY3JlZW4gZnJhbWVdLCBbZnVsbHNjcmVlblNjcmVlbiB2aXNpYmxlRnJhbWVdKSkK
KyAgICAgICAgICAgIG9wdGlvbnMgfD0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRl
RG9jazsKKyAgICB9CisKKyAgICBOU0FwcC5wcmVzZW50YXRpb25PcHRpb25zID0gb3B0aW9uczsK
K30KKworLSAodm9pZCl1cGRhdGVQb3dlckFzc2VydGlvbnMKK3sKKyAgICBfZGlzcGxheVNsZWVw
RGlzYWJsZXIgPSBudWxscHRyOworfQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBXaW5kb3cgY2Fs
bGJhY2sKKworLSAodm9pZClfcmVxdWVzdEV4aXQKK3sKKyAgICBpZiAoX3ZpZGVvRWxlbWVudCkK
KyAgICAgICAgX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uID0gTk87Cit9CisKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0
aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb24KK3sKKyAgICBpZiAoX2lzRW5kaW5nRnVsbHNjcmVl
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmlt
YXRpb247CisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4aXQp
IHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CisKK30KKworLSAodm9pZClyZXF1ZXN0RXhp
dEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0
aW9uOllFU107Cit9CisKKy0gKHZvaWQpZmFkZUhVREluCit7CisgICAgW19odWRDb250cm9sbGVy
IGZhZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNT
dHJpbmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnkg
KiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAgICBVTlVTRURfUEFSQU0ob2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4
dCk7CisKKyAgICBpZiAoW2tleVBhdGggaXNFcXVhbFRvOkAicmF0ZSJdKQorICAgICAgICBbc2Vs
ZiByYXRlQ2hhbmdlZDpuaWxdOworfQorCistICh2b2lkKXJhdGVDaGFuZ2VkOihOU05vdGlmaWNh
dGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3Rp
ZmljYXRpb24pOworICAgIFtfaHVkQ29udHJvbGxlciB1cGRhdGVSYXRlXTsKKyAgICBbc2VsZiB1
cGRhdGVQb3dlckFzc2VydGlvbnNdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJW
aWRlb0Z1bGxzY3JlZW5XaW5kb3cKKworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0
KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNr
aW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNF
RF9QQVJBTShhU3R5bGUpOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpj
b250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZl
cmluZ1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9y
OltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6
Tk9dOworICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2Z1bGxzY3Jl
ZW5BbmltYXRpb24pOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoQk9PTClyZXNpZ25G
aXJzdFJlc3BvbmRlcgoreworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTCljYW5CZWNvbWVL
ZXlXaW5kb3cKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2
ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQpOworfQorCistICh2
b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIHJlcXVlc3RFeGl0RnVsbHNjcmVlbl07
Cit9CisKKy0gKHZvaWQpYW5pbWF0ZWRSZXNpemVEaWRFbmQKK3sKKyAgICAvLyBDYWxsIG91ciB3
aW5kb3dDb250cm9sbGVyLgorICAgIGlmIChfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5k
KQorICAgICAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gcGVyZm9ybVNlbGVjdG9yOl9jb250
cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmRdOworICAgIF9jb250cm9sbGVyQWN0aW9uT25Bbmlt
YXRpb25FbmQgPSBOVUxMOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGFuaW1hdGUg
YSBjaGFuZ2Ugb2YgZnJhbWUgcmVjdGFuZ2xlCisvLyBXZSBzdXBwb3J0IHF1ZXVpbmcgYW5pbWF0
aW9uLCB0aGF0IG1lYW5zIHRoYXQgd2UnbGwgY29ycmVjdGx5CisvLyBpbnRlcnJ1cHQgdGhlIHJ1
bm5pbmcgYW5pbWF0aW9uLCBhbmQgcXVldWUgdGhlIG5leHQgb25lLgorLy8KKy0gKHZvaWQpYW5p
bWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRSZWN0IHRvUmVjdDooTlNSZWN0KWVuZFJlY3Qgd2l0
aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilzdWJBbmltYXRpb24gY29udHJvbGxlckFjdGlv
bjooU0VMKWNvbnRyb2xsZXJBY3Rpb24KK3sKKyAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0
aW9uRW5kID0gY29udHJvbGxlckFjdGlvbjsKKworICAgIEJPT0wgd2FzQW5pbWF0aW5nID0gTk87
CisgICAgaWYgKF9mdWxsc2NyZWVuQW5pbWF0aW9uKSB7CisgICAgICAgIHdhc0FuaW1hdGluZyA9
IFlFUzsKKworICAgICAgICAvLyBJbnRlcnJ1cHQgYW55IHJ1bm5pbmcgYW5pbWF0aW9uLgorICAg
ICAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisKKyAgICAgICAgLy8g
U2F2ZSB0aGUgY3VycmVudCByZWN0IHRvIGVuc3VyZSBhIHNtb290aCB0cmFuc2l0aW9uLgorICAg
ICAgICBzdGFydFJlY3QgPSBbX2Z1bGxzY3JlZW5BbmltYXRpb24gY3VycmVudEZyYW1lXTsKKyAg
ICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHJlbGVhc2VdOworICAgICAgICBfZnVsbHNjcmVl
bkFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisgICAgCisgICAgaWYgKE5TSXNFbXB0eVJlY3Qoc3Rh
cnRSZWN0KSB8fCBOU0lzRW1wdHlSZWN0KGVuZFJlY3QpKSB7CisgICAgICAgIC8vIEZha2VseSBl
bmQgdGhlIHN1YmFuaW1hdGlvbi4KKyAgICAgICAgW3N1YkFuaW1hdGlvbiBzZXRDdXJyZW50UHJv
Z3Jlc3M6MV07CisgICAgICAgIC8vIEFuZCByZW1vdmUgdGhlIHdlYWsgbGluayB0byB0aGUgd2lu
ZG93LgorICAgICAgICBbc3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworCisgICAgICAgIFtz
ZWxmIHNldEZyYW1lOmVuZFJlY3QgZGlzcGxheTpOT107CisgICAgICAgIFtzZWxmIG1ha2VLZXlB
bmRPcmRlckZyb250OnNlbGZdOworICAgICAgICBbc2VsZiBhbmltYXRlZFJlc2l6ZURpZEVuZF07
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXdhc0FuaW1hdGluZykgeworICAg
ICAgICAvLyBXZSdsbCBkb3duc2NhbGUgdGhlIHdpbmRvdyBkdXJpbmcgdGhlIGFuaW1hdGlvbiBi
YXNlZCBvbiB0aGUgaGlnaGVyIHJlc29sdXRpb24gcmVjdAorICAgICAgICBCT09MIGhpZ2hlclJl
c29sdXRpb25Jc0VuZFJlY3QgPSBzdGFydFJlY3Quc2l6ZS53aWR0aCA8IGVuZFJlY3Quc2l6ZS53
aWR0aCAmJiBzdGFydFJlY3Quc2l6ZS5oZWlnaHQgPCBlbmRSZWN0LnNpemUuaGVpZ2h0OworICAg
ICAgICBbc2VsZiBzZXRGcmFtZTpoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID8gZW5kUmVjdCA6
IHN0YXJ0UmVjdCBkaXNwbGF5Ok5PXTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFfZnVsbHNj
cmVlbkFuaW1hdGlvbik7CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW1dlYldpbmRvd1Nj
YWxlQW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aEhpbnRlZER1cmF0aW9uOjAuMiB3aW5kb3c6c2Vs
ZiBpbml0YWxGcmFtZTpzdGFydFJlY3QgZmluYWxGcmFtZTplbmRSZWN0XTsKKyAgICBbX2Z1bGxz
Y3JlZW5BbmltYXRpb24gc2V0U3ViQW5pbWF0aW9uOnN1YkFuaW1hdGlvbl07CisgICAgW19mdWxs
c2NyZWVuQW5pbWF0aW9uIHNldERlbGVnYXRlOnNlbGZdOworICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgYW5pbWF0aW9uIGhhcyBzY2FsZWQgdGhlIHdpbmRvdyBiZWZvcmUgc2hvd2luZyBpdC4K
KyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtz
ZWxmIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0
aW9uIHN0YXJ0QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5p
bWF0aW9uICopYW5pbWF0aW9uCit7CisgICAgaWYgKCFbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkg
eworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKGFu
aW1hdGlvbkRpZEVuZDopIHdpdGhPYmplY3Q6YW5pbWF0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhbmltYXRpb24gIT0gX2Z1bGxzY3JlZW5B
bmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBhbmltYXRpb24gaXMgbm90
IHJlYWxseSBvdmVyIGFuZCB3YXMgaW50ZXJydXB0ZWQKKyAgICAvLyBEb24ndCBzZW5kIGNvbXBs
ZXRpb24gZXZlbnRzLgorICAgIGlmIChbYW5pbWF0aW9uIGN1cnJlbnRQcm9ncmVzc10gPCAxLjAp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFuaW1hdGlvbiAoYW5kIHN1
YmFuaW1hdGlvbikgZG9uJ3Qga2VlcAorICAgIC8vIHRoZSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUg
d2luZG93IGl2YXIgdGhhdCBtYXkgYmUgZGVzdHJveWVkIGZyb20KKyAgICAvLyBub3cgb24uCisg
ICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworCisgICAgW19mdWxsc2Ny
ZWVuQW5pbWF0aW9uIGF1dG9yZWxlYXNlXTsKKyAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5p
bDsKKworICAgIFtzZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKK30KKworLSAodm9pZCltb3Vz
ZU1vdmVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQp
OworICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSBmYWRlSFVESW5dOworfQorCitAZW5kCisK
KyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0K
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5tbQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw5ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKFZJREVP
KSAmJiBQTEFURk9STShNQUMpCiAKICNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIuaCIKIApAQCAtNTAsOCArNDgsNyBAQCBTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlv
bikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiAKIHVzaW5n
IFdlYkNvcmU6OlBsYXRmb3JtTWVkaWE7Ci1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbldp
bmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+Ci17CitAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbldpbmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+IHsKICAg
ICBTRUwgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZDsKICAgICBXZWJXaW5kb3dTY2Fs
ZUFuaW1hdGlvbiAqX2Z1bGxzY3JlZW5BbmltYXRpb247IC8vIChyZXRhaW4pCiB9CkBAIC0yMTIs
OCArMjA5LDggQEAgLSAodm9pZClhcHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZTooTlNObwogICAg
IGlmIChmdWxsc2NyZWVuV2luZG93LnNjcmVlbiA9PSBbTlNTY3JlZW4gc2NyZWVuc11bMF0gJiYg
ZnVsbHNjcmVlbldpbmRvdy5vbkFjdGl2ZVNwYWNlKQogICAgICAgICAgW3NlbGYgcmVxdWVzdEV4
aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107CiB9Ci0gICAgICAgICAKLSAgICAgICAgIAor
CisKIC8vIE1BUks6IC0KIC8vIE1BUks6IEV4cG9zZWQgSW50ZXJmYWNlCiAKQEAgLTMzMiw3ICsz
MjksNyBAQCAtICh2b2lkKXVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgogICAgICAgICBp
ZiAoW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdID09IGZ1bGxzY3JlZW5TY3Jl
ZW4pCiAgICAgICAgICAgICBvcHRpb25zIHw9IChOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0
b0hpZGVNZW51QmFyIHwgTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jayk7CiAg
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHNjcmVlbiBjb250YWlucyB0aGUgZG9jayBi
eSBjb21wYXJpbmcgdGhlIHNjcmVlbidzIGZyYW1lIHRvIGl0cwotICAgICAgICAvLyB2aXNpYmxl
RnJhbWU7IGlmIGEgZG9jayBpcyBwcmVzZW50LCB0aGUgdmlzaWJsZUZyYW1lIHdpbGwgZGlmZmVy
LiAgSWYgdGhlIGN1cnJlbnQgc2NyZWVuCisgICAgICAgIC8vIHZpc2libGVGcmFtZTsgaWYgYSBk
b2NrIGlzIHByZXNlbnQsIHRoZSB2aXNpYmxlRnJhbWUgd2lsbCBkaWZmZXIuIElmIHRoZSBjdXJy
ZW50IHNjcmVlbgogICAgICAgICAvLyBjb250YWlucyB0aGUgZG9jaywgaGlkZSBpdC4KICAgICAg
ICAgZWxzZSBpZiAoIU5TRXF1YWxSZWN0cyhbZnVsbHNjcmVlblNjcmVlbiBmcmFtZV0sIFtmdWxs
c2NyZWVuU2NyZWVuIHZpc2libGVGcmFtZV0pKQogICAgICAgICAgICAgb3B0aW9ucyB8PSBOU0Fw
cGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVEb2NrOwpJbmRleDogU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgJKHJldmlzaW9uIDIyODI3OCkJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIuaDoyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8QXBw
S2l0L05TQnV0dG9uLmg+CisjaW1wb3J0IDxBcHBLaXQvTlNDb250cm9sLmg+CisjaW1wb3J0IDxB
cHBLaXQvTlNUZXh0RmllbGQuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RyYWNraW5nQXJlYS5oPgor
I2ltcG9ydCA8QXBwS2l0L05TV2luZG93Lmg+CisjaW1wb3J0IDxBcHBLaXQvTlNXaW5kb3dDb250
cm9sbGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7
Cit9CisKK0Bwcm90b2NvbCBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVs
ZWdhdGU7CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ciA6IE5TV2luZG93Q29udHJvbGxlcgoreworICAgIGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyRGVsZWdhdGU+IF9kZWxlZ2F0ZTsKKyAgICBOU1RpbWVyICpfdGltZWxp
bmVVcGRhdGVUaW1lcjsKKyAgICBOU1RyYWNraW5nQXJlYSAqX2FyZWE7CisgICAgQk9PTCBfbW91
c2VJc0luSFVEOworICAgIEJPT0wgX2lzRW5kaW5nRnVsbHNjcmVlbjsKKyAgICBCT09MIF9pc1Nj
cnViYmluZzsKKworICAgIE5TQ29udHJvbCAqX3RpbWVsaW5lOworICAgIE5TVGV4dEZpZWxkICpf
cmVtYWluaW5nVGltZVRleHQ7CisgICAgTlNUZXh0RmllbGQgKl9lbGFwc2VkVGltZVRleHQ7Cisg
ICAgTlNDb250cm9sICpfdm9sdW1lU2xpZGVyOworICAgIE5TQnV0dG9uICpfcGxheUJ1dHRvbjsK
K30KKworLSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0
ZT4pZGVsZWdhdGU7CistICh2b2lkKXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKKy0gKHZvaWQpZmFkZVdpbmRv
d0luOworLSAodm9pZClmYWRlV2luZG93T3V0OworLSAodm9pZCljbG9zZVdpbmRvdzsKKy0gKHZv
aWQpdXBkYXRlUmF0ZTsKKworQGVuZAorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KKy0gKHZvaWQpcmVxdWVzdEV4aXRG
dWxsc2NyZWVuOworLSAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50Owor
QGVuZAorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmgJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw4ICszOCw3IEBAIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiAKIEBw
cm90b2NvbCBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU7CiAK
LUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciA6IE5TV2lu
ZG93Q29udHJvbGxlcgoteworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyIDogTlNXaW5kb3dDb250cm9sbGVyIHsKICAgICBpZCA8V2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7CiAgICAgTlNUaW1lciAq
X3RpbWVsaW5lVXBkYXRlVGltZXI7CiAgICAgTlNUcmFja2luZ0FyZWEgKl9hcmVhOwpJbmRleDog
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNpb24g
MjI4Mjc4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5tbToyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgi
CisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgorI2lt
cG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9tYWMvUVRLaXRTUEkuaD4KKyNpbXBv
cnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFFUS2l0KQorCitT
T0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEQmFja2dyb3VuZFZpZXcpCitTT0ZUX0xJTktfQ0xB
U1MoUVRLaXQsIFFUSFVEQnV0dG9uKQorU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVRFNsaWRl
cikKK1NPRlRfTElOS19DTEFTUyhRVEtpdCwgUVRIVURUaW1lbGluZSkKKworI2RlZmluZSBRVEhV
REJhY2tncm91bmRWaWV3IGdldFFUSFVEQmFja2dyb3VuZFZpZXdDbGFzcygpCisjZGVmaW5lIFFU
SFVEQnV0dG9uIGdldFFUSFVEQnV0dG9uQ2xhc3MoKQorI2RlZmluZSBRVEhVRFNsaWRlciBnZXRR
VEhVRFNsaWRlckNsYXNzKCkKKyNkZWZpbmUgUVRIVURUaW1lbGluZSBnZXRRVEhVRFRpbWVsaW5l
Q2xhc3MoKQorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBNZWRpYVVJQ29u
dHJvbCB7CisgICAgVGltZWxpbmUsCisgICAgU2xpZGVyLAorICAgIFBsYXlQYXVzZUJ1dHRvbiwK
KyAgICBFeGl0RnVsbHNjcmVlbkJ1dHRvbiwKKyAgICBSZXdpbmRCdXR0b24sCisgICAgRmFzdEZv
cndhcmRCdXR0b24sCisgICAgVm9sdW1lVXBCdXR0b24sCisgICAgVm9sdW1lRG93bkJ1dHRvbiwK
K307CisKK30KKwordXNpbmcgV2ViQ29yZTo6TWVkaWFVSUNvbnRyb2w7Cit1c2luZyBXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50OwordXNpbmcgV2ViQ29yZTo6bmFycm93UHJlY2lzaW9uVG9GbG9h
dDsKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciAoUHJp
dmF0ZSkgPE5TV2luZG93RGVsZWdhdGU+CisKKy0gKHZvaWQpdXBkYXRlVGltZTsKKy0gKHZvaWQp
dGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6KGlkKXNlbmRlcjsKKy0gKGZsb2F0KWN1cnJlbnRUaW1l
OworLSAodm9pZClzZXRDdXJyZW50VGltZTooZmxvYXQpY3VycmVudFRpbWU7CistIChkb3VibGUp
ZHVyYXRpb247CisKKy0gKHZvaWQpdm9sdW1lQ2hhbmdlZDooaWQpc2VuZGVyOworLSAoZmxvYXQp
bWF4Vm9sdW1lOworLSAoZmxvYXQpdm9sdW1lOworLSAodm9pZClzZXRWb2x1bWU6KGZsb2F0KXZv
bHVtZTsKKy0gKHZvaWQpZGVjcmVtZW50Vm9sdW1lOworLSAodm9pZClpbmNyZW1lbnRWb2x1bWU7
CisKKy0gKHZvaWQpdXBkYXRlUGxheUJ1dHRvbjsKKy0gKHZvaWQpdG9nZ2xlUGxheWluZzooaWQp
c2VuZGVyOworLSAoQk9PTClwbGF5aW5nOworLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlp
bmc7CisKKy0gKHZvaWQpcmV3aW5kOihpZClzZW5kZXI7CistICh2b2lkKWZhc3RGb3J3YXJkOihp
ZClzZW5kZXI7CisKKy0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQ7CistIChOU1N0cmlu
ZyAqKWVsYXBzZWRUaW1lVGV4dDsKKworLSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVy
OworQGVuZAorCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyA6IE5TV2lu
ZG93CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cK
KworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFz
azooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmlu
Z1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNFRF9QQVJBTShhU3R5bGUpOworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6
TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpm
bGFnXTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBbc2VsZiBz
ZXRPcGFxdWU6Tk9dOworICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVh
ckNvbG9yXV07CisgICAgW3NlbGYgc2V0TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07Cisg
ICAgW3NlbGYgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6WUVTXTsKKyAgICBbc2VsZiBzZXRJ
Z25vcmVzTW91c2VFdmVudHM6Tk9dOworICAgIFtzZWxmIHNldE1vdmFibGVCeVdpbmRvd0JhY2tn
cm91bmQ6WUVTXTsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChCT09MKWNhbkJlY29tZUtl
eVdpbmRvdworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpY2FuY2VsT3BlcmF0aW9u
OihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBbW3NlbGYgd2lu
ZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxzY3JlZW46c2VsZl07Cit9CisKKy0gKHZvaWQpY2VudGVy
Cit7CisgICAgTlNSZWN0IGh1ZEZyYW1lID0gW3NlbGYgZnJhbWVdOworICAgIE5TUmVjdCBzY3Jl
ZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFpblNjcmVlbl0gZnJhbWVdOworICAgIFtzZWxmIHNldEZy
YW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBvaW50KHNjcmVlbkZyYW1lLm9yaWdpbi54ICsgKHNjcmVl
bkZyYW1lLnNpemUud2lkdGggLSBodWRGcmFtZS5zaXplLndpZHRoKSAvIDIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuRnJhbWUub3JpZ2luLnkgKyAo
c2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQgLSBodWRGcmFtZS5zaXplLmhlaWdodCkgLyA2KV07Cit9
CisKKy0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgW3N1cGVyIGtleURv
d246ZXZlbnRdOworICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSBmYWRlV2luZG93SW5dOwor
fQorCistIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCit7CisgICAgcmV0dXJuIE5POworfQor
CistIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAv
LyBCbG9jayBhbGwgY29tbWFuZCBrZXkgZXZlbnRzIHdoaWxlIHRoZSBmdWxsc2NyZWVuIHdpbmRv
dyBpcyB1cC4KKyAgICBpZiAoW2V2ZW50IHR5cGVdICE9IE5TRXZlbnRUeXBlS2V5RG93bikKKyAg
ICAgICAgcmV0dXJuIE5POworICAgIAorICAgIGlmICghKFtldmVudCBtb2RpZmllckZsYWdzXSAm
IE5TRXZlbnRNb2RpZmllckZsYWdDb21tYW5kKSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJl
dHVybiBZRVM7Cit9CisKK0BlbmQKKworc3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93SGVpZ2h0
ID0gNTk7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCB3aW5kb3dXaWR0aCA9IDQzODsKKworc3RhdGlj
IGNvbnN0IE5TVGltZUludGVydmFsIEhVRFdpbmRvd0ZhZGVPdXREZWxheSA9IDM7CisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyCisKKy0gKGlk
KWluaXQKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCB3aW5kb3dX
aWR0aCwgd2luZG93SGVpZ2h0KSBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNz
IGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CisgICAgc2VsZiA9IFtz
dXBlciBpbml0V2l0aFdpbmRvdzp3aW5kb3ddOworICAgIFt3aW5kb3cgc2V0RGVsZWdhdGU6c2Vs
Zl07CisgICAgW3dpbmRvdyByZWxlYXNlXTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgW3NlbGYgd2luZG93RGlkTG9hZF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOwor
ICAgIEFTU0VSVCghX2FyZWEpOworICAgIEFTU0VSVCghX2lzU2NydWJiaW5nKTsKKyAgICBbX3Rp
bWVsaW5lIHJlbGVhc2VdOworICAgIFtfcmVtYWluaW5nVGltZVRleHQgcmVsZWFzZV07CisgICAg
W19lbGFwc2VkVGltZVRleHQgcmVsZWFzZV07CisgICAgW192b2x1bWVTbGlkZXIgcmVsZWFzZV07
CisgICAgW19wbGF5QnV0dG9uIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAodm9pZClzZXRBcmVhOihOU1RyYWNraW5nQXJlYSAqKWFyZWEKK3sKKyAgICBpZiAoYXJlYSA9
PSBfYXJlYSkKKyAgICAgICAgcmV0dXJuOworICAgIFtfYXJlYSByZWxlYXNlXTsKKyAgICBfYXJl
YSA9IFthcmVhIHJldGFpbl07Cit9CisKKy0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgTlNTdHJpbmcgKmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtldmVudCBj
aGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOworICAgIGlmIChbY2hhcmFjdGVyc0lnbm9yaW5n
TW9kaWZpZXJzIGxlbmd0aF0gPT0gMSkgeworICAgICAgICBzd2l0Y2ggKFtjaGFyYWN0ZXJzSWdu
b3JpbmdNb2RpZmllcnMgY2hhcmFjdGVyQXRJbmRleDowXSkgeworICAgICAgICAgICAgY2FzZSAn
ICc6CisgICAgICAgICAgICAgICAgW3NlbGYgdG9nZ2xlUGxheWluZzpuaWxdOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgTlNVcEFycm93RnVuY3Rpb25LZXk6Cisg
ICAgICAgICAgICAgICAgaWYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmll
ckZsYWdPcHRpb24pCisgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBt
YXhWb2x1bWVdXTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFtz
ZWxmIGluY3JlbWVudFZvbHVtZV07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgICAgIGlmIChbZXZl
bnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQorICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBzZXRWb2x1bWU6MF07CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBbc2VsZiBkZWNyZW1lbnRWb2x1bWVdOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBbc3VwZXIga2V5RG93bjpldmVudF07Cit9CisKKy0gKGlk
IDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRl
Cit7CisgICAgcmV0dXJuIF9kZWxlZ2F0ZTsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQg
PFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUK
K3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAodm9pZClzY2hlZHVsZVRpbWVV
cGRhdGUKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRo
VGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmpl
Y3Q6c2VsZl07CisKKyAgICAvLyBGaXJzdCwgdXBkYXRlIHJpZ2h0IGF3YXksIHRoZW4gc2NoZWR1
bGUgZnV0dXJlIHVwZGF0ZQorICAgIFtzZWxmIHVwZGF0ZVRpbWVdOworICAgIFtzZWxmIHVwZGF0
ZVBsYXlCdXR0b25dOworCisgICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRhdGVdOwor
ICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciByZWxlYXNlXTsKKworICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGNyZWF0ZXMgYSByZXRhaW4gY3ljbGUgYmV0d2VlbiB0aGUgd2luZG93IGFuZCB1cy4KKyAg
ICBfdGltZWxpbmVVcGRhdGVUaW1lciA9IFtbTlNUaW1lciB0aW1lcldpdGhUaW1lSW50ZXJ2YWw6
MC4yNSB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodXBkYXRlVGltZSkgdXNlckluZm86
bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOworICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29w
XSBhZGRUaW1lcjpfdGltZWxpbmVVcGRhdGVUaW1lciBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1v
ZGVzXTsKK30KKworLSAodm9pZCl1bnNjaGVkdWxlVGltZVVwZGF0ZQoreworICAgIFtOU09iamVj
dCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRhdGUpIG9iamVjdDpuaWxdOworCisgICAgW190aW1l
bGluZVVwZGF0ZVRpbWVyIGludmFsaWRhdGVdOworICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciBy
ZWxlYXNlXTsKKyAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9IG5pbDsKK30KKworLSAodm9pZClm
YWRlV2luZG93SW4KK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAg
ICBpZiAoIVt3aW5kb3cgaXNWaXNpYmxlXSkKKyAgICAgICAgW3dpbmRvdyBzZXRBbHBoYVZhbHVl
OjBdOworCisgICAgW3dpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKKyAgICBbW3dp
bmRvdyBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZToxXTsKKyAgICBbc2VsZiBzY2hlZHVsZVRpbWVV
cGRhdGVdOworCisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0
aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmls
XTsKKyAgICBpZiAoIV9tb3VzZUlzSW5IVUQgJiYgW3NlbGYgcGxheWluZ10pICAgLy8gRG9uJ3Qg
ZmFkZSBvdXQgd2hlbiBwYXVzZWQuCisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2Vs
ZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dG
YWRlT3V0RGVsYXldOworfQorCistICh2b2lkKWZhZGVXaW5kb3dPdXQKK3sKKyAgICBbTlNDdXJz
b3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOllFU107CisgICAgW1tbc2VsZiB3aW5kb3ddIGFu
aW1hdG9yXSBzZXRBbHBoYVZhbHVlOjBdOworICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2Vs
ZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRhdGUpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MV07
Cit9CisKKy0gKHZvaWQpY2xvc2VXaW5kb3cKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlv
dXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVX
aW5kb3dPdXQpIG9iamVjdDpuaWxdOworICAgIFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsK
KyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBbW3dpbmRvdyBjb250
ZW50Vmlld10gcmVtb3ZlVHJhY2tpbmdBcmVhOl9hcmVhXTsKKyAgICBbc2VsZiBzZXRBcmVhOm5p
bF07CisgICAgW3dpbmRvdyBjbG9zZV07CisgICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgIFtzZWxmIHNldFdpbmRvdzpuaWxdOworfQorCitzdGF0aWMgTlNDb250cm9sICpjcmVhdGVN
ZWRpYVVJQ29udHJvbChNZWRpYVVJQ29udHJvbCBjb250cm9sVHlwZSkKK3sKKyAgICBzd2l0Y2gg
KGNvbnRyb2xUeXBlKSB7CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6VGltZWxpbmU6IHsKKyAg
ICAgICAgTlNTbGlkZXIgKnNsaWRlciA9IFtbUVRIVURUaW1lbGluZSBhbGxvY10gaW5pdF07Cisg
ICAgICAgIFtbc2xpZGVyIGNlbGxdIHNldENvbnRpbnVvdXM6WUVTXTsKKyAgICAgICAgcmV0dXJu
IHNsaWRlcjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6U2xpZGVyOiB7CisgICAg
ICAgIE5TQnV0dG9uICpzbGlkZXIgPSBbW1FUSFVEU2xpZGVyIGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgW1tzbGlkZXIgY2VsbF0gc2V0Q29udGludW91czpZRVNdOworICAgICAgICByZXR1cm4gc2xp
ZGVyOworICAgIH0KKyAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b246IHsK
KyAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwor
ICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1BsYXlUZW1w
bGF0ZSJdXTsKKyAgICAgICAgW2J1dHRvbiBzZXRBbHRlcm5hdGVJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNQYXVzZVFUUHJpdmF0ZVRlbXBsYXRlIl1dOworCisgICAgICAgIFtbYnV0dG9u
IGNlbGxdIHNldFNob3dzU3RhdGVCeTpOU0NvbnRlbnRzQ2VsbE1hc2tdOworICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0dXJuIGJ1dHRvbjsKKyAgICB9CisgICAg
Y2FzZSBNZWRpYVVJQ29udHJvbDo6RXhpdEZ1bGxzY3JlZW5CdXR0b246IHsKKyAgICAgICAgTlNC
dXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOworICAgICAgICBbYnV0
dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0V4aXRGdWxsU2NyZWVuVGVtcGxh
dGUiXV07CisgICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOworICAgICAgICByZXR1cm4g
YnV0dG9uOworICAgIH0KKyAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpSZXdpbmRCdXR0b246IHsK
KyAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwor
ICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1Jld2luZFRl
bXBsYXRlIl1dOworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0
dXJuIGJ1dHRvbjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6RmFzdEZvcndhcmRC
dXR0b246IHsKKyAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2Nd
IGluaXRdOworICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJO
U0Zhc3RGb3J3YXJkVGVtcGxhdGUiXV07CisgICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9d
OworICAgICAgICByZXR1cm4gYnV0dG9uOworICAgIH0KKyAgICBjYXNlIE1lZGlhVUlDb250cm9s
OjpWb2x1bWVVcEJ1dHRvbjogeworICAgICAgICBOU0J1dHRvbiAqYnV0dG9uID0gW1tRVEhVREJ1
dHRvbiBhbGxvY10gaW5pdF07CisgICAgICAgIFtidXR0b24gc2V0SW1hZ2U6W05TSW1hZ2UgaW1h
Z2VOYW1lZDpAIk5TQXVkaW9PdXRwdXRWb2x1bWVIaWdoVGVtcGxhdGUiXV07CisgICAgICAgIFti
dXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOworICAgICAgICByZXR1cm4gYnV0dG9uOworICAgIH0KKyAg
ICBjYXNlIE1lZGlhVUlDb250cm9sOjpWb2x1bWVEb3duQnV0dG9uOiB7CisgICAgICAgIE5TQnV0
dG9uICpidXR0b24gPSBbW1FUSFVEQnV0dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRv
biBzZXRJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNBdWRpb091dHB1dFZvbHVtZUxvd1Rl
bXBsYXRlIl1dOworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0
dXJuIGJ1dHRvbjsKKyAgICB9CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIE5TQ29udHJvbCAqY3JlYXRlQ29udHJvbFdpdGhN
ZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2wgY29udHJvbFR5cGUsIE5TUmVjdCBmcmFt
ZSkKK3sKKyAgICBOU0NvbnRyb2wgKmNvbnRyb2wgPSBjcmVhdGVNZWRpYVVJQ29udHJvbChjb250
cm9sVHlwZSk7CisgICAgY29udHJvbC5mcmFtZSA9IGZyYW1lOworICAgIHJldHVybiBjb250cm9s
OworfQorCitzdGF0aWMgTlNUZXh0RmllbGQgKmNyZWF0ZVRpbWVUZXh0RmllbGQoTlNSZWN0IGZy
YW1lKQoreworICAgIE5TVGV4dEZpZWxkICp0ZXh0RmllbGQgPSBbW05TVGV4dEZpZWxkIGFsbG9j
XSBpbml0V2l0aEZyYW1lOmZyYW1lXTsKKyAgICBbdGV4dEZpZWxkIHNldFRleHRDb2xvcjpbTlND
b2xvciB3aGl0ZUNvbG9yXV07CisgICAgW3RleHRGaWVsZCBzZXRCb3JkZXJlZDpOT107CisgICAg
W3RleHRGaWVsZCBzZXRGb250OltOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MTBdXTsKKyAg
ICBbdGV4dEZpZWxkIHNldERyYXdzQmFja2dyb3VuZDpOT107CisgICAgW3RleHRGaWVsZCBzZXRC
ZXplbGVkOk5PXTsKKyAgICBbdGV4dEZpZWxkIHNldEVkaXRhYmxlOk5PXTsKKyAgICBbdGV4dEZp
ZWxkIHNldFNlbGVjdGFibGU6Tk9dOworICAgIHJldHVybiB0ZXh0RmllbGQ7Cit9CisKK3N0YXRp
YyBOU1ZpZXcgKmNyZWF0ZU1lZGlhVUlCYWNrZ3JvdW5kVmlldygpCit7CisgICAgaWQgdmlldyA9
IFtbUVRIVURCYWNrZ3JvdW5kVmlldyBhbGxvY10gaW5pdF07CisKKyAgICBjb25zdCBDR0Zsb2F0
IHF1aWNrVGltZVBsYXllckhVREhlaWdodCA9IDU5OworICAgIGNvbnN0IENHRmxvYXQgcXVpY2tU
aW1lUGxheWVySFVEQ29udGVudEJvcmRlclBvc2l0aW9uID0gMzg7CisKKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXBy
ZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICBbdmlldyBzZXRDb250ZW50Qm9yZGVyUG9zaXRpb246
cXVpY2tUaW1lUGxheWVySFVEQ29udGVudEJvcmRlclBvc2l0aW9uIC8gcXVpY2tUaW1lUGxheWVy
SFVESGVpZ2h0XTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKworICAgIHJldHVybiB2
aWV3OworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQKK3sKKyAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCBob3Jpem9udGFsTWFyZ2luID0gMTA7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgcGxh
eUJ1dHRvbldpZHRoID0gNDE7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbkhl
aWdodCA9IDM1OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHBsYXlCdXR0b25Ub3BNYXJnaW4g
PSA0OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZVNsaWRlcldpZHRoID0gNTA7Cisg
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lU2xpZGVySGVpZ2h0ID0gMTM7CisgICAgc3Rh
dGljIGNvbnN0IENHRmxvYXQgdm9sdW1lQnV0dG9uV2lkdGggPSAxODsKKyAgICBzdGF0aWMgY29u
c3QgQ0dGbG9hdCB2b2x1bWVCdXR0b25IZWlnaHQgPSAxNjsKKyAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCB2b2x1bWVVcEJ1dHRvbkxlZnRNYXJnaW4gPSA0OworICAgIHN0YXRpYyBjb25zdCBDR0Zs
b2F0IHZvbHVtZUNvbnRyb2xzVG9wTWFyZ2luID0gMTM7CisgICAgc3RhdGljIGNvbnN0IENHRmxv
YXQgZXhpdEZ1bGxzY3JlZW5CdXR0b25XaWR0aCA9IDI1OworICAgIHN0YXRpYyBjb25zdCBDR0Zs
b2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9uSGVpZ2h0ID0gMjE7CisgICAgc3RhdGljIGNvbnN0IENH
RmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0b25Ub3BNYXJnaW4gPSAxMTsKKyAgICBzdGF0aWMgY29u
c3QgQ0dGbG9hdCB0aW1lbGluZVdpZHRoID0gMzE1OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0
IHRpbWVsaW5lSGVpZ2h0ID0gMTQ7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZWxpbmVC
b3R0b21NYXJnaW4gPSA3OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRX
aWR0aCA9IDU0OworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRIZWlnaHQg
PSAxMzsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1h
cmdpbiA9IDc7CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBB
U1NFUlQod2luZG93KTsKKworICAgIE5TVmlldyAqYmFja2dyb3VuZCA9IGNyZWF0ZU1lZGlhVUlC
YWNrZ3JvdW5kVmlldygpOworCisgICAgW3dpbmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5k
XTsKKyAgICBfYXJlYSA9IFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFj
a2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6TlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8
IE5TVHJhY2tpbmdBY3RpdmVBbHdheXMgb3duZXI6c2VsZiB1c2VySW5mbzpuaWxdOworICAgIFti
YWNrZ3JvdW5kIGFkZFRyYWNraW5nQXJlYTpfYXJlYV07CisgICAgW2JhY2tncm91bmQgcmVsZWFz
ZV07ICAgIAorCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFt3aW5kb3cgY29udGVudFZpZXdd
OworCisgICAgQ0dGbG9hdCBjZW50ZXIgPSBDR0Zsb29yKCh3aW5kb3dXaWR0aCAtIHBsYXlCdXR0
b25XaWR0aCkgLyAyKTsKKyAgICBfcGxheUJ1dHRvbiA9IChOU0J1dHRvbiAqKWNyZWF0ZUNvbnRy
b2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b24s
IE5TTWFrZVJlY3QoY2VudGVyLCB3aW5kb3dIZWlnaHQgLSBwbGF5QnV0dG9uVG9wTWFyZ2luIC0g
cGxheUJ1dHRvbkhlaWdodCwgcGxheUJ1dHRvbldpZHRoLCBwbGF5QnV0dG9uSGVpZ2h0KSk7Cisg
ICAgQVNTRVJUKFtfcGxheUJ1dHRvbiBpc0tpbmRPZkNsYXNzOltOU0J1dHRvbiBjbGFzc11dKTsK
KyAgICBbX3BsYXlCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAgIFtfcGxheUJ1dHRvbiBzZXRB
Y3Rpb246QHNlbGVjdG9yKHRvZ2dsZVBsYXlpbmc6KV07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1
YnZpZXc6X3BsYXlCdXR0b25dOworCisgICAgQ0dGbG9hdCBjbG9zZVRvUmlnaHQgPSB3aW5kb3dX
aWR0aCAtIGhvcml6b250YWxNYXJnaW4gLSBleGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoOworICAg
IE5TQ29udHJvbCAqZXhpdEZ1bGxzY3JlZW5CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlh
VUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6RXhpdEZ1bGxzY3JlZW5CdXR0b24sIE5TTWFr
ZVJlY3QoY2xvc2VUb1JpZ2h0LCB3aW5kb3dIZWlnaHQgLSBleGl0RnVsbHNjcmVlbkJ1dHRvblRv
cE1hcmdpbiAtIGV4aXRGdWxsc2NyZWVuQnV0dG9uSGVpZ2h0LCBleGl0RnVsbHNjcmVlbkJ1dHRv
bldpZHRoLCBleGl0RnVsbHNjcmVlbkJ1dHRvbkhlaWdodCkpOworICAgIFtleGl0RnVsbHNjcmVl
bkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKGV4aXRGdWxsc2NyZWVuOildOworICAgIFtleGl0
RnVsbHNjcmVlbkJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1
YnZpZXc6ZXhpdEZ1bGxzY3JlZW5CdXR0b25dOworICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBy
ZWxlYXNlXTsKKyAgICAKKyAgICBDR0Zsb2F0IHZvbHVtZUNvbnRyb2xzQm90dG9tID0gd2luZG93
SGVpZ2h0IC0gdm9sdW1lQ29udHJvbHNUb3BNYXJnaW4gLSB2b2x1bWVCdXR0b25IZWlnaHQ7Cisg
ICAgQ0dGbG9hdCBsZWZ0ID0gaG9yaXpvbnRhbE1hcmdpbjsKKyAgICBOU0NvbnRyb2wgKnZvbHVt
ZURvd25CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJ
Q29udHJvbDo6Vm9sdW1lRG93bkJ1dHRvbiwgTlNNYWtlUmVjdChsZWZ0LCB2b2x1bWVDb250cm9s
c0JvdHRvbSwgdm9sdW1lQnV0dG9uV2lkdGgsIHZvbHVtZUJ1dHRvbkhlaWdodCkpOworICAgIFtj
b250ZW50VmlldyBhZGRTdWJ2aWV3OnZvbHVtZURvd25CdXR0b25dOworICAgIFt2b2x1bWVEb3du
QnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAgICBbdm9sdW1lRG93bkJ1dHRvbiBzZXRBY3Rpb246
QHNlbGVjdG9yKHNldFZvbHVtZVRvWmVybzopXTsKKyAgICBbdm9sdW1lRG93bkJ1dHRvbiByZWxl
YXNlXTsKKworICAgIGxlZnQgKz0gdm9sdW1lQnV0dG9uV2lkdGg7CisgICAgX3ZvbHVtZVNsaWRl
ciA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9sOjpT
bGlkZXIsIE5TTWFrZVJlY3QobGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20gKyBDR0Zsb29yKCh2
b2x1bWVCdXR0b25IZWlnaHQgLSB2b2x1bWVTbGlkZXJIZWlnaHQpIC8gMiksIHZvbHVtZVNsaWRl
cldpZHRoLCB2b2x1bWVTbGlkZXJIZWlnaHQpKTsKKyAgICBbX3ZvbHVtZVNsaWRlciBzZXRWYWx1
ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpbc2VsZiBtYXhWb2x1bWVdXSBmb3JLZXk6QCJt
YXhWYWx1ZSJdOworICAgIFtfdm9sdW1lU2xpZGVyIHNldFRhcmdldDpzZWxmXTsKKyAgICBbX3Zv
bHVtZVNsaWRlciBzZXRBY3Rpb246QHNlbGVjdG9yKHZvbHVtZUNoYW5nZWQ6KV07CisgICAgW2Nv
bnRlbnRWaWV3IGFkZFN1YnZpZXc6X3ZvbHVtZVNsaWRlcl07CisKKyAgICBsZWZ0ICs9IHZvbHVt
ZVNsaWRlcldpZHRoICsgdm9sdW1lVXBCdXR0b25MZWZ0TWFyZ2luOworICAgIE5TQ29udHJvbCAq
dm9sdW1lVXBCdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRp
YVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0b24sIE5TTWFrZVJlY3QobGVmdCwgdm9sdW1lQ29udHJv
bHNCb3R0b20sIHZvbHVtZUJ1dHRvbldpZHRoLCB2b2x1bWVCdXR0b25IZWlnaHQpKTsKKyAgICBb
dm9sdW1lVXBCdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAgIFt2b2x1bWVVcEJ1dHRvbiBzZXRB
Y3Rpb246QHNlbGVjdG9yKHNldFZvbHVtZVRvTWF4aW11bTopXTsKKyAgICBbY29udGVudFZpZXcg
YWRkU3Vidmlldzp2b2x1bWVVcEJ1dHRvbl07CisgICAgW3ZvbHVtZVVwQnV0dG9uIHJlbGVhc2Vd
OworCisgICAgX3RpbWVsaW5lID0gY3JlYXRlTWVkaWFVSUNvbnRyb2woTWVkaWFVSUNvbnRyb2w6
OlRpbWVsaW5lKTsKKworICAgIFtfdGltZWxpbmUgc2V0VGFyZ2V0OnNlbGZdOworICAgIFtfdGlt
ZWxpbmUgc2V0QWN0aW9uOkBzZWxlY3Rvcih0aW1lbGluZVBvc2l0aW9uQ2hhbmdlZDopXTsKKyAg
ICBbX3RpbWVsaW5lIHNldEZyYW1lOk5TTWFrZVJlY3QoQ0dGbG9vcigod2luZG93V2lkdGggLSB0
aW1lbGluZVdpZHRoKSAvIDIpLCB0aW1lbGluZUJvdHRvbU1hcmdpbiwgdGltZWxpbmVXaWR0aCwg
dGltZWxpbmVIZWlnaHQpXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfdGltZWxpbmVd
OworCisgICAgX2VsYXBzZWRUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVj
dCh0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiwgdGltZWxpbmVCb3R0b21NYXJnaW4sIHRp
bWVUZXh0RmllbGRXaWR0aCwgdGltZVRleHRGaWVsZEhlaWdodCkpOworICAgIFtfZWxhcHNlZFRp
bWVUZXh0IHNldEFsaWdubWVudDpOU1RleHRBbGlnbm1lbnRMZWZ0XTsKKyAgICBbY29udGVudFZp
ZXcgYWRkU3VidmlldzpfZWxhcHNlZFRpbWVUZXh0XTsKKworICAgIF9yZW1haW5pbmdUaW1lVGV4
dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdCh3aW5kb3dXaWR0aCAtIHRpbWVUZXh0
RmllbGRIb3Jpem9udGFsTWFyZ2luIC0gdGltZVRleHRGaWVsZFdpZHRoLCB0aW1lbGluZUJvdHRv
bU1hcmdpbiwgdGltZVRleHRGaWVsZFdpZHRoLCB0aW1lVGV4dEZpZWxkSGVpZ2h0KSk7CisgICAg
W19yZW1haW5pbmdUaW1lVGV4dCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50UmlnaHRdOwor
ICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9yZW1haW5pbmdUaW1lVGV4dF07CisKKyAgICBb
d2luZG93IHJlY2FsY3VsYXRlS2V5Vmlld0xvb3BdOworICAgIFt3aW5kb3cgc2V0SW5pdGlhbEZp
cnN0UmVzcG9uZGVyOl9wbGF5QnV0dG9uXTsKKyAgICBbd2luZG93IGNlbnRlcl07Cit9CisKKy0g
KHZvaWQpdXBkYXRlVm9sdW1lCit7CisgICAgW192b2x1bWVTbGlkZXIgc2V0RmxvYXRWYWx1ZTpb
c2VsZiB2b2x1bWVdXTsKK30KKworLSAodm9pZCl1cGRhdGVUaW1lCit7CisgICAgW3NlbGYgdXBk
YXRlVm9sdW1lXTsKKworICAgIFtfdGltZWxpbmUgc2V0RmxvYXRWYWx1ZTpbc2VsZiBjdXJyZW50
VGltZV1dOworICAgIFtfdGltZWxpbmUgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhEb3Vi
bGU6W3NlbGYgZHVyYXRpb25dXSBmb3JLZXk6QCJtYXhWYWx1ZSJdOworCisgICAgW19yZW1haW5p
bmdUaW1lVGV4dCBzZXRTdHJpbmdWYWx1ZTpbc2VsZiByZW1haW5pbmdUaW1lVGV4dF1dOworICAg
IFtfZWxhcHNlZFRpbWVUZXh0IHNldFN0cmluZ1ZhbHVlOltzZWxmIGVsYXBzZWRUaW1lVGV4dF1d
OworfQorCistICh2b2lkKWVuZFNjcnViYmluZworeworICAgIEFTU0VSVChfaXNTY3J1YmJpbmcp
OworICAgIF9pc1NjcnViYmluZyA9IE5POworICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRl
b0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHZpZGVvRWxlbWVu
dC0+ZW5kU2NydWJiaW5nKCk7Cit9CisKKy0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6
KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworICAgIFtzZWxmIHNldEN1
cnJlbnRUaW1lOltfdGltZWxpbmUgZmxvYXRWYWx1ZV1dOworICAgIGlmICghX2lzU2NydWJiaW5n
KSB7CisgICAgICAgIF9pc1NjcnViYmluZyA9IFlFUzsKKyAgICAgICAgaWYgKEhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvRWxlbWVudCA9IFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAg
ICAgIHZpZGVvRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKKyAgICAgICAgc3RhdGljIE5TQXJy
YXkgKmVuZFNjcnViYmluZ01vZGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6
TlNEZWZhdWx0UnVuTG9vcE1vZGUsIE5TTW9kYWxQYW5lbFJ1bkxvb3BNb2RlLCBuaWxdOworICAg
ICAgICAvLyBTY2hlZHVsZSAtZW5kU2NydWJiaW5nIGZvciB3aGVuIGxlYXZpbmcgbW91c2UgdHJh
Y2tpbmcgbW9kZS4KKyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHBlcmZvcm1T
ZWxlY3RvcjpAc2VsZWN0b3IoZW5kU2NydWJiaW5nKSB0YXJnZXQ6c2VsZiBhcmd1bWVudDpuaWwg
b3JkZXI6MCBtb2RlczplbmRTY3J1YmJpbmdNb2Rlc107CisgICAgfQorfQorCistIChmbG9hdClj
dXJyZW50VGltZQoreworICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2Rl
bGVnYXRlIHZpZGVvRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkgOiAwOworfQorCistICh2b2lkKXNl
dEN1cnJlbnRUaW1lOihmbG9hdCljdXJyZW50VGltZQoreworICAgIGlmICghW19kZWxlZ2F0ZSB2
aWRlb0VsZW1lbnRdKQorICAgICAgICByZXR1cm47CisgICAgW19kZWxlZ2F0ZSB2aWRlb0VsZW1l
bnRdLT5zZXRDdXJyZW50VGltZShjdXJyZW50VGltZSk7CisgICAgW3NlbGYgdXBkYXRlVGltZV07
Cit9CisKKy0gKGRvdWJsZSlkdXJhdGlvbgoreworICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmR1cmF0aW9uKCkgOiAwOworfQor
CistIChmbG9hdCltYXhWb2x1bWUKK3sKKyAgICAvLyBTZXQgdGhlIHZvbHVtZSBzbGlkZXIgcmVz
b2x1dGlvbgorICAgIHJldHVybiAxMDA7Cit9CisKKy0gKHZvaWQpdm9sdW1lQ2hhbmdlZDooaWQp
c2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgW3NlbGYgc2V0Vm9sdW1l
Oltfdm9sdW1lU2xpZGVyIGZsb2F0VmFsdWVdXTsKK30KKworLSAodm9pZClzZXRWb2x1bWVUb1pl
cm86KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworICAgIFtzZWxmIHNl
dFZvbHVtZTowXTsKK30KKworLSAodm9pZClzZXRWb2x1bWVUb01heGltdW06KGlkKXNlbmRlcgor
eworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBt
YXhWb2x1bWVdXTsKK30KKworLSAodm9pZClkZWNyZW1lbnRWb2x1bWUKK3sKKyAgICBpZiAoIVtf
ZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgdm9s
dW1lID0gW3NlbGYgdm9sdW1lXSAtIDEwOworICAgIFtzZWxmIHNldFZvbHVtZTpNQVgodm9sdW1l
LCAwKV07Cit9CisKKy0gKHZvaWQpaW5jcmVtZW50Vm9sdW1lCit7CisgICAgaWYgKCFbX2RlbGVn
YXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHZvbHVtZSA9
IFtzZWxmIHZvbHVtZV0gKyAxMDsKKyAgICBbc2VsZiBzZXRWb2x1bWU6c3RkOjptaW4odm9sdW1l
LCBbc2VsZiBtYXhWb2x1bWVdKV07Cit9CisKKy0gKGZsb2F0KXZvbHVtZQoreworICAgIHJldHVy
biBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnZv
bHVtZSgpICogW3NlbGYgbWF4Vm9sdW1lXSA6IDA7Cit9CisKKy0gKHZvaWQpc2V0Vm9sdW1lOihm
bG9hdCl2b2x1bWUKK3sKKyAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPm11dGVkKCkpCisg
ICAgICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+c2V0TXV0ZWQoZmFsc2UpOworICAgIFtf
ZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+c2V0Vm9sdW1lKHZvbHVtZSAvIFtzZWxmIG1heFZvbHVt
ZV0pOworICAgIFtzZWxmIHVwZGF0ZVZvbHVtZV07Cit9CisKKy0gKHZvaWQpdXBkYXRlUGxheUJ1
dHRvbgoreworICAgIFtfcGxheUJ1dHRvbiBzZXRJbnRWYWx1ZTpbc2VsZiBwbGF5aW5nXV07Cit9
CisKKy0gKHZvaWQpdXBkYXRlUmF0ZQoreworICAgIEJPT0wgcGxheWluZyA9IFtzZWxmIHBsYXlp
bmddOworCisgICAgLy8gS2VlcCB0aGUgSFVEIHZpc2libGUgd2hlbiBwYXVzZWQuCisgICAgaWYg
KCFwbGF5aW5nKQorICAgICAgICBbc2VsZiBmYWRlV2luZG93SW5dOworICAgIGVsc2UgaWYgKCFf
bW91c2VJc0luSFVEKSB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkg
b2JqZWN0Om5pbF07CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFk
ZVdpbmRvd091dCkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVs
YXldOworICAgIH0KKyAgICBbc2VsZiB1cGRhdGVQbGF5QnV0dG9uXTsKK30KKworLSAodm9pZCl0
b2dnbGVQbGF5aW5nOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAg
ICBbc2VsZiBzZXRQbGF5aW5nOiFbc2VsZiBwbGF5aW5nXV07Cit9CisKKy0gKEJPT0wpcGxheWlu
ZworeworICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IFtfZGVsZWdhdGUgdmlk
ZW9FbGVtZW50XTsKKyAgICBpZiAoIXZpZGVvRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIE5POwor
CisgICAgcmV0dXJuICF2aWRlb0VsZW1lbnQtPmNhblBsYXkoKTsKK30KKworLSAodm9pZClzZXRQ
bGF5aW5nOihCT09MKXBsYXlpbmcKK3sKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1l
bnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07CisKKyAgICBpZiAoIXZpZGVvRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBsYXlpbmcpCisgICAgICAgIHZpZGVvRWxlbWVu
dC0+cGxheSgpOworICAgIGVsc2UKKyAgICAgICAgdmlkZW9FbGVtZW50LT5wYXVzZSgpOworfQor
CitzdGF0aWMgTlNTdHJpbmcgKnRpbWVUb1N0cmluZyhkb3VibGUgdGltZSkKK3sKKyAgICBBU1NF
UlRfQVJHKHRpbWUsIHRpbWUgPj0gMCk7CisKKyAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodGltZSkp
CisgICAgICAgIHRpbWUgPSAwOworCisgICAgaW50IHNlY29uZHMgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHN0ZDo6YWJzKHRpbWUpKTsKKyAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICog
NjApOworICAgIGludCBtaW51dGVzID0gKHNlY29uZHMgLyA2MCkgJSA2MDsKKyAgICBzZWNvbmRz
ICU9IDYwOworCisgICAgaWYgKGhvdXJzKQorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlZDolMDJkOiUwMmQiLCBob3VycywgbWludXRlcywgc2Vjb25kc107CisK
KyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlMDJkOiUwMmQiLCBtaW51
dGVzLCBzZWNvbmRzXTsgICAgCit9CisKKy0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQK
K3sKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF07CisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybiBAIiI7CisK
KyAgICBkb3VibGUgcmVtYWluaW5nVGltZSA9IDA7CisKKyAgICBpZiAoc3RkOjppc2Zpbml0ZSh2
aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkpICYmIHN0ZDo6aXNmaW5pdGUodmlkZW9FbGVtZW50LT5j
dXJyZW50VGltZSgpKSkKKyAgICAgICAgcmVtYWluaW5nVGltZSA9IHZpZGVvRWxlbWVudC0+ZHVy
YXRpb24oKSAtIHZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKTsKKworICAgIHJldHVybiBbQCIt
IiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0aW1lVG9TdHJpbmcocmVtYWluaW5nVGltZSldOwor
fQorCistIChOU1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dAoreworICAgIGlmICghW19kZWxlZ2F0
ZSB2aWRlb0VsZW1lbnRdKQorICAgICAgICByZXR1cm4gQCIiOworCisgICAgcmV0dXJuIHRpbWVU
b1N0cmluZyhbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmN1cnJlbnRUaW1lKCkpOworfQorCisv
LyBNQVJLOiBOU1Jlc3BvbmRlcgorCistICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKXRo
ZUV2ZW50Cit7CisgICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50KTsKKyAgICAvLyBNYWtlIHN1cmUg
dGhlIEhVRCB3b24ndCBiZSBoaWRkZW4gZnJvbSBub3cKKyAgICBfbW91c2VJc0luSFVEID0gWUVT
OworICAgIFtzZWxmIGZhZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5T
RXZlbnQgKil0aGVFdmVudAoreworICAgIFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7CisgICAgX21v
dXNlSXNJbkhVRCA9IE5POworICAgIFtzZWxmIGZhZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQp
cmV3aW5kOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBpZiAo
IVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFtfZGVsZWdh
dGUgdmlkZW9FbGVtZW50XS0+cmV3aW5kKDMwKTsKK30KKworLSAodm9pZClmYXN0Rm9yd2FyZDoo
aWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgaWYgKCFbX2RlbGVn
YXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKK30KKworLSAodm9pZClleGl0RnVs
bHNjcmVlbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7CisgICAgaWYg
KF9pc0VuZGluZ0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBfaXNFbmRpbmdGdWxs
c2NyZWVuID0gWUVTOworICAgIFtfZGVsZWdhdGUgcmVxdWVzdEV4aXRGdWxsc2NyZWVuXTsgCit9
CisKKy8vIE1BUks6IE5TV2luZG93RGVsZWdhdGUKKworLSAodm9pZCl3aW5kb3dEaWRFeHBvc2U6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKG5vdGlm
aWNhdGlvbik7CisgICAgW3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKK30KKworLSAodm9pZCl3
aW5kb3dEaWRDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBVTlVT
RURfUEFSQU0obm90aWZpY2F0aW9uKTsKKyAgICBbc2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07
Cit9CisKK0BlbmQKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyLDEyICsyMiwxMSBAQAogICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLmgiCisjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShNQUMpCiAKLSNpZiBF
TkFCTEUoVklERU8pCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9s
bGVyLmgiCiAKLSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgorI2ltcG9ydCA8V2ViQ29yZS9G
bG9hdENvbnZlcnNpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgog
I2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkv
bWFjL1FUS2l0U1BJLmg+CkBAIC0yMDMsMjMgKzIwMiwyMyBAQCAtICh2b2lkKWtleURvd246KE5T
RXZlbnQgKilldmVudAogICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMg
PSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKICAgICBpZiAoW2NoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEpIHsKICAgICAgICAgc3dpdGNoIChbY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKLSAgICAgICAg
ICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBsYXlpbmc6bmlsXTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIE5TVXBBcnJvd0Z1bmN0
aW9uS2V5OgotICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2
ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRWb2x1
bWU6W3NlbGYgbWF4Vm9sdW1lXV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBbc2VsZiBpbmNyZW1lbnRWb2x1bWVdOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAgICAg
ICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlvbikK
LSAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0Vm9sdW1lOjBdOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGVjcmVtZW50Vm9sdW1lXTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICcgJzoKKyAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBsYXlp
bmc6bmlsXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBOU1VwQXJyb3dGdW5j
dGlvbktleToKKyAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50
TW9kaWZpZXJGbGFnT3B0aW9uKQorICAgICAgICAgICAgICAgIFtzZWxmIHNldFZvbHVtZTpbc2Vs
ZiBtYXhWb2x1bWVdXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbc2VsZiBp
bmNyZW1lbnRWb2x1bWVdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE5TRG93
bkFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3Nd
ICYgTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlvbikKKyAgICAgICAgICAgICAgICBbc2VsZiBzZXRW
b2x1bWU6MF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3NlbGYgZGVjcmVt
ZW50Vm9sdW1lXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNzIsNyArMjcxLDcgQEAgLSAo
dm9pZClmYWRlV2luZG93SW4KICAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwogCiAgICAg
W05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNl
bGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAoIV9t
b3VzZUlzSW5IVUQgJiYgW3NlbGYgcGxheWluZ10pICAgLy8gRG9uJ3QgZmFkZSBvdXQgd2hlbiBw
YXVzZWQuCisgICAgaWYgKCFfbW91c2VJc0luSFVEICYmIFtzZWxmIHBsYXlpbmddKSAvLyBEb24n
dCBmYWRlIG91dCB3aGVuIHBhdXNlZC4KICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBz
ZWxlY3RvcihmYWRlV2luZG93T3V0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OkhVRFdpbmRv
d0ZhZGVPdXREZWxheV07CiB9CiAKQEAgLTU2NCw3ICs1NjMsNyBAQCAtICh2b2lkKWRlY3JlbWVu
dFZvbHVtZQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCB2b2x1bWUgPSBbc2VsZiB2b2x1
bWVdIC0gMTA7Ci0gICAgW3NlbGYgc2V0Vm9sdW1lOk1BWCh2b2x1bWUsIDApXTsKKyAgICBbc2Vs
ZiBzZXRWb2x1bWU6c3RkOjptYXgodm9sdW1lLCAwLjBmKV07CiB9CiAKIC0gKHZvaWQpaW5jcmVt
ZW50Vm9sdW1lCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0NCw5ICsyNDQsOSBAQAogI2ltcG9ydCAi
V2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOU1ByaW50T3BlcmF0aW9uRXh0
cmFzLmgiCiAjaW1wb3J0ICJXZWJQREZWaWV3LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNpbXBv
cnQgPFdlYkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0FWS2l0
U1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KICNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRp
b24uaAkocmV2aXNpb24gMjI4Mjc4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViV2luZG93QW5pbWF0aW9uLmg6MjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPENvY29hL0NvY29hLmg+CisKK1dFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViV2luZG93
U2NhbGVBbmltYXRpb24gOiBOU0FuaW1hdGlvbiB7CitAcHJpdmF0ZQorICAgIE5TUmVjdCBfaW5p
dGlhbEZyYW1lLCBfZmluYWxGcmFtZSwgX3JlYWxGcmFtZTsKKyAgICBOU1dpbmRvdyAqX3dpbmRv
dzsgLy8gKGFzc2lnbikKKyAgICBOU0FuaW1hdGlvbiAqX3N1YkFuaW1hdGlvbjsgLy8gKHJldGFp
bikKKyAgICBOU1RpbWVJbnRlcnZhbCBfaGludGVkRHVyYXRpb247Cit9CistIChpZClpbml0V2l0
aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2luZG93
ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KE5T
UmVjdClmaW5hbEZyYW1lOworCistICh2b2lkKXNldFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24g
KilhbmltYXRpb247CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWU7CisKKy8vIEJlIHN1cmUgdG8g
Y2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVuIGFw
cHJvcHJpYXRlCistICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7CitAZW5kCisK
KworV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIDogTlNB
bmltYXRpb24geworQHByaXZhdGUKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGEsIF9maW5hbEFs
cGhhOworICAgIE5TV2luZG93ICpfd2luZG93OyAvLyAoYXNzaWduKQorICAgIEJPT0wgX2lzU3Rv
cHBlZDsKKyAgICAKK30KKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0KWlu
aXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGE7CisKKy0gKENHRmxvYXQp
Y3VycmVudEFscGhhOworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93Om5pbCB0byBjbGVh
ciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQorLSAodm9pZClzZXRXaW5k
b3c6KE5TV2luZG93ICopd2luZG93OworQGVuZAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
V2luZG93QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCShyZXZpc2lvbiAyMjgyNzgpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW06MjI4Mjc4KQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2ltcG9y
dCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCisKKyNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgor
I2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNsb3dNb3Rpb25GYWN0b3IgPSAxMDsKKworc3Rh
dGljIE5TVGltZUludGVydmFsIFdlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0aW9u
KE5TVGltZUludGVydmFsIGR1cmF0aW9uKQoreworICAgIHJldHVybiAoW1tOU0FwcCBjdXJyZW50
RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ1NoaWZ0KSA/IGR1cmF0
aW9uICogc2xvd01vdGlvbkZhY3RvciA6IGR1cmF0aW9uOworfQorCitzdGF0aWMgTlNSZWN0IHNj
YWxlZFJlY3QoTlNSZWN0IF9pbml0aWFsRnJhbWUsIE5TUmVjdCBfZmluYWxGcmFtZSwgQ0dGbG9h
dCBmYWN0b3IpCit7CisgICAgTlNSZWN0IGN1cnJlbnRSZWN0ID0gX2luaXRpYWxGcmFtZTsKKyAg
ICBjdXJyZW50UmVjdC5vcmlnaW4ueCArPSAoTlNNaW5YKF9maW5hbEZyYW1lKSAtIE5TTWluWChf
aW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgY3VycmVudFJlY3Qub3JpZ2luLnkgKz0gKE5T
TWluWShfZmluYWxGcmFtZSkgLSBOU01pblkoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOworICAg
IGN1cnJlbnRSZWN0LnNpemUud2lkdGggKz0gKE5TV2lkdGgoX2ZpbmFsRnJhbWUpIC0gTlNXaWR0
aChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgY3VycmVudFJlY3Quc2l6ZS5oZWlnaHQg
Kz0gKE5TSGVpZ2h0KF9maW5hbEZyYW1lKSAtIE5TSGVpZ2h0KF9pbml0aWFsRnJhbWUpKSAqIGZh
Y3RvcjsKKyAgICByZXR1cm4gY3VycmVudFJlY3Q7Cit9CisKK3N0YXRpYyBDR0Zsb2F0IHNxdWFy
ZWREaXN0YW5jZShOU1BvaW50IHBvaW50MSwgTlNQb2ludCBwb2ludDIpCit7CisgICAgQ0dGbG9h
dCBkZWx0YVggPSBwb2ludDEueCAtIHBvaW50Mi54OworICAgIENHRmxvYXQgZGVsdGFZID0gcG9p
bnQxLnkgLSBwb2ludDIueTsKKyAgICByZXR1cm4gZGVsdGFYICogZGVsdGFYICsgZGVsdGFZICog
ZGVsdGFZOworfQorCit9CisKK3VzaW5nIFdlYkNvcmU6OldlYldpbmRvd0FuaW1hdGlvbkR1cmF0
aW9uRnJvbUR1cmF0aW9uOwordXNpbmcgV2ViQ29yZTo6bmFycm93UHJlY2lzaW9uVG9GbG9hdDsK
K3VzaW5nIFdlYkNvcmU6OnNjYWxlZFJlY3Q7Cit1c2luZyBXZWJDb3JlOjpzcXVhcmVkRGlzdGFu
Y2U7CitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93U2NhbGVBbmltYXRpb24KKworLSAoaWQpaW5p
dAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlv
bk5vbmJsb2NraW5nVGhyZWFkZWRdOworICAgIFtzZWxmIHNldEZyYW1lUmF0ZTo2MF07CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoSGludGVkRHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGFsRnJhbWU6KE5T
UmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooTlNSZWN0KWZpbmFsRnJhbWUKK3sKKyAgICBz
ZWxmID0gW3NlbGYgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIF9oaW50ZWREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIF93aW5kb3cgPSB3aW5kb3c7Cisg
ICAgX2luaXRpYWxGcmFtZSA9IGluaXRpYWxGcmFtZTsKKyAgICBfZmluYWxGcmFtZSA9IGZpbmFs
RnJhbWU7CisgICAgX3JlYWxGcmFtZSA9IFt3aW5kb3cgZnJhbWVdOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKSBkZWFsbG9jCit7CisgICAgW19zdWJBbmltYXRpb24gcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJ
bnRlcnZhbClkdXJhdGlvbgoreworICAgIFtzdXBlciBzZXREdXJhdGlvbjpXZWJXaW5kb3dBbmlt
YXRpb25EdXJhdGlvbkZyb21EdXJhdGlvbihkdXJhdGlvbildOworfQorCistICh2b2lkKXNldFdp
bmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2luZG93OworfQorCist
IChmbG9hdCljdXJyZW50VmFsdWUKK3sKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjUgLSAwLjUgKiBjb3MocGlEb3VibGUgKiAoMSAtIFtzZWxmIGN1cnJlbnRQcm9ncmVzc10p
KSk7Cit9CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWUKK3sKKyAgICByZXR1cm4gc2NhbGVkUmVj
dChfZmluYWxGcmFtZSwgX2luaXRpYWxGcmFtZSwgW3NlbGYgY3VycmVudFZhbHVlXSk7Cit9CisK
K3N0YXRpYyB2b2lkIGZsaXBSZWN0KE5TUmVjdCogcmVjdCkKK3sKKyAgICByZWN0LT5vcmlnaW4u
eSA9IE5TTWF4WShbKE5TU2NyZWVuICopW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4
OjBdIGZyYW1lXSkgLSBOU01heFkoKnJlY3QpOworfQorCitzdGF0aWMgQ0dTQ29ubmVjdGlvbklE
IG1haW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKQoreworICAgIHN0YXRpYyBDR1NDb25uZWN0
aW9uSUQgY2dzSWQ7CisgICAgaWYgKCFjZ3NJZCkKKyAgICAgICAgY2dzSWQgPSBDR1NNYWluQ29u
bmVjdGlvbklEKCk7CisgICAgcmV0dXJuIGNnc0lkOworfQorCitzdGF0aWMgdm9pZCBzZXRTY2Fs
ZWRGcmFtZUZvcldpbmRvdyhOU1dpbmRvdyAqd2luZG93LCBOU1JlY3Qgc2NhbGVGcmFtZSwgTlNS
ZWN0IG5vblNjYWxlZEZyYW1lKQoreworICAgIGlmIChOU0VxdWFsUmVjdHMoc2NhbGVGcmFtZSwg
bm9uU2NhbGVkRnJhbWUpKSB7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xbm9ubnVsbCIKKyAgICAgICAgQ0dTU2V0V2lu
ZG93V2FycChtYWluV2luZG93U2VydmVyQ29ubmVjdGlvbklEKCksIHdpbmRvdy53aW5kb3dOdW1i
ZXIsIDAsIDAsIG51bGxwdHIpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZsb2F0IG1lc2hbMTZdOworICAgIAorICAgIGZs
aXBSZWN0KCZzY2FsZUZyYW1lKTsKKyAgICBmbGlwUmVjdCgmbm9uU2NhbGVkRnJhbWUpOworICAg
IAorICAgIC8vIHRvcC1sZWZ0IHBvaW50ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzBdID0gMDsK
KyAgICBtZXNoWzFdID0gMDsKKyAgICBtZXNoWzJdID0gTlNNaW5YKHNjYWxlRnJhbWUpOworICAg
IG1lc2hbM10gPSBOU01pblkoc2NhbGVGcmFtZSk7CisgICAgCisgICAgLy8gdG9wLXJpZ2h0IHBv
aW50ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzRdID0gTlNXaWR0aChub25TY2FsZWRGcmFtZSk7
CisgICAgbWVzaFs1XSA9IDA7CisgICAgbWVzaFs2XSA9IE5TTWF4WChzY2FsZUZyYW1lKTsKKyAg
ICBtZXNoWzddID0gTlNNaW5ZKHNjYWxlRnJhbWUpOworICAgIAorICAgIC8vIGJvdHRvbS1sZWZ0
ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzhdID0gMDsKKyAgICBtZXNoWzldID0gTlNIZWlnaHQo
bm9uU2NhbGVkRnJhbWUpOworICAgIG1lc2hbMTBdID0gTlNNaW5YKHNjYWxlRnJhbWUpOworICAg
IG1lc2hbMTFdID0gTlNNYXhZKHNjYWxlRnJhbWUpOworICAgIAorICAgIC8vIGJvdHRvbS1yaWdo
dCAodG8gYW5kIGZyb20pCisgICAgbWVzaFsxMl0gPSBOU1dpZHRoKG5vblNjYWxlZEZyYW1lKTsK
KyAgICBtZXNoWzEzXSA9IE5TSGVpZ2h0KG5vblNjYWxlZEZyYW1lKTsKKyAgICBtZXNoWzE0XSA9
IE5TTWF4WChzY2FsZUZyYW1lKTsKKyAgICBtZXNoWzE1XSA9IE5TTWF4WShzY2FsZUZyYW1lKTsK
KyAgICAKKyAgICAvLyBBcHBseSB0aGUgd2FycC4KKyAgICBDR1NTZXRXaW5kb3dXYXJwKG1haW5X
aW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKSwgd2luZG93LndpbmRvd051bWJlciwgMiwgMiwgbWVz
aCk7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNz
KXByb2dyZXNzCit7CisgICAgaWYgKCFfd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBb
c3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAgIE5TUmVjdCBjdXJyZW50
UmVjdCA9IFtzZWxmIGN1cnJlbnRGcmFtZV07CisgICAgc2V0U2NhbGVkRnJhbWVGb3JXaW5kb3co
X3dpbmRvdywgY3VycmVudFJlY3QsIF9yZWFsRnJhbWUpOworICAgIFtfc3ViQW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107Cit9CisKKy0gKHZvaWQpc2V0U3ViQW5pbWF0aW9u
OihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgoreworICAgIGlkIG9sZEFuaW1hdGlvbiA9IF9zdWJB
bmltYXRpb247CisgICAgX3N1YkFuaW1hdGlvbiA9IFthbmltYXRpb24gcmV0YWluXTsKKyAgICBb
b2xkQW5pbWF0aW9uIHJlbGVhc2VdOworfQorCistIChOU1RpbWVJbnRlcnZhbClhZGRpdGlvbmFs
RHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZQoreworICAgIHN0YXRpYyBjb25zdCBDR0Zs
b2F0IG1heEFkZGl0aW9uYWxEdXJhdGlvbiA9IDE7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQg
c3BlZWRGYWN0b3IgPSAwLjAwMDFmOworICAgIAorICAgIENHRmxvYXQgbWF4RGlzdCA9IHNxdWFy
ZWREaXN0YW5jZShfaW5pdGlhbEZyYW1lLm9yaWdpbiwgX2ZpbmFsRnJhbWUub3JpZ2luKTsKKyAg
ICBDR0Zsb2F0IGRpc3Q7CisgICAgCisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShOU01ha2VQ
b2ludChOU01heFgoX2luaXRpYWxGcmFtZSksIE5TTWluWShfaW5pdGlhbEZyYW1lKSksIE5TTWFr
ZVBvaW50KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWluWShfZmluYWxGcmFtZSkpKTsKKyAgICBp
ZiAoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAgIGRp
c3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUpLCBO
U01heFkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUpLCBO
U01heFkoX2ZpbmFsRnJhbWUpKSk7CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQorICAgICAgICBt
YXhEaXN0ID0gZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBv
aW50KE5TTWluWChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtl
UG9pbnQoTlNNaW5YKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOworICAgIGlm
IChkaXN0ID4gbWF4RGlzdCkKKyAgICAgICAgbWF4RGlzdCA9IGRpc3Q7CisgICAgCisgICAgcmV0
dXJuIE1JTihzcXJ0KG1heERpc3QpICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlv
bik7ICAgIAorfQorCistICh2b2lkKXN0YXJ0QW5pbWF0aW9uCit7CisgICAgLy8gQ29tcHV0ZSBl
eHRyYSB0aW1lCisgICAgaWYgKF9oaW50ZWREdXJhdGlvbikKKyAgICAgICAgW3NlbGYgc2V0RHVy
YXRpb246X2hpbnRlZER1cmF0aW9uICsgW3NlbGYgYWRkaXRpb25hbER1cmF0aW9uTmVlZGVkVG9S
ZWFjaEZpbmFsRnJhbWVdXTsKKyAgICBbc3VwZXIgc3RhcnRBbmltYXRpb25dOworfQorCistICh2
b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICBfd2luZG93ID0gbmlsOworICAgIFtzdXBlciBzdG9w
QW5pbWF0aW9uXTsKKyAgICBbX3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKK30KKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93RmFkZUFuaW1hdGlvbgorCistIChpZClpbml0
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5TQW5pbWF0aW9u
Tm9uYmxvY2tpbmdUaHJlYWRlZF07CisgICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwXTsKKyAgICBb
c2VsZiBzZXRBbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0
aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0KWluaXRp
YWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGEKK3sKKyAgICBzZWxmID0gW3Nl
bGYgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOyAgICAKKyAgICBf
d2luZG93ID0gd2luZG93OworICAgIF9pbml0aWFsQWxwaGEgPSBpbml0aWFsQWxwaGE7CisgICAg
X2ZpbmFsQWxwaGEgPSBmaW5hbEFscGhhOworICAgIFtzZWxmIHNldER1cmF0aW9uOmR1cmF0aW9u
XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXREdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBbc3VwZXIgc2V0RHVyYXRpb246V2ViV2luZG93QW5pbWF0
aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oZHVyYXRpb24pXTsKK30KKworLSAoQ0dGbG9hdCljdXJy
ZW50QWxwaGEKK3sKKyAgICByZXR1cm4gTUFYKDAsIE1JTigxLCBfaW5pdGlhbEFscGhhICsgW3Nl
bGYgY3VycmVudFZhbHVlXSAqIChfZmluYWxBbHBoYSAtIF9pbml0aWFsQWxwaGEpKSk7Cit9CisK
Ky0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNz
Cit7CisgICAgaWYgKF9pc1N0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChf
d2luZG93KTsKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAg
IENHU1NldFdpbmRvd0FscGhhKG1haW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKSwgX3dpbmRv
dy53aW5kb3dOdW1iZXIsIHNlbGYuY3VycmVudEFscGhhKTsKK30KKworLSAodm9pZClzZXRXaW5k
b3c6KE5TV2luZG93Kil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2luZG93OworfQorCistICh2
b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHdoZW4gd2UgYXJl
IGEgc3ViIGFuaW1hdGlvbiBvZiBhIHNjYWxlIGFuaW1hdGlvbi4KKyAgICAvLyBJbiB0aGlzIGNh
c2Ugd2UgYXJlIGhvc3RlZCBpbiB0aGUgYW5pbWF0ZWQgdGhyZWFkIG9mIHRoZSBwYXJlbnQKKyAg
ICAvLyBhbmQgZXZlbiBhZnRlciBbc3VwZXIgc3RvcEFuaW1hdGlvbl0sIHRoZSBwYXJlbnQgbWln
aHQgY2FsbAorICAgIC8vIHNldEN1cnJyZW50UHJvZ3Jlc3MuCisgICAgX2lzU3RvcHBlZCA9IFlF
UzsKKworICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKK30KKworQGVuZAorCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0aW9u
Lm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZl
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCShyZXZpc2lv
biAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYldpbmRvd0Fu
aW1hdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDExIEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaW1wb3J0ICJjb25maWcuaCIKKyNpZiBQTEFURk9STShNQUMpCiAKICNp
bXBvcnQgIldlYldpbmRvd0FuaW1hdGlvbi5oIgogCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24u
aCIKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRDb252ZXJzaW9uLmg+CiAjaW1wb3J0IDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBv
cnQgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0yMTAsNyArMjEwLDcgQEAgLSAoTlNUaW1lSW50ZXJ2
YWwpYWRkaXRpb25hbER1cmF0aW9uTmVlZAogICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKICAgICAg
ICAgbWF4RGlzdCA9IGRpc3Q7CiAgICAgCi0gICAgcmV0dXJuIE1JTihzcXJ0KG1heERpc3QpICog
c3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlvbik7ICAgIAorICAgIHJldHVybiBzdGQ6
Om1pbihzcXJ0KG1heERpc3QpICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlvbik7
CiB9CiAKIC0gKHZvaWQpc3RhcnRBbmltYXRpb24KQEAgLTI2Miw3ICsyNjIsNyBAQCAtICh2b2lk
KXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhCiAKIC0gKENHRmxvYXQpY3VycmVudEFs
cGhhCiB7Ci0gICAgcmV0dXJuIE1BWCgwLCBNSU4oMSwgX2luaXRpYWxBbHBoYSArIFtzZWxmIGN1
cnJlbnRWYWx1ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5pdGlhbEFscGhhKSkpOworICAgIHJldHVy
biBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDEuMCwgX2luaXRpYWxBbHBoYSArIFtzZWxmIGN1cnJl
bnRWYWx1ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5pdGlhbEFscGhhKSkpOwogfQogCiAtICh2b2lk
KXNldEN1cnJlbnRQcm9ncmVzczooTlNBbmltYXRpb25Qcm9ncmVzcylwcm9ncmVzcwpAQCAtMjk0
LDMgKzI5NCw0IEBAIC0gKHZvaWQpc3RvcEFuaW1hdGlvbgogCiBAZW5kCiAKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333425</attachid>
            <date>2018-02-08 14:37:29 -0800</date>
            <delta_ts>2018-02-08 14:48:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182615-20180208143728.patch</filename>
            <type>text/plain</type>
            <size>155854</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE4LTAyLTA4ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgZnJvbSBXZWJDb3JlIHRvIFdlYktpdExlZ2FjeS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjYxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IGlzIG9ubHkgdXNlZCBi
eSBXSzEuIEFsc28gdGhlcmUgYXJlIGEgZmV3IHJlZmVyZW5jZXMgdG8gTlNBcHAgaW4gV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbS4KKyAgICAgICAgSWRlYWxseSwgd2Ugc2hvdWxkIG5v
dCByZWZlcmVuY2UgTlNBcHAgaW4gV2ViQ29yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5v
IGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXNNYWMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW06
IFJlbW92ZWQuCisKIDIwMTgtMDItMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCB0aW55IHBhcnRpYWwgcm9sbG91dCBvZiByMjI4MjYwIGFz
IGl0IGNhdXNlZCBzb21lIHdvcmtlciBmYWlsdXJlcwpJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlc01hYy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlc01hYy50eHQJ
KHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNNYWMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDMsOSArMTAzLDYgQEAgcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZQogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCiBw
bGF0Zm9ybS9tYWMvV2ViR0xCbGFja2xpc3QubW0KIHBsYXRmb3JtL21hYy9XZWJOU0F0dHJpYnV0
ZWRTdHJpbmdFeHRyYXMubW0KLXBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tIEBuby11bmlmeQotcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIubW0KLXBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0KIHBsYXRm
b3JtL21hYy9XaWRnZXRNYWMubW0KIAogcGxhdGZvcm0vbmV0d29yay9tYWMvTmV0d29ya1N0YXRl
Tm90aWZpZXJNYWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1
MjMsNyArMzUyMyw3IEBACiAJCUJDMDZFREEwMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJs
ZVJvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDZFRDlDMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVJvd0VsZW1lbnQuaCAq
LzsgfTsKIAkJQkMwNkVERTQwQkZENkQwRDAwODU2RTlEIC8qIEpTSFRNTFRhYmxlQ2VsbEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZF
REUyMEJGRDZEMEQwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUNlbGxFbGVtZW50LmggKi87IH07CiAJ
CUJDMDZFRTA1MEJGRDcxQUEwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFRTAzMEJGRDcxQUEw
MDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCAqLzsgfTsKLQkJQkMwNzNCQUEwQzM5OUIx
RjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwNzNCQTkwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29u
dmVyc2lvbi5oICovOyB9OworCQlCQzA3M0JBQTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252
ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzA3M0JBOTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxMEQ3NjgxN0Q4RUU3MTAw
NUUyNjI2IC8qIFJlbmRlckJsb2NrRmxvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGQjQ1RjMxN0Q4RTM5MjAwNDQ0NDQ2IC8qIFJlbmRlckJsb2Nr
Rmxvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDMTI0RUU4MEMyNjQxQ0QwMDlFMjM0OSAvKiBCYXJQcm9wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyNEVFNTBDMjY0MUNEMDA5RTIzNDkgLyog
QmFyUHJvcC5oICovOyB9OwogCQlCQzEyNEYwMDBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJQcm9w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyNEVG
RTBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJQcm9wLmggKi87IH07CkBAIC0zODY5LDkgKzM4Njks
NiBAQAogCQlDRDdEMzM0ODFDN0ExNkJGMDAwNDEyOTMgLyogQ29yZVZpZGVvU29mdExpbmsuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0QzMzQ2MUM3
QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5oICovOyB9OwogCQlDRDdEQkIyOTE4
Q0ExOUM2MDBDMTEwNjYgLyogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDdEQkIyNzE4Q0ExMUZGMDBDMTEwNjYg
LyogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggKi87IH07CiAJCUNEN0UwNTIyMTY1MUMyODIwMEMx
MjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDdFMDUyMTE2NTFBODQxMDBDMTIwMUYgLyogV2Vi
Q29yZUFWRlJlc291cmNlTG9hZGVyLm1tICovOyB9OwotCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDRDgyMDMxMDEzOTVBQ0U3MDBGOTU2QzYgLyog
V2ViV2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4
QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQjkxOTc3
MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovOyB9OwogCQlD
RDhBN0JCQzE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEE3QkJBMTk3
NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovOyB9OwogCQlD
RDhBQ0E4OTFEMjM3QUEyMDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhBQ0E4NzFEMjM3
QUEyMDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggKi87IH07CkBAIC00Mjcx
LDcgKzQyNjgsNiBAQAogCQlERTVGODYxMjFGQTIzOUU3MDA2REI2M0EgLyogSlNHQ09ic2VydmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NzE0RUFFMUNGNjY1NEEwMDQ3MjNDNCAvKiBKU0dDT2JzZXJ2YXRpb24uY3BwICovOyB9OwogCQlE
RTVGODYxRDFGQTI4MTVCMDA2REI2M0EgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTQ3
OEE3RTE2Q0Q3MEMzMDA3RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0gKi87IH07CiAJCURFNUY4NjFFMUZBMjgxRkQwMDZEQjYzQSAvKiBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOUE4MTI0NjBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLm1tICovOyB9OwotCQlERTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyog
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIwMzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovOyB9OwogCQlERTVGODY1MDFGQTJBRjI0MDA2REI2
M0EgLyogVW5pZmllZFNvdXJjZTUxLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREU1Rjg2MzYxRkEyQUYwNDAwNkRCNjNBIC8qIFVuaWZpZWRTb3Vy
Y2U1MS1tbS5tbSAqLzsgfTsKIAkJREU1Rjg2NTExRkEyQUYyNDAwNkRCNjNBIC8qIFVuaWZpZWRT
b3VyY2U1Mi1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERFNUY4NjM3MUZBMkFGMDUwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTItbW0ubW0gKi87
IH07CiAJCURFNUY4NjUyMUZBMkFGMjQwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTMtbW0ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERTVGODYzNTFG
QTJBRjAzMDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTUzLW1tLm1tICovOyB9OwpAQCAtMTI5ODMs
MTIgKzEyOTc5LDYgQEAKIAkJQ0Q3REJCMjcxOENBMTFGRjAwQzExMDY2IC8qIENTU0dyaWRMaW5l
TmFtZXNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NHcmlkTGlu
ZU5hbWVzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3RTA1MjAxNjUx
QTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q3RTA1MjExNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDRDgyMDMwNzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEODIwMzA4MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5p
bWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRvd0FuaW1h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRDgyMDMwRjEzOTVBQ0U3MDBG
OTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDg3MUM1QzFGQjUyQjYzMDBGMEI5NjUgLyogSVNPU2NoZW1lVHlwZUJveC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJU09TY2hlbWVUeXBlQm94Lmg7IHBh
dGggPSBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPU2NoZW1lVHlwZUJveC5oOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CiAJCUNEODcxQzVFMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBJU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHA7IHBhdGggPSBwbGF0Zm9ybS9ncmFw
aGljcy9pc28vSVNPUHJvdGVjdGlvblNjaGVtZUluZm9Cb3guY3BwOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CiAJCUNEODcxQzVGMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09TY2hlbWVUeXBl
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElTT1NjaGVtZVR5
cGVCb3guY3BwOyBwYXRoID0gcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1NjaGVtZVR5cGVCb3gu
Y3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC0xODY4MCwxMiArMTg2NzAsNiBA
QAogCQkJCUUxQTMxNjJDMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdF
eHRyYXMubW0gKi8sCiAJCQkJQ0Q1ODk2RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q1ODk2REYxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tICovLAotCQkJCUNEODIwMzA2MTM5NUFCNkEwMEY5
NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8sCi0JCQkJQ0Q4MjAzMDcx
Mzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCi0J
CQkJQ0Q4MjAzMDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIuaCAqLywKLQkJCQlDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLywKLQkJCQlDRDgyMDMwRTEzOTVB
Q0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8sCi0JCQkJQ0Q4MjAzMEYxMzk1
QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLywKIAkJCQk5MzgwRjQ3NzA5
QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7
CkBAIC0yODI3Myw3ICsyODI1Nyw2IEBACiAJCQkJMDc5NjlEQzIxN0QxNDE1MTAwN0ZGODQyIC8q
IEpTUlRDU3RhdHNSZXBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVFMkM0MzZDMUJDRjA3MUUw
MDAxRTJCQyAvKiBKU1JUQ1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUMwMUMz
MEMyNzREREQwMDlGNEVDOSAvKiBKU1NjcmVlbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY1QjQw
OEEyMDIxMkY3NzAwODBGOTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU1NjcmlwdFByb2Nlc3Nvck5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzNDQ3NkVGMURBNUJDNUUwMDJCNkVEMiAvKiBKU1Nj
cm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRG
QUYxIC8qIEpTU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yODg5Myw2ICsyODg3Niw3IEBACiAJCQkJNDE4NEY1MTYxRUFGMDVBODAwRjE4QkYwIC8qIE9y
aWVudGF0aW9uTm90aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwMTQ2MjhCMTAzQ0QxREUw
MDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RTg5
RkMxNkUyREMwNTAwQTkwOEY4IC8qIE9yaWdpbkxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NUI0MDhBMjAyMTJGNzcwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDU4MUZBRjE1MjBGOTFGMDAzQTdBNzUgLyogT3NjaWxsYXRvck5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUREMEU4MUI4REQwMEIyNTk2NSAvKiBPdXRsaW5l
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMjlGNTcyMThDNjk1MTQwMDREMEY4MSAvKiBP
dXRPZkJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjQ4LDE0
ICszMDIzMiwxMSBAQAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEODIwMzBBMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjQyQjMxRDE4ODExOTFCMDAy
NzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggaW4gSGVhZGVycyAq
LywKLQkJCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjEyMTcxRjYxNkE4Q0YwQjAw
MDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVEMjFBODAzMTNF
Q0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIxMEI2
OTgwMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjEwQjY5ODIxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQ0Q4MjAzMTAxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERTAxMjUxRjEyRDAwM0VGMjY5IC8qIFdlZWtJbnB1
dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjUxMEE0NEVGQzcwMEY5OTJFMCAvKiBX
aGVlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRUJCQzNEODFCNjU5ODgzMDBGNTI1M0Qg
LyogV2hlZWxFdmVudERlbHRhRmlsdGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNDc3LDcgKzMx
NDU4LDYgQEAKIAkJCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2
QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywKLQkJCQlE
RTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAv
KiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAw
QkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2
LDcgKzE1Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBiZXN0
TWVkaWFFbGVtZW50Rm9yU2hvd2luZ1BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKE1lZGlhRWxlbWVu
dFNlc3Npb246OlBsYXliYWNrQ29udHJvbHNQdXJwb3NlKTsKIAotICAgIHZvaWQgcmV3aW5kKGRv
dWJsZSB0aW1lRGVsdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV3aW5kKGRvdWJsZSB0
aW1lRGVsdGEpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV0dXJuVG9SZWFsdGltZSgpIG92
ZXJyaWRlOwogCiAgICAgLy8gRXZlbnR1YWxseSBvdmVybG9hZGVkIGluIEhUTUxWaWRlb0VsZW1l
bnQKQEAgLTIyNyw3ICsyMjcsNyBAQCBwdWJsaWM6CiAKIC8vIHBsYXliYWNrIHN0YXRlCiAgICAg
V0VCQ09SRV9FWFBPUlQgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnJl
bnRUaW1lV2l0aFRvbGVyYW5jZShkb3VibGUsIGRvdWJsZSB0b2xlcmFuY2VCZWZvcmUsIGRvdWJs
ZSB0b2xlcmFuY2VBZnRlcik7CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lRm9yQmluZGluZ3MoKSBj
b25zdCB7IHJldHVybiBjdXJyZW50VGltZSgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0Q3VycmVudFRpbWVGb3JCaW5kaW5ncyhkb3VibGUpOwpAQCAtMzA2LDcg
KzMwNiw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRyb2xzKCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb250cm9scyhib29sKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBkb3VibGUgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0Vm9sdW1lKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0Vm9sdW1lKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBtdXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPKQotCi0jaW1wb3J0IDxBcHBLaXQvTlNXaW5kb3dDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNTY3JlZW4uaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFBBTCB7Ci1jbGFzcyBTbGVlcERpc2FibGVyOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9jb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlOwotQGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXI7Ci1AY2xhc3MgV2ViV2luZG93RmFkZUFuaW1hdGlvbjsKLUBj
bGFzcyBDQUxheWVyOwotCi1XRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewotQHByaXZhdGUKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsgLy8gKHJldGFpbikK
LSAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7
IC8vIChhc3NpZ24pCi0KLSAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93
OyAvLyAocmV0YWluKQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIg
Kl9odWRDb250cm9sbGVyOyAvLyAocmV0YWluKQotCi0gICAgV2ViV2luZG93RmFkZUFuaW1hdGlv
biAqX2ZhZGVBbmltYXRpb247IC8vIChyZXRhaW4pCi0KLSAgICBCT09MIF9pc0VuZGluZ0Z1bGxz
Y3JlZW47Ci0gICAgQk9PTCBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFBBTDo6U2xlZXBEaXNhYmxlcj4gX2Rpc3BsYXlTbGVlcERpc2FibGVyOwotfQotCi0t
IChpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKLS0g
KHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdh
dGU+KWRlbGVnYXRlOwotCi0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyKilsYXll
cjsKLS0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2
aWRlb0VsZW1lbnQ7Ci0tIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7
Ci0KLS0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKLS0gKHZvaWQp
ZXhpdEZ1bGxzY3JlZW47Ci0KLUBlbmQKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
bW0JKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNTM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJ
REVPKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgiCi0KLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldl
YldpbmRvd0FuaW1hdGlvbi5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyTGF5ZXIu
aD4KLSNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVv
RWxlbWVudC5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3lzdGVt
L1NsZWVwRGlzYWJsZXIuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi9Tb2Z0TGlua2luZy5oPgotCi11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotCi0j
aWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0j
ZW5kaWYKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pCi1TT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQotCi11c2luZyBXZWJDb3JlOjpQbGF0Zm9y
bU1lZGlhOwotQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgOiBOU1dpbmRvdzxO
U0FuaW1hdGlvbkRlbGVnYXRlPgotewotICAgIFNFTCBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0
aW9uRW5kOwotICAgIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uICpfZnVsbHNjcmVlbkFuaW1hdGlv
bjsgLy8gKHJldGFpbikKLX0KLS0gKHZvaWQpYW5pbWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRS
ZWN0IHRvUmVjdDooTlNSZWN0KWVuZFJlY3Qgd2l0aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24g
KilzdWJBbmltYXRpb24gY29udHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xsZXJBY3Rpb247Ci1A
ZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcihIVURXaW5kb3dD
b250cm9sbGVyRGVsZWdhdGUpIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
RGVsZWdhdGU+Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJP
T0wpYW5pbWF0aW9uOwotLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW47Ci0t
ICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9uczsKLUBlbmQKLQotQGludGVyZmFjZSBOU1dpbmRv
dyhJc09uQWN0aXZlU3BhY2VBZGRpdGlvbkZvclRpZ2VyQW5kTGVvcGFyZCkKLS0gKEJPT0wpaXNP
bkFjdGl2ZVNwYWNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlcgotLSAoaWQpaW5pdAotewotICAgIC8vIERvIG5vdCBkZWZlciB3aW5kb3cgY3Jl
YXRpb24sIHRvIG1ha2Ugc3VyZSAtd2luZG93TnVtYmVyIGlzIGNyZWF0ZWQgKG5lZWRlZCBieSBX
ZWJXaW5kb3dTY2FsZUFuaW1hdGlvbikuCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2ViVmlk
ZW9GdWxsc2NyZWVuV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qg
c3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1
ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoV2luZG93OndpbmRv
d107Ci0gICAgW3dpbmRvdyByZWxlYXNlXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgW3NlbGYgd2luZG93RGlkTG9hZF07Ci0gICAgcmV0dXJuIHNlbGY7Ci0gICAg
Ci19Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBBU1NFUlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVl
bldpbmRvdyk7Ci0gICAgQVNTRVJUKCFfZmFkZUFuaW1hdGlvbik7Ci0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLS0gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKWZ1bGxzY3Jl
ZW5XaW5kb3cKLXsKLSAgICByZXR1cm4gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKVtzdXBl
ciB3aW5kb3ddOwotfQotCi0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyICopbGF5
ZXIKLXsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxz
Y3JlZW5XaW5kb3ddOwotICAgIFsoTlNWaWV3Kilbd2luZG93IGNvbnRlbnRWaWV3XSBzZXRMYXll
cjpsYXllcl07Ci0gICAgW1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6WUVTXTsK
LX0KLQotLSAodm9pZCl3aW5kb3dEaWRMb2FkCi17Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuV2lu
ZG93ICp3aW5kb3cgPSBbc2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLSAgICBbd2luZG93IHNldEhh
c1NoYWRvdzpZRVNdOyAvLyBUaGlzIGlzIG5pY2VyIHdpdGggYSBzaGFkb3cuCi0gICAgW3dpbmRv
dyBzZXRMZXZlbDpOU1BvcFVwTWVudVdpbmRvd0xldmVsLTFdOwotICAgIFsoTlNWaWV3Kilbd2lu
ZG93IGNvbnRlbnRWaWV3XSBzZXRMYXllcjpbQ0FMYXllciBsYXllcl1dOwotICAgIFtbd2luZG93
IGNvbnRlbnRWaWV3XSBzZXRXYW50c0xheWVyOllFU107Ci0KLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KGFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOikgbmFtZTpOU0FwcGxpY2F0aW9uRGlkUmVzaWdu
QWN0aXZlTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihh
cHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25E
aWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07Ci19Ci0K
LS0gKEhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAotewotICAgIHJldHVybiBfdmlkZW9F
bGVtZW50LmdldCgpOwotfQotCi0tICh2b2lkKXNldFZpZGVvRWxlbWVudDooSFRNTFZpZGVvRWxl
bWVudCopdmlkZW9FbGVtZW50Ci17Ci0gICAgX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsK
LQotICAgIGlmICghX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtz
ZWxmIGlzV2luZG93TG9hZGVkXSkgewotICAgICAgICBpZiAoX3ZpZGVvRWxlbWVudC0+cGxhdGZv
cm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQbGF5ZXJU
eXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0gX3ZpZGVvRWxlbWVudC0+cGxh
dGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOwotICAgICAgICAgICAgUmV0YWluUHRy
PEFWUGxheWVyTGF5ZXI+IGxheWVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXllckxheWVySW5zdGFu
Y2UoKSBpbml0XSk7Ci0gICAgICAgICAgICBbc2VsZiBzZXR1cFZpZGVvT3ZlcmxheTpsYXllci5n
ZXQoKV07Ci0gICAgICAgICAgICBbbGF5ZXIuZ2V0KCkgc2V0UGxheWVyOnBsYXllcl07Ci0KLSAg
ICAgICAgICAgIFtwbGF5ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAicmF0ZSIgb3B0
aW9uczowIGNvbnRleHQ6bnVsbHB0cl07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKGlkIDxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0
dXJuIF9kZWxlZ2F0ZTsKLX0KLQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKLX0KLQotLSAoQ0dGbG9hdCljbGVhckZhZGVBbmltYXRpb24KLXsKLSAgICBbX2Zh
ZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgQ0dGbG9hdCBwcmV2aW91c0FscGhhID0g
W19mYWRlQW5pbWF0aW9uIGN1cnJlbnRBbHBoYV07Ci0gICAgW19mYWRlQW5pbWF0aW9uIHNldFdp
bmRvdzpuaWxdOwotICAgIFtfZmFkZUFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBfZmFkZUFuaW1h
dGlvbiA9IG5pbDsKLSAgICByZXR1cm4gcHJldmlvdXNBbHBoYTsKLX0KLQotLSAodm9pZCl3aW5k
b3dEaWRFeGl0RnVsbHNjcmVlbgotewotICAgIENBTGF5ZXIgKmxheWVyID0gWyhOU1ZpZXcqKVtb
c2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBsYXllcl07Ci0gICAgaWYgKFtsYXllciBpc0tpbmRP
ZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSkKLSAgICAgICAgW1soQVZQbGF5ZXJMYXll
ciopbGF5ZXIgcGxheWVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJyYXRlIl07
Ci0KLSAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOwotICAgIFtbc2VsZiB3aW5kb3ddIGNs
b3NlXTsKLSAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKLSAgICBbc2VsZiB1cGRhdGVNZW51QW5k
RG9ja0ZvckZ1bGxzY3JlZW5dOyAgIAotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0aW9uc107
Ci0gICAgW19odWRDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19odWRDb250cm9s
bGVyIHJlbGVhc2VdOwotICAgIF9odWRDb250cm9sbGVyID0gbmlsOwotICAgIFtfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgY2xvc2VdOwotICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgcmVsZWFzZV07Ci0gICAgX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOwotICAg
IAotICAgIFtzZWxmIGF1dG9yZWxlYXNlXTsgLy8gQXNzb2NpYXRlZCAtcmV0YWluIGlzIGluIC1l
eGl0RnVsbHNjcmVlbi4KLSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gTk87Ci19Ci0KLS0gKHZv
aWQpd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0
aW9uXTsKLQotICAgIEFTU0VSVCghX2h1ZENvbnRyb2xsZXIpOwotICAgIF9odWRDb250cm9sbGVy
ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsK
LSAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0KLSAgICBbc2VsZiB1cGRh
dGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOwotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0
aW9uc107Ci0gICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOwotICAg
IAotICAgIC8vIEdpdmUgdGhlIEhVRCBrZXlib2FyZCBmb2N1cyBpbml0aWFsbHkKLSAgICBbX2h1
ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKLX0KLQotLSAoTlNSZWN0KXZpZGVvRWxlbWVudFJl
Y3QKLXsKLSAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpOwotfQotCi0tICh2
b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0
aW9uCi17ICAgCi0gICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgTlNXaW5kb3cq
IGZ1bGxzY3JlZW5XaW5kb3cgPSBbc2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLQotICAgIC8vIFJl
cGxpY2F0ZSB0aGUgUXVpY2tUaW1lIFBsYXllciAoWCkgYmVoYXZpb3Igd2hlbiBsb3NpbmcgYWN0
aXZlIGFwcGxpY2F0aW9uIHN0YXR1czoKLSAgICAvLyBJcyB0aGUgZnVsbHNjcmVlbiBzY3JlZW4g
dGhlIG1haW4gc2NyZWVuPyAoTm90ZTogdGhpcyBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgb25seSBh
IAotICAgIC8vIHNpbmdsZSBzY3JlZW4gaXMgYXZhaWxhYmxlLikgIElzIHRoZSBmdWxsc2NyZWVu
IHNjcmVlbiBvbiB0aGUgY3VycmVudCBzcGFjZT8gSUZGIHNvLCAKLSAgICAvLyB0aGVuIGV4aXQg
ZnVsbHNjcmVlbiBtb2RlLiAgICAKLSAgICBpZiAoZnVsbHNjcmVlbldpbmRvdy5zY3JlZW4gPT0g
W05TU2NyZWVuIHNjcmVlbnNdWzBdICYmIGZ1bGxzY3JlZW5XaW5kb3cub25BY3RpdmVTcGFjZSkK
LSAgICAgICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246Tk9dOwot
fQotICAgICAgICAgCi0gICAgICAgICAKLS8vIE1BUks6IC0KLS8vIE1BUks6IEV4cG9zZWQgSW50
ZXJmYWNlCi0KLXN0YXRpYyBOU1JlY3QgZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZyYW1lKE5TUmVj
dCBmcmFtZVRvRXhwYW5kLCBOU1JlY3QgZnJhbWUpCi17Ci0gICAgLy8gS2VlcCBhIGNvbnN0cmFp
bmVkIGFzcGVjdCByYXRpbyBmb3IgdGhlIGRlc3RpbmF0aW9uIHdpbmRvdwotICAgIE5TUmVjdCBy
ZXN1bHQgPSBmcmFtZVRvRXhwYW5kOwotICAgIENHRmxvYXQgbmV3UmF0aW8gPSBmcmFtZS5zaXpl
LndpZHRoIC8gZnJhbWUuc2l6ZS5oZWlnaHQ7Ci0gICAgQ0dGbG9hdCBvcmlnaW5hbFJhdGlvID0g
ZnJhbWVUb0V4cGFuZC5zaXplLndpZHRoIC8gZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAg
ICBpZiAobmV3UmF0aW8gPiBvcmlnaW5hbFJhdGlvKSB7Ci0gICAgICAgIENHRmxvYXQgbmV3V2lk
dGggPSBuZXdSYXRpbyAqIGZyYW1lVG9FeHBhbmQuc2l6ZS5oZWlnaHQ7Ci0gICAgICAgIENHRmxv
YXQgZGlmZiA9IG5ld1dpZHRoIC0gZnJhbWVUb0V4cGFuZC5zaXplLndpZHRoOwotICAgICAgICBy
ZXN1bHQuc2l6ZS53aWR0aCA9IG5ld1dpZHRoOwotICAgICAgICByZXN1bHQub3JpZ2luLnggLT0g
ZGlmZiAvIDI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ0dGbG9hdCBuZXdIZWlnaHQgPSBmcmFt
ZVRvRXhwYW5kLnNpemUud2lkdGggLyBuZXdSYXRpbzsKLSAgICAgICAgQ0dGbG9hdCBkaWZmID0g
bmV3SGVpZ2h0IC0gZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAgICAgICAgcmVzdWx0LnNp
emUuaGVpZ2h0ID0gbmV3SGVpZ2h0OwotICAgICAgICByZXN1bHQub3JpZ2luLnkgLT0gZGlmZiAv
IDI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU1dpbmRvdyAqY3Jl
YXRlQmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3coTlNSZWN0IGZyYW1lLCBpbnQgbGV2ZWwpCi17
Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVu
dFJlY3Q6ZnJhbWUgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0Jh
Y2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBbd2luZG93IHNldE9wYXF1ZTpZRVNd
OwotICAgIFt3aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsK
LSAgICBbd2luZG93IHNldExldmVsOmxldmVsXTsKLSAgICBbd2luZG93IHNldFJlbGVhc2VkV2hl
bkNsb3NlZDpOT107Ci0gICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotLSAodm9pZClzZXR1cEZhZGVB
bmltYXRpb25JZk5lZWRlZEFuZEZhZGVJbjooQk9PTClmYWRlSW4KLXsKLSAgICBDR0Zsb2F0IGlu
aXRpYWxBbHBoYSA9IGZhZGVJbiA/IDAgOiAxOwotICAgIGlmIChfZmFkZUFuaW1hdGlvbikgewot
ICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiBpZiB0aGUg
cHJldmlvdXMgb25lIGlzbid0IG92ZXIgeWV0Ci0gICAgICAgIGluaXRpYWxBbHBoYSA9IFtzZWxm
IGNsZWFyRmFkZUFuaW1hdGlvbl07Ci0gICAgfQotICAgIGlmICghX2ZvcmNlRGlzYWJsZUFuaW1h
dGlvbikKLSAgICAgICAgX2ZhZGVBbmltYXRpb24gPSBbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24g
YWxsb2NdIGluaXRXaXRoRHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxzY3JlZW5X
aW5kb3cgaW5pdGlhbEFscGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOmZhZGVJbiA/IDEgOiAw
XTsKLX0KLQotLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCi17Ci0g
ICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsK
LQotICAgIE5TUmVjdCBlbmRGcmFtZSA9IFtzY3JlZW4gZnJhbWVdOwotICAgIE5TUmVjdCBmcmFt
ZSA9IGZyYW1lRXhwYW5kZWRUb1JhdGlvT2ZGcmFtZShbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XSwg
ZW5kRnJhbWUpOwotCi0gICAgLy8gQ3JlYXRlIGEgYmxhY2sgd2luZG93IGlmIG5lZWRlZAotICAg
IGlmICghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KQotICAgICAgICBfYmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3cgPSBjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhbc2NyZWVu
IGZyYW1lXSwgW1tzZWxmIHdpbmRvd10gbGV2ZWxdLTEpOwotICAgIGVsc2UKLSAgICAgICAgW19i
YWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRGcmFtZTpbc2NyZWVuIGZyYW1lXSBkaXNwbGF5
Ok5PXTsKLQotICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOllF
U107Ci0gICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAgLy8gVGhpcyB3
aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGZyYW1lID0gTlNaZXJvUmVjdDsK
LSAgICB9Ci0gICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpmcmFt
ZSB0b1JlY3Q6ZW5kRnJhbWUgd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFuaW1hdGlvbiBjb250cm9s
bGVyQWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4pXTsKLQotICAgIFtf
YmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgb3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxh
dGl2ZVRvOltbc2VsZiBmdWxsc2NyZWVuV2luZG93XSB3aW5kb3dOdW1iZXJdXTsKLX0KLQotLSAo
dm9pZClleGl0RnVsbHNjcmVlbgotewotICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQotICAg
ICAgICByZXR1cm47Ci0gICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKLSAgICBbX2h1ZENv
bnRyb2xsZXIgY2xvc2VXaW5kb3ddOwotCi0gICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYgdmlk
ZW9FbGVtZW50UmVjdF07Ci0KLSAgICBbc2VsZiBzZXR1cEZhZGVBbmltYXRpb25JZk5lZWRlZEFu
ZEZhZGVJbjpOT107Ci0gICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAg
Ly8gVGhpcyB3aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGVuZEZyYW1lID0g
TlNaZXJvUmVjdDsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgaGF2ZSB0byByZXRhaW4gb3Vyc2Vs
dmVzIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhbGl2ZSBmb3IgdGhlIGVuZCBvZiB0aGUgYW5pbWF0
aW9uLgotICAgIC8vIElmIG91ciBvd25lciByZWxlYXNlcyB1cyB3ZSBjb3VsZCBjcmFzaCBpZiB0
aGlzIGlzIG5vdCB0aGUgY2FzZS4KLSAgICAvLyBCYWxhbmNlZCBpbiB3aW5kb3dEaWRFeGl0RnVs
bHNjcmVlbgotICAgIFtzZWxmIHJldGFpbl07ICAgIAotCi0gICAgTlNSZWN0IHN0YXJ0RnJhbWUg
PSBbW3NlbGYgd2luZG93XSBmcmFtZV07Ci0gICAgZW5kRnJhbWUgPSBmcmFtZUV4cGFuZGVkVG9S
YXRpb09mRnJhbWUoZW5kRnJhbWUsIHN0YXJ0RnJhbWUpOwotCi0gICAgW1tzZWxmIGZ1bGxzY3Jl
ZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpzdGFydEZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRo
U3ViQW5pbWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdp
bmRvd0RpZEV4aXRGdWxsc2NyZWVuKV07Ci19Ci0KLS0gKHZvaWQpYXBwbGljYXRpb25EaWRDaGFu
Z2VTY3JlZW5QYXJhbWV0ZXJzOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCi17Ci0gICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgLy8gVGhlIHVzZXIgbWF5IGhhdmUgY2hh
bmdlZCB0aGUgbWFpbiBzY3JlZW4gYnkgbW92aW5nIHRoZSBtZW51IGJhciwgb3IgdGhleSBtYXkg
aGF2ZSBjaGFuZ2VkCi0gICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBvciB0aGV5
IG1heSBoYXZlIGNoYW5nZWQgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9ucy4gIAot
ICAgIC8vIFVwZGF0ZSBvdXIgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMsIGFuZCBlbnN1cmUgdGhh
dCB0aGUgZnVsbCBzY3JlZW4gd2luZG93IG9jY3VwaWVzIHRoZSAKLSAgICAvLyBlbnRpcmUgc2Ny
ZWVuOgotICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07Ci0gICAgW1tz
ZWxmIHdpbmRvd10gc2V0RnJhbWU6W1tbc2VsZiB3aW5kb3ddIHNjcmVlbl0gZnJhbWVdIGRpc3Bs
YXk6WUVTXTsKLX0KLQotLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW4KLXsK
LSAgICAvLyBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBpcyBhdmFpbGFibGUgb24g
PiAxMC42IG9ubHk6Ci0gICAgTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbk9wdGlvbnMgb3B0aW9u
cyA9IE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25EZWZhdWx0OwotICAgIE5TU2NyZWVuKiBmdWxs
c2NyZWVuU2NyZWVuID0gW1tzZWxmIHdpbmRvd10gc2NyZWVuXTsKLQotICAgIGlmICghX2lzRW5k
aW5nRnVsbHNjcmVlbikgewotICAgICAgICAvLyBBdXRvLWhpZGUgdGhlIG1lbnUgYmFyIGlmIHRo
ZSBmdWxsc2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhcjoKLSAgICAgICAgLy8gTk9U
RTogaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyIGJ1dCBub3Qg
dGhlIGRvY2ssIHdlIG11c3Qgc3RpbGwgCi0gICAgICAgIC8vIGF1dG8taGlkZSB0aGUgZG9jaywg
b3IgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICAgICAgICBpZiAoW1tOU1NjcmVlbiBz
Y3JlZW5zXSBvYmplY3RBdEluZGV4OjBdID09IGZ1bGxzY3JlZW5TY3JlZW4pCi0gICAgICAgICAg
ICBvcHRpb25zIHw9IChOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVNZW51QmFyIHwg
TlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jayk7Ci0gICAgICAgIC8vIENoZWNr
IGlmIHRoZSBjdXJyZW50IHNjcmVlbiBjb250YWlucyB0aGUgZG9jayBieSBjb21wYXJpbmcgdGhl
IHNjcmVlbidzIGZyYW1lIHRvIGl0cwotICAgICAgICAvLyB2aXNpYmxlRnJhbWU7IGlmIGEgZG9j
ayBpcyBwcmVzZW50LCB0aGUgdmlzaWJsZUZyYW1lIHdpbGwgZGlmZmVyLiAgSWYgdGhlIGN1cnJl
bnQgc2NyZWVuCi0gICAgICAgIC8vIGNvbnRhaW5zIHRoZSBkb2NrLCBoaWRlIGl0LgotICAgICAg
ICBlbHNlIGlmICghTlNFcXVhbFJlY3RzKFtmdWxsc2NyZWVuU2NyZWVuIGZyYW1lXSwgW2Z1bGxz
Y3JlZW5TY3JlZW4gdmlzaWJsZUZyYW1lXSkpCi0gICAgICAgICAgICBvcHRpb25zIHw9IE5TQXBw
bGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZURvY2s7Ci0gICAgfQotCi0gICAgTlNBcHAucHJl
c2VudGF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUG93ZXJBc3Nl
cnRpb25zCi17Ci0gICAgX2Rpc3BsYXlTbGVlcERpc2FibGVyID0gbnVsbHB0cjsKLX0KLQotLy8g
TUFSSzogLQotLy8gTUFSSzogV2luZG93IGNhbGxiYWNrCi0KLS0gKHZvaWQpX3JlcXVlc3RFeGl0
Ci17Ci0gICAgaWYgKF92aWRlb0VsZW1lbnQpCi0gICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRG
dWxsc2NyZWVuKCk7Ci0gICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwotfQotCi0tICh2
b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uCi17
Ci0gICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9m
b3JjZURpc2FibGVBbmltYXRpb24gPSAhYW5pbWF0aW9uOwotICAgIFtzZWxmIHBlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3IoX3JlcXVlc3RFeGl0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBd
OwotCi19Ci0KLS0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgcmVx
dWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpZRVNdOwotfQotCi0tICh2b2lkKWZhZGVI
VURJbgotewotICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOwotfQotCi0tICh2b2lk
KW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQp
b2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250
ZXh0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoYW5n
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotCi0gICAgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUbzpAInJhdGUiXSkKLSAgICAgICAgW3NlbGYgcmF0ZUNoYW5nZWQ6bmlsXTsKLX0KLQotLSAo
dm9pZClyYXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KLXsK
LSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKLSAgICBbX2h1ZENvbnRyb2xs
ZXIgdXBkYXRlUmF0ZV07Ci0gICAgW3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKLX0KLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93Ci0KLS0gKGlk
KWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUlu
dGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRl
ZmVyOihCT09MKWZsYWcKLXsKLSAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVy
bGVzc1dpbmRvd01hc2sgYmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwot
ICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAg
W3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKLSAgICBbc2VsZiBzZXRBY2NlcHRzTW91
c2VNb3ZlZEV2ZW50czpZRVNdOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBBU1NFUlQoIV9mdWxsc2NyZWVuQW5pbWF0aW9uKTsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4g
Tk87Ci19Ci0KLS0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Ci17Ci0gICAgcmV0dXJuIE5POwot
fQotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VE
X1BBUkFNKHRoZUV2ZW50KTsKLX0KLQotLSAodm9pZCljYW5jZWxPcGVyYXRpb246KGlkKXNlbmRl
cgotewotICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtbc2VsZiB3aW5kb3dDb250cm9s
bGVyXSByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5dOwotfQotCi0tICh2b2lkKWFuaW1hdGVkUmVzaXpl
RGlkRW5kCi17Ci0gICAgLy8gQ2FsbCBvdXIgd2luZG93Q29udHJvbGxlci4KLSAgICBpZiAoX2Nv
bnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCkKLSAgICAgICAgW1tzZWxmIHdpbmRvd0NvbnRy
b2xsZXJdIHBlcmZvcm1TZWxlY3RvcjpfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kXTsK
LSAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kID0gTlVMTDsKLX0KLQotLy8KLS8v
IFRoaXMgZnVuY3Rpb24gd2lsbCBhbmltYXRlIGEgY2hhbmdlIG9mIGZyYW1lIHJlY3RhbmdsZQot
Ly8gV2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiwgdGhhdCBtZWFucyB0aGF0IHdlJ2xsIGNv
cnJlY3RseQotLy8gaW50ZXJydXB0IHRoZSBydW5uaW5nIGFuaW1hdGlvbiwgYW5kIHF1ZXVlIHRo
ZSBuZXh0IG9uZS4KLS8vCi0tICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVj
dCB0b1JlY3Q6KE5TUmVjdCllbmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICop
c3ViQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246KFNFTCljb250cm9sbGVyQWN0aW9uCi17Ci0g
ICAgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCA9IGNvbnRyb2xsZXJBY3Rpb247Ci0K
LSAgICBCT09MIHdhc0FuaW1hdGluZyA9IE5POwotICAgIGlmIChfZnVsbHNjcmVlbkFuaW1hdGlv
bikgewotICAgICAgICB3YXNBbmltYXRpbmcgPSBZRVM7Ci0KLSAgICAgICAgLy8gSW50ZXJydXB0
IGFueSBydW5uaW5nIGFuaW1hdGlvbi4KLSAgICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0
b3BBbmltYXRpb25dOwotCi0gICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVjdCB0byBlbnN1
cmUgYSBzbW9vdGggdHJhbnNpdGlvbi4KLSAgICAgICAgc3RhcnRSZWN0ID0gW19mdWxsc2NyZWVu
QW5pbWF0aW9uIGN1cnJlbnRGcmFtZV07Ci0gICAgICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBy
ZWxlYXNlXTsKLSAgICAgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7Ci0gICAgfQotICAg
IAotICAgIGlmIChOU0lzRW1wdHlSZWN0KHN0YXJ0UmVjdCkgfHwgTlNJc0VtcHR5UmVjdChlbmRS
ZWN0KSkgewotICAgICAgICAvLyBGYWtlbHkgZW5kIHRoZSBzdWJhbmltYXRpb24uCi0gICAgICAg
IFtzdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjFdOwotICAgICAgICAvLyBBbmQgcmVt
b3ZlIHRoZSB3ZWFrIGxpbmsgdG8gdGhlIHdpbmRvdy4KLSAgICAgICAgW3N1YkFuaW1hdGlvbiBz
dG9wQW5pbWF0aW9uXTsKLQotICAgICAgICBbc2VsZiBzZXRGcmFtZTplbmRSZWN0IGRpc3BsYXk6
Tk9dOwotICAgICAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLSAgICAgICAg
W3NlbGYgYW5pbWF0ZWRSZXNpemVEaWRFbmRdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCF3YXNBbmltYXRpbmcpIHsKLSAgICAgICAgLy8gV2UnbGwgZG93bnNjYWxlIHRoZSB3
aW5kb3cgZHVyaW5nIHRoZSBhbmltYXRpb24gYmFzZWQgb24gdGhlIGhpZ2hlciByZXNvbHV0aW9u
IHJlY3QKLSAgICAgICAgQk9PTCBoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID0gc3RhcnRSZWN0
LnNpemUud2lkdGggPCBlbmRSZWN0LnNpemUud2lkdGggJiYgc3RhcnRSZWN0LnNpemUuaGVpZ2h0
IDwgZW5kUmVjdC5zaXplLmhlaWdodDsKLSAgICAgICAgW3NlbGYgc2V0RnJhbWU6aGlnaGVyUmVz
b2x1dGlvbklzRW5kUmVjdCA/IGVuZFJlY3QgOiBzdGFydFJlY3QgZGlzcGxheTpOT107Ci0gICAg
fQotICAgIAotICAgIEFTU0VSVCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOwotICAgIF9mdWxsc2Ny
ZWVuQW5pbWF0aW9uID0gW1tXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhI
aW50ZWREdXJhdGlvbjowLjIgd2luZG93OnNlbGYgaW5pdGFsRnJhbWU6c3RhcnRSZWN0IGZpbmFs
RnJhbWU6ZW5kUmVjdF07Ci0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFN1YkFuaW1hdGlv
bjpzdWJBbmltYXRpb25dOwotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBoYXMgc2NhbGVkIHRo
ZSB3aW5kb3cgYmVmb3JlIHNob3dpbmcgaXQuCi0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczowXTsKLSAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxm
XTsKLQotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0g
KHZvaWQpYW5pbWF0aW9uRGlkRW5kOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgotewotICAgIGlm
ICghW05TVGhyZWFkIGlzTWFpblRocmVhZF0pIHsKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVj
dG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihhbmltYXRpb25EaWRFbmQ6KSB3aXRoT2JqZWN0OmFu
aW1hdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoYW5pbWF0aW9uICE9IF9mdWxsc2NyZWVuQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBUaGUgYW5pbWF0aW9uIGlzIG5vdCByZWFsbHkgb3ZlciBhbmQgd2FzIGludGVycnVw
dGVkCi0gICAgLy8gRG9uJ3Qgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KLSAgICBpZiAoW2FuaW1h
dGlvbiBjdXJyZW50UHJvZ3Jlc3NdIDwgMS4wKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBF
bnN1cmUgdGhhdCBhbmltYXRpb24gKGFuZCBzdWJhbmltYXRpb24pIGRvbid0IGtlZXAKLSAgICAv
LyB0aGUgd2VhayByZWZlcmVuY2UgdG8gdGhlIHdpbmRvdyBpdmFyIHRoYXQgbWF5IGJlIGRlc3Ry
b3llZCBmcm9tCi0gICAgLy8gbm93IG9uLgotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXRX
aW5kb3c6bmlsXTsKLQotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBhdXRvcmVsZWFzZV07Ci0g
ICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7Ci0KLSAgICBbc2VsZiBhbmltYXRlZFJlc2l6
ZURpZEVuZF07Ci19Ci0KLS0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17
Ci0gICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50KTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxl
cl0gZmFkZUhVREluXTsKLX0KLQotQGVuZAotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLQotI2VuZGlmIC8qIEVOQUJMRShWSURFTykg
Ki8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhV
RFdpbmRvd0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lvbiAy
MjgyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbXBvcnQgPEFwcEtpdC9OU0J1dHRvbi5o
PgotI2ltcG9ydCA8QXBwS2l0L05TQ29udHJvbC5oPgotI2ltcG9ydCA8QXBwS2l0L05TVGV4dEZp
ZWxkLmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNUcmFja2luZ0FyZWEuaD4KLSNpbXBvcnQgPEFwcEtp
dC9OU1dpbmRvdy5oPgotI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9j
b2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOwotCi1AaW50
ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0Nv
bnRyb2xsZXIKLXsKLSAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ckRlbGVnYXRlPiBfZGVsZWdhdGU7Ci0gICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7
Ci0gICAgTlNUcmFja2luZ0FyZWEgKl9hcmVhOwotICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKLSAg
ICBCT09MIF9pc0VuZGluZ0Z1bGxzY3JlZW47Ci0gICAgQk9PTCBfaXNTY3J1YmJpbmc7Ci0KLSAg
ICBOU0NvbnRyb2wgKl90aW1lbGluZTsKLSAgICBOU1RleHRGaWVsZCAqX3JlbWFpbmluZ1RpbWVU
ZXh0OwotICAgIE5TVGV4dEZpZWxkICpfZWxhcHNlZFRpbWVUZXh0OwotICAgIE5TQ29udHJvbCAq
X3ZvbHVtZVNsaWRlcjsKLSAgICBOU0J1dHRvbiAqX3BsYXlCdXR0b247Ci19Ci0KLS0gKGlkIDxX
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwot
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7Ci0tICh2b2lkKWZhZGVXaW5kb3dJbjsKLS0gKHZvaWQp
ZmFkZVdpbmRvd091dDsKLS0gKHZvaWQpY2xvc2VXaW5kb3c7Ci0tICh2b2lkKXVwZGF0ZVJhdGU7
Ci0KLUBlbmQKLQotQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKLS0g
KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKLUBlbmQKLQotI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3Zu
OmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0JKHJl
dmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNzM4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0K
LSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9F
bGVtZW50Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9y
dCA8cGFsL3NwaS9tYWMvUVRLaXRTUEkuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgot
Ci1TT0ZUX0xJTktfRlJBTUVXT1JLKFFUS2l0KQotCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFU
SFVEQmFja2dyb3VuZFZpZXcpCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEQnV0dG9uKQot
U09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVRFNsaWRlcikKLVNPRlRfTElOS19DTEFTUyhRVEtp
dCwgUVRIVURUaW1lbGluZSkKLQotI2RlZmluZSBRVEhVREJhY2tncm91bmRWaWV3IGdldFFUSFVE
QmFja2dyb3VuZFZpZXdDbGFzcygpCi0jZGVmaW5lIFFUSFVEQnV0dG9uIGdldFFUSFVEQnV0dG9u
Q2xhc3MoKQotI2RlZmluZSBRVEhVRFNsaWRlciBnZXRRVEhVRFNsaWRlckNsYXNzKCkKLSNkZWZp
bmUgUVRIVURUaW1lbGluZSBnZXRRVEhVRFRpbWVsaW5lQ2xhc3MoKQotCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotZW51bSBjbGFzcyBNZWRpYVVJQ29udHJvbCB7Ci0gICAgVGltZWxpbmUsCi0g
ICAgU2xpZGVyLAotICAgIFBsYXlQYXVzZUJ1dHRvbiwKLSAgICBFeGl0RnVsbHNjcmVlbkJ1dHRv
biwKLSAgICBSZXdpbmRCdXR0b24sCi0gICAgRmFzdEZvcndhcmRCdXR0b24sCi0gICAgVm9sdW1l
VXBCdXR0b24sCi0gICAgVm9sdW1lRG93bkJ1dHRvbiwKLX07Ci0KLX0KLQotdXNpbmcgV2ViQ29y
ZTo6TWVkaWFVSUNvbnRyb2w7Ci11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotdXNp
bmcgV2ViQ29yZTo6bmFycm93UHJlY2lzaW9uVG9GbG9hdDsKLUBpbnRlcmZhY2UgV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciAoUHJpdmF0ZSkgPE5TV2luZG93RGVsZWdhdGU+
Ci0KLS0gKHZvaWQpdXBkYXRlVGltZTsKLS0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6
KGlkKXNlbmRlcjsKLS0gKGZsb2F0KWN1cnJlbnRUaW1lOwotLSAodm9pZClzZXRDdXJyZW50VGlt
ZTooZmxvYXQpY3VycmVudFRpbWU7Ci0tIChkb3VibGUpZHVyYXRpb247Ci0KLS0gKHZvaWQpdm9s
dW1lQ2hhbmdlZDooaWQpc2VuZGVyOwotLSAoZmxvYXQpbWF4Vm9sdW1lOwotLSAoZmxvYXQpdm9s
dW1lOwotLSAodm9pZClzZXRWb2x1bWU6KGZsb2F0KXZvbHVtZTsKLS0gKHZvaWQpZGVjcmVtZW50
Vm9sdW1lOwotLSAodm9pZClpbmNyZW1lbnRWb2x1bWU7Ci0KLS0gKHZvaWQpdXBkYXRlUGxheUJ1
dHRvbjsKLS0gKHZvaWQpdG9nZ2xlUGxheWluZzooaWQpc2VuZGVyOwotLSAoQk9PTClwbGF5aW5n
OwotLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmc7Ci0KLS0gKHZvaWQpcmV3aW5kOihp
ZClzZW5kZXI7Ci0tICh2b2lkKWZhc3RGb3J3YXJkOihpZClzZW5kZXI7Ci0KLS0gKE5TU3RyaW5n
ICopcmVtYWluaW5nVGltZVRleHQ7Ci0tIChOU1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dDsKLQot
LSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyOwotQGVuZAotCi1AaW50ZXJmYWNlIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyA6IE5TV2luZG93Ci1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cKLQotLSAoaWQpaW5pdFdpdGhDb250ZW50
UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFj
a2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZwot
ewotICAgIFVOVVNFRF9QQVJBTShhU3R5bGUpOwotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhD
b250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJs
ZXNzIGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpmbGFnXTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwotICAgIFtzZWxm
IHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW3NlbGYgc2V0
TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07Ci0gICAgW3NlbGYgc2V0QWNjZXB0c01vdXNl
TW92ZWRFdmVudHM6WUVTXTsKLSAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6Tk9dOwot
ICAgIFtzZWxmIHNldE1vdmFibGVCeVdpbmRvd0JhY2tncm91bmQ6WUVTXTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tIChCT09MKWNhbkJlY29tZUtleVdpbmRvdwotewotICAgIHJldHVybiBZ
RVM7Ci19Ci0KLS0gKHZvaWQpY2FuY2VsT3BlcmF0aW9uOihpZClzZW5kZXIKLXsKLSAgICBVTlVT
RURfUEFSQU0oc2VuZGVyKTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxz
Y3JlZW46c2VsZl07Ci19Ci0KLS0gKHZvaWQpY2VudGVyCi17Ci0gICAgTlNSZWN0IGh1ZEZyYW1l
ID0gW3NlbGYgZnJhbWVdOwotICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFp
blNjcmVlbl0gZnJhbWVdOwotICAgIFtzZWxmIHNldEZyYW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBv
aW50KHNjcmVlbkZyYW1lLm9yaWdpbi54ICsgKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRG
cmFtZS5zaXplLndpZHRoKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyZWVuRnJhbWUub3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQg
LSBodWRGcmFtZS5zaXplLmhlaWdodCkgLyA2KV07Ci19Ci0KLS0gKHZvaWQpa2V5RG93bjooTlNF
dmVudCAqKWV2ZW50Ci17Ci0gICAgW3N1cGVyIGtleURvd246ZXZlbnRdOwotICAgIFtbc2VsZiB3
aW5kb3dDb250cm9sbGVyXSBmYWRlV2luZG93SW5dOwotfQotCi0tIChCT09MKXJlc2lnbkZpcnN0
UmVzcG9uZGVyCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKXBlcmZvcm1LZXlFcXVp
dmFsZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBCbG9jayBhbGwgY29tbWFuZCBrZXkg
ZXZlbnRzIHdoaWxlIHRoZSBmdWxsc2NyZWVuIHdpbmRvdyBpcyB1cC4KLSAgICBpZiAoW2V2ZW50
IHR5cGVdICE9IE5TRXZlbnRUeXBlS2V5RG93bikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAot
ICAgIGlmICghKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdDb21t
YW5kKSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKLQot
c3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93SGVpZ2h0ID0gNTk7Ci1zdGF0aWMgY29uc3QgQ0dG
bG9hdCB3aW5kb3dXaWR0aCA9IDQzODsKLQotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIEhV
RFdpbmRvd0ZhZGVPdXREZWxheSA9IDM7Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyCi0KLS0gKGlkKWluaXQKLXsKLSAgICBOU1dpbmRvdyAq
d2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29u
dGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0KSBzdHls
ZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVC
dWZmZXJlZCBkZWZlcjpOT107Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aFdpbmRvdzp3aW5k
b3ddOwotICAgIFt3aW5kb3cgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW3dpbmRvdyByZWxlYXNl
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYgd2luZG93
RGlkTG9hZF07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IEFTU0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOwotICAgIEFTU0VSVCghX2FyZWEpOwotICAg
IEFTU0VSVCghX2lzU2NydWJiaW5nKTsKLSAgICBbX3RpbWVsaW5lIHJlbGVhc2VdOwotICAgIFtf
cmVtYWluaW5nVGltZVRleHQgcmVsZWFzZV07Ci0gICAgW19lbGFwc2VkVGltZVRleHQgcmVsZWFz
ZV07Ci0gICAgW192b2x1bWVTbGlkZXIgcmVsZWFzZV07Ci0gICAgW19wbGF5QnV0dG9uIHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXRBcmVhOihOU1RyYWNr
aW5nQXJlYSAqKWFyZWEKLXsKLSAgICBpZiAoYXJlYSA9PSBfYXJlYSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFtfYXJlYSByZWxlYXNlXTsKLSAgICBfYXJlYSA9IFthcmVhIHJldGFpbl07Ci19Ci0K
LS0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgTlNTdHJpbmcgKmNoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnNdOwotICAgIGlmIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGxlbmd0aF0gPT0gMSkg
ewotICAgICAgICBzd2l0Y2ggKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgY2hhcmFjdGVy
QXRJbmRleDowXSkgewotICAgICAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICAgICAgW3Nl
bGYgdG9nZ2xlUGxheWluZzpuaWxdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGNhc2UgTlNVcEFycm93RnVuY3Rpb25LZXk6Ci0gICAgICAgICAgICAgICAgaWYgKFtldmVu
dCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdPcHRpb24pCi0gICAgICAgICAg
ICAgICAgICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFtzZWxmIGluY3JlbWVudFZvbHVtZV07Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0
aW9uS2V5OgotICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2
ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRWb2x1
bWU6MF07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBk
ZWNyZW1lbnRWb2x1bWVdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBb
c3VwZXIga2V5RG93bjpldmVudF07Ci19Ci0KLS0gKGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9kZWxlZ2F0
ZTsKLX0KLQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKLX0KLQotLSAodm9pZClzY2hlZHVsZVRpbWVVcGRhdGUKLXsKLSAgICBbTlNPYmplY3Qg
Y2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6c2VsZl07Ci0KLSAgICAvLyBGaXJz
dCwgdXBkYXRlIHJpZ2h0IGF3YXksIHRoZW4gc2NoZWR1bGUgZnV0dXJlIHVwZGF0ZQotICAgIFtz
ZWxmIHVwZGF0ZVRpbWVdOwotICAgIFtzZWxmIHVwZGF0ZVBsYXlCdXR0b25dOwotCi0gICAgW190
aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRhdGVdOwotICAgIFtfdGltZWxpbmVVcGRhdGVUaW1l
ciByZWxlYXNlXTsKLQotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMgYSByZXRhaW4gY3lj
bGUgYmV0d2VlbiB0aGUgd2luZG93IGFuZCB1cy4KLSAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9
IFtbTlNUaW1lciB0aW1lcldpdGhUaW1lSW50ZXJ2YWw6MC4yNSB0YXJnZXQ6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IodXBkYXRlVGltZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5d
OwotICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxpbmVVcGRh
dGVUaW1lciBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKLX0KLQotLSAodm9pZCl1bnNj
aGVkdWxlVGltZVVwZGF0ZQotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVV
cGRhdGUpIG9iamVjdDpuaWxdOwotCi0gICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRh
dGVdOwotICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciByZWxlYXNlXTsKLSAgICBfdGltZWxpbmVV
cGRhdGVUaW1lciA9IG5pbDsKLX0KLQotLSAodm9pZClmYWRlV2luZG93SW4KLXsKLSAgICBOU1dp
bmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAoIVt3aW5kb3cgaXNWaXNpYmxl
XSkKLSAgICAgICAgW3dpbmRvdyBzZXRBbHBoYVZhbHVlOjBdOwotCi0gICAgW3dpbmRvdyBtYWtl
S2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLSAgICBbW3dpbmRvdyBhbmltYXRvcl0gc2V0QWxwaGFW
YWx1ZToxXTsKLSAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwotCi0gICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAoIV9tb3VzZUlzSW5I
VUQgJiYgW3NlbGYgcGxheWluZ10pICAgLy8gRG9uJ3QgZmFkZSBvdXQgd2hlbiBwYXVzZWQuCi0g
ICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0
aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVsYXldOwotfQotCi0tICh2
b2lkKWZhZGVXaW5kb3dPdXQKLXsKLSAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1v
dmVzOllFU107Ci0gICAgW1tbc2VsZiB3aW5kb3ddIGFuaW1hdG9yXSBzZXRBbHBoYVZhbHVlOjBd
OwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRh
dGUpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MV07Ci19Ci0KLS0gKHZvaWQpY2xvc2VXaW5k
b3cKLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOwot
ICAgIFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0g
W3NlbGYgd2luZG93XTsKLSAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gcmVtb3ZlVHJhY2tpbmdB
cmVhOl9hcmVhXTsKLSAgICBbc2VsZiBzZXRBcmVhOm5pbF07Ci0gICAgW3dpbmRvdyBjbG9zZV07
Ci0gICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtzZWxmIHNldFdpbmRvdzpuaWxd
OwotfQotCi1zdGF0aWMgTlNDb250cm9sICpjcmVhdGVNZWRpYVVJQ29udHJvbChNZWRpYVVJQ29u
dHJvbCBjb250cm9sVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGNvbnRyb2xUeXBlKSB7Ci0gICAgY2Fz
ZSBNZWRpYVVJQ29udHJvbDo6VGltZWxpbmU6IHsKLSAgICAgICAgTlNTbGlkZXIgKnNsaWRlciA9
IFtbUVRIVURUaW1lbGluZSBhbGxvY10gaW5pdF07Ci0gICAgICAgIFtbc2xpZGVyIGNlbGxdIHNl
dENvbnRpbnVvdXM6WUVTXTsKLSAgICAgICAgcmV0dXJuIHNsaWRlcjsKLSAgICB9Ci0gICAgY2Fz
ZSBNZWRpYVVJQ29udHJvbDo6U2xpZGVyOiB7Ci0gICAgICAgIE5TQnV0dG9uICpzbGlkZXIgPSBb
W1FUSFVEU2xpZGVyIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW1tzbGlkZXIgY2VsbF0gc2V0Q29u
dGludW91czpZRVNdOwotICAgICAgICByZXR1cm4gc2xpZGVyOwotICAgIH0KLSAgICBjYXNlIE1l
ZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRv
biA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdl
OltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1BsYXlUZW1wbGF0ZSJdXTsKLSAgICAgICAgW2J1dHRv
biBzZXRBbHRlcm5hdGVJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNQYXVzZVFUUHJpdmF0
ZVRlbXBsYXRlIl1dOwotCi0gICAgICAgIFtbYnV0dG9uIGNlbGxdIHNldFNob3dzU3RhdGVCeTpO
U0NvbnRlbnRzQ2VsbE1hc2tdOwotICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAg
ICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6RXhp
dEZ1bGxzY3JlZW5CdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURC
dXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGlt
YWdlTmFtZWQ6QCJOU0V4aXRGdWxsU2NyZWVuVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0b24g
c2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBjYXNl
IE1lZGlhVUlDb250cm9sOjpSZXdpbmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRv
biA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdl
OltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1Jld2luZFRlbXBsYXRlIl1dOwotICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAg
Y2FzZSBNZWRpYVVJQ29udHJvbDo6RmFzdEZvcndhcmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0
b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9u
IHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0Zhc3RGb3J3YXJkVGVtcGxhdGUiXV07
Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4gYnV0dG9u
OwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpWb2x1bWVVcEJ1dHRvbjogewotICAg
ICAgICBOU0J1dHRvbiAqYnV0dG9uID0gW1tRVEhVREJ1dHRvbiBhbGxvY10gaW5pdF07Ci0gICAg
ICAgIFtidXR0b24gc2V0SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQXVkaW9PdXRwdXRW
b2x1bWVIaWdoVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOwot
ICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpW
b2x1bWVEb3duQnV0dG9uOiB7Ci0gICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0
dG9uIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNBdWRpb091dHB1dFZvbHVtZUxvd1RlbXBsYXRlIl1dOwotICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotc3Rh
dGljIE5TQ29udHJvbCAqY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFV
SUNvbnRyb2wgY29udHJvbFR5cGUsIE5TUmVjdCBmcmFtZSkKLXsKLSAgICBOU0NvbnRyb2wgKmNv
bnRyb2wgPSBjcmVhdGVNZWRpYVVJQ29udHJvbChjb250cm9sVHlwZSk7Ci0gICAgY29udHJvbC5m
cmFtZSA9IGZyYW1lOwotICAgIHJldHVybiBjb250cm9sOwotfQotCi1zdGF0aWMgTlNUZXh0Rmll
bGQgKmNyZWF0ZVRpbWVUZXh0RmllbGQoTlNSZWN0IGZyYW1lKQotewotICAgIE5TVGV4dEZpZWxk
ICp0ZXh0RmllbGQgPSBbW05TVGV4dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXTsK
LSAgICBbdGV4dEZpZWxkIHNldFRleHRDb2xvcjpbTlNDb2xvciB3aGl0ZUNvbG9yXV07Ci0gICAg
W3RleHRGaWVsZCBzZXRCb3JkZXJlZDpOT107Ci0gICAgW3RleHRGaWVsZCBzZXRGb250OltOU0Zv
bnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MTBdXTsKLSAgICBbdGV4dEZpZWxkIHNldERyYXdzQmFj
a2dyb3VuZDpOT107Ci0gICAgW3RleHRGaWVsZCBzZXRCZXplbGVkOk5PXTsKLSAgICBbdGV4dEZp
ZWxkIHNldEVkaXRhYmxlOk5PXTsKLSAgICBbdGV4dEZpZWxkIHNldFNlbGVjdGFibGU6Tk9dOwot
ICAgIHJldHVybiB0ZXh0RmllbGQ7Ci19Ci0KLXN0YXRpYyBOU1ZpZXcgKmNyZWF0ZU1lZGlhVUlC
YWNrZ3JvdW5kVmlldygpCi17Ci0gICAgaWQgdmlldyA9IFtbUVRIVURCYWNrZ3JvdW5kVmlldyBh
bGxvY10gaW5pdF07Ci0KLSAgICBjb25zdCBDR0Zsb2F0IHF1aWNrVGltZVBsYXllckhVREhlaWdo
dCA9IDU5OwotICAgIGNvbnN0IENHRmxvYXQgcXVpY2tUaW1lUGxheWVySFVEQ29udGVudEJvcmRl
clBvc2l0aW9uID0gMzg7Ci0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAg
ICBbdmlldyBzZXRDb250ZW50Qm9yZGVyUG9zaXRpb246cXVpY2tUaW1lUGxheWVySFVEQ29udGVu
dEJvcmRlclBvc2l0aW9uIC8gcXVpY2tUaW1lUGxheWVySFVESGVpZ2h0XTsKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIHJldHVybiB2aWV3OwotfQotCi0tICh2b2lkKXdpbmRv
d0RpZExvYWQKLXsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBob3Jpem9udGFsTWFyZ2luID0g
MTA7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbldpZHRoID0gNDE7Ci0gICAg
c3RhdGljIGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbkhlaWdodCA9IDM1OwotICAgIHN0YXRpYyBj
b25zdCBDR0Zsb2F0IHBsYXlCdXR0b25Ub3BNYXJnaW4gPSA0OwotICAgIHN0YXRpYyBjb25zdCBD
R0Zsb2F0IHZvbHVtZVNsaWRlcldpZHRoID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQg
dm9sdW1lU2xpZGVySGVpZ2h0ID0gMTM7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1l
QnV0dG9uV2lkdGggPSAxODsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVCdXR0b25I
ZWlnaHQgPSAxNjsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVVcEJ1dHRvbkxlZnRN
YXJnaW4gPSA0OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZUNvbnRyb2xzVG9wTWFy
Z2luID0gMTM7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0b25X
aWR0aCA9IDI1OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9u
SGVpZ2h0ID0gMjE7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0
b25Ub3BNYXJnaW4gPSAxMTsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lbGluZVdpZHRo
ID0gMzE1OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVsaW5lSGVpZ2h0ID0gMTQ7Ci0g
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZWxpbmVCb3R0b21NYXJnaW4gPSA3OwotICAgIHN0
YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRXaWR0aCA9IDU0OwotICAgIHN0YXRpYyBj
b25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRIZWlnaHQgPSAxMzsKLSAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCB0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiA9IDc7Ci0KLSAgICBOU1dpbmRv
dyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBBU1NFUlQod2luZG93KTsKLQotICAgIE5T
VmlldyAqYmFja2dyb3VuZCA9IGNyZWF0ZU1lZGlhVUlCYWNrZ3JvdW5kVmlldygpOwotCi0gICAg
W3dpbmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5kXTsKLSAgICBfYXJlYSA9IFtbTlNUcmFj
a2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6
TlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdBY3RpdmVBbHdheXMg
b3duZXI6c2VsZiB1c2VySW5mbzpuaWxdOwotICAgIFtiYWNrZ3JvdW5kIGFkZFRyYWNraW5nQXJl
YTpfYXJlYV07Ci0gICAgW2JhY2tncm91bmQgcmVsZWFzZV07ICAgIAotCi0gICAgTlNWaWV3ICpj
b250ZW50VmlldyA9IFt3aW5kb3cgY29udGVudFZpZXddOwotCi0gICAgQ0dGbG9hdCBjZW50ZXIg
PSBDR0Zsb29yKCh3aW5kb3dXaWR0aCAtIHBsYXlCdXR0b25XaWR0aCkgLyAyKTsKLSAgICBfcGxh
eUJ1dHRvbiA9IChOU0J1dHRvbiAqKWNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBl
KE1lZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b24sIE5TTWFrZVJlY3QoY2VudGVyLCB3aW5k
b3dIZWlnaHQgLSBwbGF5QnV0dG9uVG9wTWFyZ2luIC0gcGxheUJ1dHRvbkhlaWdodCwgcGxheUJ1
dHRvbldpZHRoLCBwbGF5QnV0dG9uSGVpZ2h0KSk7Ci0gICAgQVNTRVJUKFtfcGxheUJ1dHRvbiBp
c0tpbmRPZkNsYXNzOltOU0J1dHRvbiBjbGFzc11dKTsKLSAgICBbX3BsYXlCdXR0b24gc2V0VGFy
Z2V0OnNlbGZdOwotICAgIFtfcGxheUJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHRvZ2dsZVBs
YXlpbmc6KV07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3BsYXlCdXR0b25dOwotCi0g
ICAgQ0dGbG9hdCBjbG9zZVRvUmlnaHQgPSB3aW5kb3dXaWR0aCAtIGhvcml6b250YWxNYXJnaW4g
LSBleGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoOwotICAgIE5TQ29udHJvbCAqZXhpdEZ1bGxzY3Jl
ZW5CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29u
dHJvbDo6RXhpdEZ1bGxzY3JlZW5CdXR0b24sIE5TTWFrZVJlY3QoY2xvc2VUb1JpZ2h0LCB3aW5k
b3dIZWlnaHQgLSBleGl0RnVsbHNjcmVlbkJ1dHRvblRvcE1hcmdpbiAtIGV4aXRGdWxsc2NyZWVu
QnV0dG9uSGVpZ2h0LCBleGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoLCBleGl0RnVsbHNjcmVlbkJ1
dHRvbkhlaWdodCkpOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVj
dG9yKGV4aXRGdWxsc2NyZWVuOildOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRUYXJn
ZXQ6c2VsZl07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6ZXhpdEZ1bGxzY3JlZW5CdXR0
b25dOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiByZWxlYXNlXTsKLSAgICAKLSAgICBDR0Zs
b2F0IHZvbHVtZUNvbnRyb2xzQm90dG9tID0gd2luZG93SGVpZ2h0IC0gdm9sdW1lQ29udHJvbHNU
b3BNYXJnaW4gLSB2b2x1bWVCdXR0b25IZWlnaHQ7Ci0gICAgQ0dGbG9hdCBsZWZ0ID0gaG9yaXpv
bnRhbE1hcmdpbjsKLSAgICBOU0NvbnRyb2wgKnZvbHVtZURvd25CdXR0b24gPSBjcmVhdGVDb250
cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lRG93bkJ1dHRv
biwgTlNNYWtlUmVjdChsZWZ0LCB2b2x1bWVDb250cm9sc0JvdHRvbSwgdm9sdW1lQnV0dG9uV2lk
dGgsIHZvbHVtZUJ1dHRvbkhlaWdodCkpOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnZv
bHVtZURvd25CdXR0b25dOwotICAgIFt2b2x1bWVEb3duQnV0dG9uIHNldFRhcmdldDpzZWxmXTsK
LSAgICBbdm9sdW1lRG93bkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVtZVRvWmVy
bzopXTsKLSAgICBbdm9sdW1lRG93bkJ1dHRvbiByZWxlYXNlXTsKLQotICAgIGxlZnQgKz0gdm9s
dW1lQnV0dG9uV2lkdGg7Ci0gICAgX3ZvbHVtZVNsaWRlciA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVk
aWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9sOjpTbGlkZXIsIE5TTWFrZVJlY3QobGVmdCwg
dm9sdW1lQ29udHJvbHNCb3R0b20gKyBDR0Zsb29yKCh2b2x1bWVCdXR0b25IZWlnaHQgLSB2b2x1
bWVTbGlkZXJIZWlnaHQpIC8gMiksIHZvbHVtZVNsaWRlcldpZHRoLCB2b2x1bWVTbGlkZXJIZWln
aHQpKTsKLSAgICBbX3ZvbHVtZVNsaWRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTpbc2VsZiBtYXhWb2x1bWVdXSBmb3JLZXk6QCJtYXhWYWx1ZSJdOwotICAgIFtfdm9sdW1l
U2xpZGVyIHNldFRhcmdldDpzZWxmXTsKLSAgICBbX3ZvbHVtZVNsaWRlciBzZXRBY3Rpb246QHNl
bGVjdG9yKHZvbHVtZUNoYW5nZWQ6KV07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3Zv
bHVtZVNsaWRlcl07Ci0KLSAgICBsZWZ0ICs9IHZvbHVtZVNsaWRlcldpZHRoICsgdm9sdW1lVXBC
dXR0b25MZWZ0TWFyZ2luOwotICAgIE5TQ29udHJvbCAqdm9sdW1lVXBCdXR0b24gPSBjcmVhdGVD
b250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0
b24sIE5TTWFrZVJlY3QobGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20sIHZvbHVtZUJ1dHRvbldp
ZHRoLCB2b2x1bWVCdXR0b25IZWlnaHQpKTsKLSAgICBbdm9sdW1lVXBCdXR0b24gc2V0VGFyZ2V0
OnNlbGZdOwotICAgIFt2b2x1bWVVcEJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVt
ZVRvTWF4aW11bTopXTsKLSAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVVcEJ1dHRv
bl07Ci0gICAgW3ZvbHVtZVVwQnV0dG9uIHJlbGVhc2VdOwotCi0gICAgX3RpbWVsaW5lID0gY3Jl
YXRlTWVkaWFVSUNvbnRyb2woTWVkaWFVSUNvbnRyb2w6OlRpbWVsaW5lKTsKLQotICAgIFtfdGlt
ZWxpbmUgc2V0VGFyZ2V0OnNlbGZdOwotICAgIFtfdGltZWxpbmUgc2V0QWN0aW9uOkBzZWxlY3Rv
cih0aW1lbGluZVBvc2l0aW9uQ2hhbmdlZDopXTsKLSAgICBbX3RpbWVsaW5lIHNldEZyYW1lOk5T
TWFrZVJlY3QoQ0dGbG9vcigod2luZG93V2lkdGggLSB0aW1lbGluZVdpZHRoKSAvIDIpLCB0aW1l
bGluZUJvdHRvbU1hcmdpbiwgdGltZWxpbmVXaWR0aCwgdGltZWxpbmVIZWlnaHQpXTsKLSAgICBb
Y29udGVudFZpZXcgYWRkU3VidmlldzpfdGltZWxpbmVdOwotCi0gICAgX2VsYXBzZWRUaW1lVGV4
dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdCh0aW1lVGV4dEZpZWxkSG9yaXpvbnRh
bE1hcmdpbiwgdGltZWxpbmVCb3R0b21NYXJnaW4sIHRpbWVUZXh0RmllbGRXaWR0aCwgdGltZVRl
eHRGaWVsZEhlaWdodCkpOwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldEFsaWdubWVudDpOU1Rl
eHRBbGlnbm1lbnRMZWZ0XTsKLSAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfZWxhcHNlZFRp
bWVUZXh0XTsKLQotICAgIF9yZW1haW5pbmdUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQo
TlNNYWtlUmVjdCh3aW5kb3dXaWR0aCAtIHRpbWVUZXh0RmllbGRIb3Jpem9udGFsTWFyZ2luIC0g
dGltZVRleHRGaWVsZFdpZHRoLCB0aW1lbGluZUJvdHRvbU1hcmdpbiwgdGltZVRleHRGaWVsZFdp
ZHRoLCB0aW1lVGV4dEZpZWxkSGVpZ2h0KSk7Ci0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRB
bGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50UmlnaHRdOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2
aWV3Ol9yZW1haW5pbmdUaW1lVGV4dF07Ci0KLSAgICBbd2luZG93IHJlY2FsY3VsYXRlS2V5Vmll
d0xvb3BdOwotICAgIFt3aW5kb3cgc2V0SW5pdGlhbEZpcnN0UmVzcG9uZGVyOl9wbGF5QnV0dG9u
XTsKLSAgICBbd2luZG93IGNlbnRlcl07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlVm9sdW1lCi17Ci0g
ICAgW192b2x1bWVTbGlkZXIgc2V0RmxvYXRWYWx1ZTpbc2VsZiB2b2x1bWVdXTsKLX0KLQotLSAo
dm9pZCl1cGRhdGVUaW1lCi17Ci0gICAgW3NlbGYgdXBkYXRlVm9sdW1lXTsKLQotICAgIFtfdGlt
ZWxpbmUgc2V0RmxvYXRWYWx1ZTpbc2VsZiBjdXJyZW50VGltZV1dOwotICAgIFtfdGltZWxpbmUg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6W3NlbGYgZHVyYXRpb25dXSBmb3JL
ZXk6QCJtYXhWYWx1ZSJdOwotCi0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRTdHJpbmdWYWx1
ZTpbc2VsZiByZW1haW5pbmdUaW1lVGV4dF1dOwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldFN0
cmluZ1ZhbHVlOltzZWxmIGVsYXBzZWRUaW1lVGV4dF1dOwotfQotCi0tICh2b2lkKWVuZFNjcnVi
YmluZwotewotICAgIEFTU0VSVChfaXNTY3J1YmJpbmcpOwotICAgIF9pc1NjcnViYmluZyA9IE5P
OwotICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0pCi0gICAgICAgIHZpZGVvRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0K
LS0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6KGlkKXNlbmRlcgotewotICAgIFVOVVNF
RF9QQVJBTShzZW5kZXIpOwotICAgIFtzZWxmIHNldEN1cnJlbnRUaW1lOltfdGltZWxpbmUgZmxv
YXRWYWx1ZV1dOwotICAgIGlmICghX2lzU2NydWJiaW5nKSB7Ci0gICAgICAgIF9pc1NjcnViYmlu
ZyA9IFlFUzsKLSAgICAgICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IFtf
ZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgICAgIHZpZGVvRWxlbWVudC0+YmVnaW5T
Y3J1YmJpbmcoKTsKLSAgICAgICAgc3RhdGljIE5TQXJyYXkgKmVuZFNjcnViYmluZ01vZGVzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6TlNEZWZhdWx0UnVuTG9vcE1vZGUsIE5T
TW9kYWxQYW5lbFJ1bkxvb3BNb2RlLCBuaWxdOwotICAgICAgICAvLyBTY2hlZHVsZSAtZW5kU2Ny
dWJiaW5nIGZvciB3aGVuIGxlYXZpbmcgbW91c2UgdHJhY2tpbmcgbW9kZS4KLSAgICAgICAgW1tO
U1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZW5kU2Ny
dWJiaW5nKSB0YXJnZXQ6c2VsZiBhcmd1bWVudDpuaWwgb3JkZXI6MCBtb2RlczplbmRTY3J1YmJp
bmdNb2Rlc107Ci0gICAgfQotfQotCi0tIChmbG9hdCljdXJyZW50VGltZQotewotICAgIHJldHVy
biBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmN1
cnJlbnRUaW1lKCkgOiAwOwotfQotCi0tICh2b2lkKXNldEN1cnJlbnRUaW1lOihmbG9hdCljdXJy
ZW50VGltZQotewotICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAgICBy
ZXR1cm47Ci0gICAgW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5zZXRDdXJyZW50VGltZShjdXJy
ZW50VGltZSk7Ci0gICAgW3NlbGYgdXBkYXRlVGltZV07Ci19Ci0KLS0gKGRvdWJsZSlkdXJhdGlv
bgotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0tPmR1cmF0aW9uKCkgOiAwOwotfQotCi0tIChmbG9hdCltYXhWb2x1bWUKLXsK
LSAgICAvLyBTZXQgdGhlIHZvbHVtZSBzbGlkZXIgcmVzb2x1dGlvbgotICAgIHJldHVybiAxMDA7
Ci19Ci0KLS0gKHZvaWQpdm9sdW1lQ2hhbmdlZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNlbmRlcik7Ci0gICAgW3NlbGYgc2V0Vm9sdW1lOltfdm9sdW1lU2xpZGVyIGZsb2F0VmFs
dWVdXTsKLX0KLQotLSAodm9pZClzZXRWb2x1bWVUb1plcm86KGlkKXNlbmRlcgotewotICAgIFVO
VVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtzZWxmIHNldFZvbHVtZTowXTsKLX0KLQotLSAodm9p
ZClzZXRWb2x1bWVUb01heGltdW06KGlkKXNlbmRlcgotewotICAgIFVOVVNFRF9QQVJBTShzZW5k
ZXIpOwotICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLX0KLQotLSAodm9p
ZClkZWNyZW1lbnRWb2x1bWUKLXsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgdm9sdW1lID0gW3NlbGYgdm9sdW1lXSAtIDEw
OwotICAgIFtzZWxmIHNldFZvbHVtZTpNQVgodm9sdW1lLCAwKV07Ci19Ci0KLS0gKHZvaWQpaW5j
cmVtZW50Vm9sdW1lCi17Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZsb2F0IHZvbHVtZSA9IFtzZWxmIHZvbHVtZV0gKyAxMDsKLSAg
ICBbc2VsZiBzZXRWb2x1bWU6c3RkOjptaW4odm9sdW1lLCBbc2VsZiBtYXhWb2x1bWVdKV07Ci19
Ci0KLS0gKGZsb2F0KXZvbHVtZQotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVu
dF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnZvbHVtZSgpICogW3NlbGYgbWF4Vm9sdW1l
XSA6IDA7Ci19Ci0KLS0gKHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWUKLXsKLSAgICBpZiAo
IVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChbX2Rl
bGVnYXRlIHZpZGVvRWxlbWVudF0tPm11dGVkKCkpCi0gICAgICAgIFtfZGVsZWdhdGUgdmlkZW9F
bGVtZW50XS0+c2V0TXV0ZWQoZmFsc2UpOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+
c2V0Vm9sdW1lKHZvbHVtZSAvIFtzZWxmIG1heFZvbHVtZV0pOwotICAgIFtzZWxmIHVwZGF0ZVZv
bHVtZV07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUGxheUJ1dHRvbgotewotICAgIFtfcGxheUJ1dHRv
biBzZXRJbnRWYWx1ZTpbc2VsZiBwbGF5aW5nXV07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUmF0ZQot
ewotICAgIEJPT0wgcGxheWluZyA9IFtzZWxmIHBsYXlpbmddOwotCi0gICAgLy8gS2VlcCB0aGUg
SFVEIHZpc2libGUgd2hlbiBwYXVzZWQuCi0gICAgaWYgKCFwbGF5aW5nKQotICAgICAgICBbc2Vs
ZiBmYWRlV2luZG93SW5dOwotICAgIGVsc2UgaWYgKCFfbW91c2VJc0luSFVEKSB7Ci0gICAgICAg
IFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07Ci0gICAgICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0aE9iamVjdDpu
aWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVsYXldOwotICAgIH0KLSAgICBbc2VsZiB1
cGRhdGVQbGF5QnV0dG9uXTsKLX0KLQotLSAodm9pZCl0b2dnbGVQbGF5aW5nOihpZClzZW5kZXIK
LXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBbc2VsZiBzZXRQbGF5aW5nOiFbc2Vs
ZiBwbGF5aW5nXV07Ci19Ci0KLS0gKEJPT0wpcGxheWluZwotewotICAgIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvRWxlbWVudCA9IFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XTsKLSAgICBpZiAoIXZp
ZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuICF2aWRlb0VsZW1l
bnQtPmNhblBsYXkoKTsKLX0KLQotLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmcKLXsK
LSAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxl
bWVudF07Ci0KLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKHBsYXlpbmcpCi0gICAgICAgIHZpZGVvRWxlbWVudC0+cGxheSgpOwotICAgIGVsc2UKLSAg
ICAgICAgdmlkZW9FbGVtZW50LT5wYXVzZSgpOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnRpbWVU
b1N0cmluZyhkb3VibGUgdGltZSkKLXsKLSAgICBBU1NFUlRfQVJHKHRpbWUsIHRpbWUgPj0gMCk7
Ci0KLSAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodGltZSkpCi0gICAgICAgIHRpbWUgPSAwOwotCi0g
ICAgaW50IHNlY29uZHMgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0ZDo6YWJzKHRpbWUpKTsK
LSAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOwotICAgIGludCBtaW51dGVzID0g
KHNlY29uZHMgLyA2MCkgJSA2MDsKLSAgICBzZWNvbmRzICU9IDYwOwotCi0gICAgaWYgKGhvdXJz
KQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZDolMDJkOiUw
MmQiLCBob3VycywgbWludXRlcywgc2Vjb25kc107Ci0KLSAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlMDJkOiUwMmQiLCBtaW51dGVzLCBzZWNvbmRzXTsgICAgCi19Ci0K
LS0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQKLXsKLSAgICBIVE1MVmlkZW9FbGVtZW50
KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07Ci0gICAgaWYgKCF2aWRl
b0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBAIiI7Ci0KLSAgICBkb3VibGUgcmVtYWluaW5nVGlt
ZSA9IDA7Ci0KLSAgICBpZiAoc3RkOjppc2Zpbml0ZSh2aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkp
ICYmIHN0ZDo6aXNmaW5pdGUodmlkZW9FbGVtZW50LT5jdXJyZW50VGltZSgpKSkKLSAgICAgICAg
cmVtYWluaW5nVGltZSA9IHZpZGVvRWxlbWVudC0+ZHVyYXRpb24oKSAtIHZpZGVvRWxlbWVudC0+
Y3VycmVudFRpbWUoKTsKLQotICAgIHJldHVybiBbQCItIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
Zzp0aW1lVG9TdHJpbmcocmVtYWluaW5nVGltZSldOwotfQotCi0tIChOU1N0cmluZyAqKWVsYXBz
ZWRUaW1lVGV4dAotewotICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAg
ICByZXR1cm4gQCIiOwotCi0gICAgcmV0dXJuIHRpbWVUb1N0cmluZyhbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF0tPmN1cnJlbnRUaW1lKCkpOwotfQotCi0vLyBNQVJLOiBOU1Jlc3BvbmRlcgotCi0t
ICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VEX1BB
UkFNKHRoZUV2ZW50KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIEhVRCB3b24ndCBiZSBoaWRkZW4g
ZnJvbSBub3cKLSAgICBfbW91c2VJc0luSFVEID0gWUVTOwotICAgIFtzZWxmIGZhZGVXaW5kb3dJ
bl07Ci19Ci0KLS0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAg
IFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7Ci0gICAgX21vdXNlSXNJbkhVRCA9IE5POwotICAgIFtz
ZWxmIGZhZGVXaW5kb3dJbl07Ci19Ci0KLS0gKHZvaWQpcmV3aW5kOihpZClzZW5kZXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+cmV3aW5k
KDMwKTsKLX0KLQotLSAodm9pZClmYXN0Rm9yd2FyZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNlbmRlcik7Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAg
ICAgIHJldHVybjsKLX0KLQotLSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7Ci0gICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCi0g
ICAgICAgIHJldHVybjsKLSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVTOwotICAgIFtfZGVs
ZWdhdGUgcmVxdWVzdEV4aXRGdWxsc2NyZWVuXTsgCi19Ci0KLS8vIE1BUks6IE5TV2luZG93RGVs
ZWdhdGUKLQotLSAodm9pZCl3aW5kb3dEaWRFeHBvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgW3NlbGYgc2No
ZWR1bGVUaW1lVXBkYXRlXTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRDbG9zZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsK
LSAgICBbc2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93
QW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJXaW5kb3dBbmltYXRpb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8
Q29jb2EvQ29jb2EuaD4KLQotV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJXaW5kb3dTY2Fs
ZUFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uIHsKLUBwcml2YXRlCi0gICAgTlNSZWN0IF9pbml0aWFs
RnJhbWUsIF9maW5hbEZyYW1lLCBfcmVhbEZyYW1lOwotICAgIE5TV2luZG93ICpfd2luZG93OyAv
LyAoYXNzaWduKQotICAgIE5TQW5pbWF0aW9uICpfc3ViQW5pbWF0aW9uOyAvLyAocmV0YWluKQot
ICAgIE5TVGltZUludGVydmFsIF9oaW50ZWREdXJhdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRoSGlu
dGVkRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3
aW5kb3cgaW5pdGFsRnJhbWU6KE5TUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooTlNSZWN0
KWZpbmFsRnJhbWU7Ci0KLS0gKHZvaWQpc2V0U3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKWFu
aW1hdGlvbjsKLQotLSAoTlNSZWN0KWN1cnJlbnRGcmFtZTsKLQotLy8gQmUgc3VyZSB0byBjYWxs
IHNldFdpbmRvdzpuaWwgdG8gY2xlYXIgdGhlIHdlYWsgbGluayBfd2luZG93IHdoZW4gYXBwcm9w
cmlhdGUKLS0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLUBlbmQKLQotCi1X
RUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gOiBOU0FuaW1h
dGlvbiB7Ci1AcHJpdmF0ZQotICAgIENHRmxvYXQgX2luaXRpYWxBbHBoYSwgX2ZpbmFsQWxwaGE7
Ci0gICAgTlNXaW5kb3cgKl93aW5kb3c7IC8vIChhc3NpZ24pCi0gICAgQk9PTCBfaXNTdG9wcGVk
OwotICAgIAotfQotLSAoaWQpaW5pdFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRp
b24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlh
bEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxBbHBoYTsKLQotLSAoQ0dGbG9hdCljdXJy
ZW50QWxwaGE7Ci0KLS8vIEJlIHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRo
ZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVuIGFwcHJvcHJpYXRlCi0tICh2b2lkKXNldFdpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3c7Ci1AZW5kCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93
QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJXaW5kb3dBbmltYXRpb24ubW0JKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0JKG5vbmV4aXN0ZW50KQpAQCAtMSwy
OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24u
aCIKLQotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IENH
RmxvYXQgc2xvd01vdGlvbkZhY3RvciA9IDEwOwotCi1zdGF0aWMgTlNUaW1lSW50ZXJ2YWwgV2Vi
V2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oTlNUaW1lSW50ZXJ2YWwgZHVyYXRp
b24pCi17Ci0gICAgcmV0dXJuIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10g
JiBOU0V2ZW50TW9kaWZpZXJGbGFnU2hpZnQpID8gZHVyYXRpb24gKiBzbG93TW90aW9uRmFjdG9y
IDogZHVyYXRpb247Ci19Ci0KLXN0YXRpYyBOU1JlY3Qgc2NhbGVkUmVjdChOU1JlY3QgX2luaXRp
YWxGcmFtZSwgTlNSZWN0IF9maW5hbEZyYW1lLCBDR0Zsb2F0IGZhY3RvcikKLXsKLSAgICBOU1Jl
Y3QgY3VycmVudFJlY3QgPSBfaW5pdGlhbEZyYW1lOwotICAgIGN1cnJlbnRSZWN0Lm9yaWdpbi54
ICs9IChOU01pblgoX2ZpbmFsRnJhbWUpIC0gTlNNaW5YKF9pbml0aWFsRnJhbWUpKSAqIGZhY3Rv
cjsKLSAgICBjdXJyZW50UmVjdC5vcmlnaW4ueSArPSAoTlNNaW5ZKF9maW5hbEZyYW1lKSAtIE5T
TWluWShfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7Ci0gICAgY3VycmVudFJlY3Quc2l6ZS53aWR0
aCArPSAoTlNXaWR0aChfZmluYWxGcmFtZSkgLSBOU1dpZHRoKF9pbml0aWFsRnJhbWUpKSAqIGZh
Y3RvcjsKLSAgICBjdXJyZW50UmVjdC5zaXplLmhlaWdodCArPSAoTlNIZWlnaHQoX2ZpbmFsRnJh
bWUpIC0gTlNIZWlnaHQoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOwotICAgIHJldHVybiBjdXJy
ZW50UmVjdDsKLX0KLQotc3RhdGljIENHRmxvYXQgc3F1YXJlZERpc3RhbmNlKE5TUG9pbnQgcG9p
bnQxLCBOU1BvaW50IHBvaW50MikKLXsKLSAgICBDR0Zsb2F0IGRlbHRhWCA9IHBvaW50MS54IC0g
cG9pbnQyLng7Ci0gICAgQ0dGbG9hdCBkZWx0YVkgPSBwb2ludDEueSAtIHBvaW50Mi55OwotICAg
IHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVk7Ci19Ci0KLX0KLQotdXNp
bmcgV2ViQ29yZTo6V2ViV2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb247Ci11c2lu
ZyBXZWJDb3JlOjpuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0OwotdXNpbmcgV2ViQ29yZTo6c2NhbGVk
UmVjdDsKLXVzaW5nIFdlYkNvcmU6OnNxdWFyZWREaXN0YW5jZTsKLUBpbXBsZW1lbnRhdGlvbiBX
ZWJXaW5kb3dTY2FsZUFuaW1hdGlvbgotCi0tIChpZClpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYg
c2V0QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07
Ci0gICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aWQpaW5pdFdpdGhIaW50ZWREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93
OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0YWxGcmFtZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5h
bEZyYW1lOihOU1JlY3QpZmluYWxGcmFtZQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2hpbnRlZER1cmF0aW9uID0g
ZHVyYXRpb247Ci0gICAgX3dpbmRvdyA9IHdpbmRvdzsKLSAgICBfaW5pdGlhbEZyYW1lID0gaW5p
dGlhbEZyYW1lOwotICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKLSAgICBfcmVhbEZyYW1l
ID0gW3dpbmRvdyBmcmFtZV07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpIGRlYWxs
b2MKLXsKLSAgICBbX3N1YkFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0g
ICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0
aW9uKGR1cmF0aW9uKV07Ci19Ci0KLS0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dwotewotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci19Ci0KLS0gKGZsb2F0KWN1cnJlbnRWYWx1ZQot
ewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNSAtIDAuNSAqIGNvcyhwaURv
dWJsZSAqICgxIC0gW3NlbGYgY3VycmVudFByb2dyZXNzXSkpKTsKLX0KLQotLSAoTlNSZWN0KWN1
cnJlbnRGcmFtZQotewotICAgIHJldHVybiBzY2FsZWRSZWN0KF9maW5hbEZyYW1lLCBfaW5pdGlh
bEZyYW1lLCBbc2VsZiBjdXJyZW50VmFsdWVdKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcFJlY3Qo
TlNSZWN0KiByZWN0KQotewotICAgIHJlY3QtPm9yaWdpbi55ID0gTlNNYXhZKFsoTlNTY3JlZW4g
KilbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKSAtIE5TTWF4WSgq
cmVjdCk7Ci19Ci0KLXN0YXRpYyBDR1NDb25uZWN0aW9uSUQgbWFpbldpbmRvd1NlcnZlckNvbm5l
Y3Rpb25JRCgpCi17Ci0gICAgc3RhdGljIENHU0Nvbm5lY3Rpb25JRCBjZ3NJZDsKLSAgICBpZiAo
IWNnc0lkKQotICAgICAgICBjZ3NJZCA9IENHU01haW5Db25uZWN0aW9uSUQoKTsKLSAgICByZXR1
cm4gY2dzSWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFNjYWxlZEZyYW1lRm9yV2luZG93KE5TV2lu
ZG93ICp3aW5kb3csIE5TUmVjdCBzY2FsZUZyYW1lLCBOU1JlY3Qgbm9uU2NhbGVkRnJhbWUpCi17
Ci0gICAgaWYgKE5TRXF1YWxSZWN0cyhzY2FsZUZyYW1lLCBub25TY2FsZWRGcmFtZSkpIHsKLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdub25udWxsIgotICAgICAgICBDR1NTZXRXaW5kb3dXYXJwKG1haW5XaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uSUQoKSwgd2luZG93LndpbmRvd051bWJlciwgMCwgMCwgbnVsbHB0cik7Ci0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgZmxvYXQgbWVzaFsxNl07Ci0gICAgCi0gICAgZmxpcFJlY3QoJnNjYWxlRnJhbWUpOwot
ICAgIGZsaXBSZWN0KCZub25TY2FsZWRGcmFtZSk7Ci0gICAgCi0gICAgLy8gdG9wLWxlZnQgcG9p
bnQgKHRvIGFuZCBmcm9tKQotICAgIG1lc2hbMF0gPSAwOwotICAgIG1lc2hbMV0gPSAwOwotICAg
IG1lc2hbMl0gPSBOU01pblgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFszXSA9IE5TTWluWShzY2Fs
ZUZyYW1lKTsKLSAgICAKLSAgICAvLyB0b3AtcmlnaHQgcG9pbnQgKHRvIGFuZCBmcm9tKQotICAg
IG1lc2hbNF0gPSBOU1dpZHRoKG5vblNjYWxlZEZyYW1lKTsKLSAgICBtZXNoWzVdID0gMDsKLSAg
ICBtZXNoWzZdID0gTlNNYXhYKHNjYWxlRnJhbWUpOwotICAgIG1lc2hbN10gPSBOU01pblkoc2Nh
bGVGcmFtZSk7Ci0gICAgCi0gICAgLy8gYm90dG9tLWxlZnQgKHRvIGFuZCBmcm9tKQotICAgIG1l
c2hbOF0gPSAwOwotICAgIG1lc2hbOV0gPSBOU0hlaWdodChub25TY2FsZWRGcmFtZSk7Ci0gICAg
bWVzaFsxMF0gPSBOU01pblgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFsxMV0gPSBOU01heFkoc2Nh
bGVGcmFtZSk7Ci0gICAgCi0gICAgLy8gYm90dG9tLXJpZ2h0ICh0byBhbmQgZnJvbSkKLSAgICBt
ZXNoWzEyXSA9IE5TV2lkdGgobm9uU2NhbGVkRnJhbWUpOwotICAgIG1lc2hbMTNdID0gTlNIZWln
aHQobm9uU2NhbGVkRnJhbWUpOwotICAgIG1lc2hbMTRdID0gTlNNYXhYKHNjYWxlRnJhbWUpOwot
ICAgIG1lc2hbMTVdID0gTlNNYXhZKHNjYWxlRnJhbWUpOwotICAgIAotICAgIC8vIEFwcGx5IHRo
ZSB3YXJwLgotICAgIENHU1NldFdpbmRvd1dhcnAobWFpbldpbmRvd1NlcnZlckNvbm5lY3Rpb25J
RCgpLCB3aW5kb3cud2luZG93TnVtYmVyLCAyLCAyLCBtZXNoKTsKLX0KLQotLSAodm9pZClzZXRD
dXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAo
IV93aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzdXBlciBzZXRDdXJyZW50UHJvZ3Jl
c3M6cHJvZ3Jlc3NdOwotCi0gICAgTlNSZWN0IGN1cnJlbnRSZWN0ID0gW3NlbGYgY3VycmVudEZy
YW1lXTsKLSAgICBzZXRTY2FsZWRGcmFtZUZvcldpbmRvdyhfd2luZG93LCBjdXJyZW50UmVjdCwg
X3JlYWxGcmFtZSk7Ci0gICAgW19zdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOnByb2dy
ZXNzXTsKLX0KLQotLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopYW5pbWF0
aW9uCi17Ci0gICAgaWQgb2xkQW5pbWF0aW9uID0gX3N1YkFuaW1hdGlvbjsKLSAgICBfc3ViQW5p
bWF0aW9uID0gW2FuaW1hdGlvbiByZXRhaW5dOwotICAgIFtvbGRBbmltYXRpb24gcmVsZWFzZV07
Ci19Ci0KLS0gKE5TVGltZUludGVydmFsKWFkZGl0aW9uYWxEdXJhdGlvbk5lZWRlZFRvUmVhY2hG
aW5hbEZyYW1lCi17Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgbWF4QWRkaXRpb25hbER1cmF0
aW9uID0gMTsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBzcGVlZEZhY3RvciA9IDAuMDAwMWY7
Ci0gICAgCi0gICAgQ0dGbG9hdCBtYXhEaXN0ID0gc3F1YXJlZERpc3RhbmNlKF9pbml0aWFsRnJh
bWUub3JpZ2luLCBfZmluYWxGcmFtZS5vcmlnaW4pOwotICAgIENHRmxvYXQgZGlzdDsKLSAgICAK
LSAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZy
YW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZy
YW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOwotICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKLSAg
ICAgICAgbWF4RGlzdCA9IGRpc3Q7Ci0gICAgCi0gICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShO
U01ha2VQb2ludChOU01heFgoX2luaXRpYWxGcmFtZSksIE5TTWF4WShfaW5pdGlhbEZyYW1lKSks
IE5TTWFrZVBvaW50KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWF4WShfZmluYWxGcmFtZSkpKTsK
LSAgICBpZiAoZGlzdCA+IG1heERpc3QpCi0gICAgICAgIG1heERpc3QgPSBkaXN0OwotICAgIAot
ICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJh
bWUpLCBOU01pblkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJh
bWUpLCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7Ci0gICAgaWYgKGRpc3QgPiBtYXhEaXN0KQotICAg
ICAgICBtYXhEaXN0ID0gZGlzdDsKLSAgICAKLSAgICByZXR1cm4gTUlOKHNxcnQobWF4RGlzdCkg
KiBzcGVlZEZhY3RvciwgbWF4QWRkaXRpb25hbER1cmF0aW9uKTsgICAgCi19Ci0KLS0gKHZvaWQp
c3RhcnRBbmltYXRpb24KLXsKLSAgICAvLyBDb21wdXRlIGV4dHJhIHRpbWUKLSAgICBpZiAoX2hp
bnRlZER1cmF0aW9uKQotICAgICAgICBbc2VsZiBzZXREdXJhdGlvbjpfaGludGVkRHVyYXRpb24g
KyBbc2VsZiBhZGRpdGlvbmFsRHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZV1dOwotICAg
IFtzdXBlciBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewot
ICAgIF93aW5kb3cgPSBuaWw7Ci0gICAgW3N1cGVyIHN0b3BBbmltYXRpb25dOwotICAgIFtfc3Vi
QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
ZWJXaW5kb3dGYWRlQW5pbWF0aW9uCi0KLS0gKGlkKWluaXQKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBz
ZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsK
LSAgICBbc2VsZiBzZXRGcmFtZVJhdGU6NjBdOwotICAgIFtzZWxmIHNldEFuaW1hdGlvbkN1cnZl
Ok5TQW5pbWF0aW9uRWFzZUluT3V0XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQpaW5p
dFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAq
KXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6KENH
RmxvYXQpZmluYWxBbHBoYQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7ICAgIAotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci0gICAg
X2luaXRpYWxBbHBoYSA9IGluaXRpYWxBbHBoYTsKLSAgICBfZmluYWxBbHBoYSA9IGZpbmFsQWxw
aGE7Ci0gICAgW3NlbGYgc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAg
IFtzdXBlciBzZXREdXJhdGlvbjpXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlv
bihkdXJhdGlvbildOwotfQotCi0tIChDR0Zsb2F0KWN1cnJlbnRBbHBoYQotewotICAgIHJldHVy
biBNQVgoMCwgTUlOKDEsIF9pbml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9m
aW5hbEFscGhhIC0gX2luaXRpYWxBbHBoYSkpKTsKLX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJv
Z3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAoX2lzU3RvcHBl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKF93aW5kb3cpOwotICAgIFtzdXBlciBz
ZXRDdXJyZW50UHJvZ3Jlc3M6cHJvZ3Jlc3NdOwotCi0gICAgQ0dTU2V0V2luZG93QWxwaGEobWFp
bldpbmRvd1NlcnZlckNvbm5lY3Rpb25JRCgpLCBfd2luZG93LndpbmRvd051bWJlciwgc2VsZi5j
dXJyZW50QWxwaGEpOwotfQotCi0tICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cqKXdpbmRvdwot
ewotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewot
ICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgd2hlbiB3ZSBhcmUgYSBzdWIgYW5pbWF0aW9uIG9mIGEg
c2NhbGUgYW5pbWF0aW9uLgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgaG9zdGVkIGluIHRo
ZSBhbmltYXRlZCB0aHJlYWQgb2YgdGhlIHBhcmVudAotICAgIC8vIGFuZCBldmVuIGFmdGVyIFtz
dXBlciBzdG9wQW5pbWF0aW9uXSwgdGhlIHBhcmVudCBtaWdodCBjYWxsCi0gICAgLy8gc2V0Q3Vy
cnJlbnRQcm9ncmVzcy4KLSAgICBfaXNTdG9wcGVkID0gWUVTOwotCi0gICAgW3N1cGVyIHN0b3BB
bmltYXRpb25dOwotfQotCi1AZW5kCi0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0KX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MjkwKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxOC0wMi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20gV2ViQ29y
ZSB0byBXZWJLaXRMZWdhY3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODI2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBhIGZldyBy
ZWZlcmVuY2VzIHRvIE5TQXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0uCisg
ICAgICAgIElkZWFsbHksIHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdlYkNvcmUu
CisKKyAgICAgICAgKiBXZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxOC0wMS0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVzZSBDb21wbGV0aW9uSGFuZGxlcnMgZm9yIFJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJL
aXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NzQsNiArNzc0LDkgQEAKIAkJ
QzBCODhFOEIxMEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBCODhFOEEx
MEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMwQzVCM0VFMTE3N0E0
QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQzVCM0VDMTE3N0E0QTAwMDJCMEFFRiAv
KiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDMEM1QjNFRjExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzBDNUIzRUQxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJM
UGF0dGVybi5tbSAqLzsgfTsKKwkJQzFEODExMjgyMDJDRDgwMDAwRUU3NEY5IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJQzFEODExMkIyMDJDRENDNDAwRUU3NEY5IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMUQ4MTEyOTIwMkNEQ0MyMDBFRTc0RjkgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKKwkJQzFEODEx
MkUyMDJDRUQwODAwRUU3NEY5IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMxRDgxMTJEMjAyQ0VEMDcwMEVFNzRG
OSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gKi87IH07CiAJCUNEOEJGQ0U3MTU1MzEyMjQwMDVB
RkIyNSAvKiBXZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUgLyogV2Vi
S2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tICovOyB9OwogCQlDRDhCRkNFODE1NTMxMjI0MDA1QUZC
MjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0
RnVsbFNjcmVlbkxpc3RlbmVyLmggKi87IH07CiAJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAv
KiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLmggKi87IH07CkBAIC0xNTI1LDYgKzE1MjgsMTIgQEAKIAkJQzBCODhFOEEx
MEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUIzRUMxMTc3QTRBMDAwMkIwQUVGIC8q
IFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzBDNUIzRUQxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVy
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlVzZXJDb250
ZW50VVJMUGF0dGVybi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMjYy
MDJDRDdGRTAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyNzIwMkNEODAwMDBFRTc0Rjkg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRGOSAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMkEyMDJDRENDMzAwRUU3
NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyQzIwMkNFRDA2MDBF
RTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMUQ4MTEyRDIwMkNFRDA3MDBFRTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUg
LyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNj
cmVlbkxpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEZ1
bGxTY3JlZW5MaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE2MkFF
MDEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzAsMTIgKzIwNzksMTggQEAKIAkJCQlGODM0QUFE
NjBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLm1tICovLAogCQkJCTUxNUUyN0ND
MDQ1OEM4NjUwMENBMkQzQSAvKiBXZWJVSURlbGVnYXRlLmggKi8sCiAJCQkJNjVBN0Q0NEEwNTY4
QUIyNjAwRTcwRUY2IC8qIFdlYlVJRGVsZWdhdGVQcml2YXRlLmggKi8sCisJCQkJQzFEODExMjYy
MDJDRDdGRTAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKKwkJ
CQlDMUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ci5tbSAqLywKKwkJCQlDMUQ4MTEyQTIwMkNEQ0MzMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5oICovLAorCQkJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRG
OSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovLAogCQkJCTUx
QThCNTc5MDQyODM0RjcwMENBMkQzQSAvKiBXZWJWaWV3LmggKi8sCiAJCQkJNTFBOEI1N0EwNDI4
MzRGNzAwQ0EyRDNBIC8qIFdlYlZpZXcubW0gKi8sCiAJCQkJQkMyRTQ2NEIwRkQ4QTk2ODAwQTlE
OURFIC8qIFdlYlZpZXdEYXRhLmggKi8sCiAJCQkJQkMyRTQ2NEMwRkQ4QTk2ODAwQTlEOURFIC8q
IFdlYlZpZXdEYXRhLm1tICovLAogCQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2NzAxRSAvKiBXZWJW
aWV3SW50ZXJuYWwuaCAqLywKIAkJCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyogV2ViVmll
d1ByaXZhdGUuaCAqLywKKwkJCQlDMUQ4MTEyQzIwMkNFRDA2MDBFRTc0RjkgLyogV2ViV2luZG93
QW5pbWF0aW9uLmggKi8sCisJCQkJQzFEODExMkQyMDJDRUQwNzAwRUU3NEY5IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gV2ViVmlldzsKIAkJCXBhdGggPSBt
YWMvV2ViVmlldzsKQEAgLTM2NzIsMTEgKzM2ODcsMTQgQEAKIAkJCQlDMEM1QjNFRjExNzdBNEEw
MDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDcwRjU0OUMxN0YxRTQyQjAwMTY5RTA0IC8qIFdlYlVzZXJNZWRpYUNsaWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTQ2MThERkY5MURFRjc2MEEwMDMzQzNBQSAvKiBXZWJWYWxpZGF0aW9u
TWVzc2FnZUNsaWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUMxRDgxMTI4MjAyQ0Q4MDAwMEVF
NzRGOSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzFEODExMkIyMDJDRENDNDAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTEwNzA4MjRCRjAxMDA4REYw
MzggLyogV2ViVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMkU0NjRFMEZEOEE5NjgwMEE5
RDlERSAvKiBXZWJWaWV3RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MzBDMTJDMUIyQzVE
RjcwMERFQTAxRCAvKiBXZWJWaWV3R3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFE
NzcxODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBQzcxNzZFMUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQzFEODExMkUyMDJDRUQwODAwRUU3NEY5IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzcwOSw5ICszNzI3LDcgQEAKIAkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMUM5MDRGRDIwQkE5REQwRjAwODFFOUQwIC8qIFdl
YktpdExlZ2FjeS54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJREVCVUdf
REVGSU5FUyA9ICIkKERFQlVHX0RFRklORVNfZGVidWcpIEVOQUJMRV9XRUJLSVRfVU5TRVRfRFlM
RF9GUkFNRVdPUktfUEFUSCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICgKLQkJCQkJIiQoT1RIRVJf
TERGTEFHUykiLAotCQkJCSk7CisJCQkJT1RIRVJfTERGTEFHUyA9ICIkKE9USEVSX0xERkxBR1Mp
IjsKIAkJCX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07CkBAIC0zNzIwLDkgKzM3MzYsNyBAQAog
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQzkwNEZEMjBCQTlERDBGMDA4MUU5RDAg
LyogV2ViS2l0TGVnYWN5LnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlE
RUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpIEVOQUJM
RV9XRUJLSVRfVU5TRVRfRFlMRF9GUkFNRVdPUktfUEFUSCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9
ICgKLQkJCQkJIiQoT1RIRVJfTERGTEFHUykiLAotCQkJCSk7CisJCQkJT1RIRVJfTERGTEFHUyA9
ICIkKE9USEVSX0xERkxBR1MpIjsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKQEAg
LTM3MzEsOSArMzc0NSw3IEBACiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDFDOTA0
RkQyMEJBOUREMEYwMDgxRTlEMCAvKiBXZWJLaXRMZWdhY3kueGNjb25maWcgKi87CiAJCQlidWls
ZFNldHRpbmdzID0gewogCQkJCUJVSUxEX1ZBUklBTlRTID0gbm9ybWFsOwotCQkJCU9USEVSX0xE
RkxBR1MgPSAoCi0JCQkJCSIkKE9USEVSX0xERkxBR1MpIiwKLQkJCQkpOworCQkJCU9USEVSX0xE
RkxBR1MgPSAiJChPVEhFUl9MREZMQUdTKSI7CiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjgyNzgp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMiBAQAorMjAxOC0wMi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20g
V2ViQ29yZSB0byBXZWJLaXRMZWdhY3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODI2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJdCBpcyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBh
IGZldyByZWZlcmVuY2VzIHRvIE5TQXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
bW0uCisgICAgICAgIElkZWFsbHksIHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdl
YkNvcmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0uCisgICAgICAgICogV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmguCisgICAgICAgICog
V2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlci5tbS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAg
ICogV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oLgorICAgICAgICAqIFdlYlZpZXcv
V2ViV2luZG93QW5pbWF0aW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLm1tLgorCiAyMDE4LTAxLTEzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBFdmVudCBpbXByb3ZlbWVudHMKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5tbQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiV2ViTlNXaW5kb3dFeHRyYXMuaCIKICNpbXBvcnQg
IldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KQEAgLTQyLDcgKzQzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29y
ZUZ1bGxTY3JlZW5XaW5kb3cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViV2luZG93QW5pbWF0aW9u
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcu
aD4KIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyODI3OCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIuaDoyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxl
ci5oPgorI2ltcG9ydCA8QXBwS2l0L05TU2NyZWVuLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBQQUwgeworY2xhc3MgU2xlZXBEaXNhYmxlcjsKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK30KKworQHByb3RvY29sIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKK0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdlYldpbmRvd0ZhZGVBbmltYXRpb247CitA
Y2xhc3MgQ0FMYXllcjsKKworV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIDogTlNXaW5kb3dDb250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgUmVm
UHRyPFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7IC8vIChyZXRhaW4p
CisgICAgaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRl
OyAvLyAoYXNzaWduKQorCisgICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRv
dzsgLy8gKHJldGFpbikKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
ICpfaHVkQ29udHJvbGxlcjsgLy8gKHJldGFpbikKKworICAgIFdlYldpbmRvd0ZhZGVBbmltYXRp
b24gKl9mYWRlQW5pbWF0aW9uOyAvLyAocmV0YWluKQorCisgICAgQk9PTCBfaXNFbmRpbmdGdWxs
c2NyZWVuOworICAgIEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQQUw6OlNsZWVwRGlzYWJsZXI+IF9kaXNwbGF5U2xlZXBEaXNhYmxlcjsKK30KKwor
LSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7Cist
ICh2b2lkKXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVn
YXRlPilkZWxlZ2F0ZTsKKworLSAodm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5
ZXI7CistICh2b2lkKXNldFZpZGVvRWxlbWVudDooV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCop
dmlkZW9FbGVtZW50OworLSAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50
OworCistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47CistICh2b2lk
KWV4aXRGdWxsc2NyZWVuOworCitAZW5kCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDggKzI3LDggQEAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPKQogCi0jaW1w
b3J0IDxBcHBLaXQvTlNXaW5kb3dDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNTY3Jl
ZW4uaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1dpbmRvd0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFBBTCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyLm1tCShyZXZpc2lvbiAyMjgyNzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tOjIyODI3OCkKKysrIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgorI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KKyNpbXBvcnQgPHBhbC9zeXN0ZW0vU2xlZXBEaXNhYmxlci5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK3VzaW5nIFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ7CisKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorCitTT0ZUX0xJTktfRlJBTUVXT1JL
KEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5
ZXIpCisKK3VzaW5nIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWE7CitAaW50ZXJmYWNlIFdlYlZpZGVv
RnVsbHNjcmVlbldpbmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+Cit7CisgICAg
U0VMIF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQ7CisgICAgV2ViV2luZG93U2NhbGVB
bmltYXRpb24gKl9mdWxsc2NyZWVuQW5pbWF0aW9uOyAvLyAocmV0YWluKQorfQorLSAodm9pZClh
bmltYXRlRnJvbVJlY3Q6KE5TUmVjdClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3
aXRoU3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0
aW9uOihTRUwpY29udHJvbGxlckFjdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyKEhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSkgPFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKy0gKHZvaWQpcmVxdWVzdEV4
aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247CistICh2b2lkKXVwZGF0
ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbjsKKy0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRpb25z
OworQGVuZAorCitAaW50ZXJmYWNlIE5TV2luZG93KElzT25BY3RpdmVTcGFjZUFkZGl0aW9uRm9y
VGlnZXJBbmRMZW9wYXJkKQorLSAoQk9PTClpc09uQWN0aXZlU3BhY2U7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCistIChpZClpbml0Cit7Cisg
ICAgLy8gRG8gbm90IGRlZmVyIHdpbmRvdyBjcmVhdGlvbiwgdG8gbWFrZSBzdXJlIC13aW5kb3dO
dW1iZXIgaXMgY3JlYXRlZCAobmVlZGVkIGJ5IFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uKS4KKyAg
ICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgYWxsb2NdIGlu
aXRXaXRoQ29udGVudFJlY3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93
TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiB3aW5kb3dEaWRM
b2FkXTsKKyAgICByZXR1cm4gc2VsZjsKKyAgICAKK30KKy0gKHZvaWQpZGVhbGxvYworeworICAg
IEFTU0VSVCghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KTsKKyAgICBBU1NFUlQoIV9mYWRl
QW5pbWF0aW9uKTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOnNlbGZdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoV2ViVmlk
ZW9GdWxsc2NyZWVuV2luZG93ICopZnVsbHNjcmVlbldpbmRvdworeworICAgIHJldHVybiAoV2Vi
VmlkZW9GdWxsc2NyZWVuV2luZG93ICopW3N1cGVyIHdpbmRvd107Cit9CisKKy0gKHZvaWQpc2V0
dXBWaWRlb092ZXJsYXk6KENBTGF5ZXIgKilsYXllcgoreworICAgIFdlYlZpZGVvRnVsbHNjcmVl
bldpbmRvdyAqd2luZG93ID0gW3NlbGYgZnVsbHNjcmVlbldpbmRvd107CisgICAgWyhOU1ZpZXcq
KVt3aW5kb3cgY29udGVudFZpZXddIHNldExheWVyOmxheWVyXTsKKyAgICBbW3dpbmRvdyBjb250
ZW50Vmlld10gc2V0V2FudHNMYXllcjpZRVNdOworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQK
K3sKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxzY3Jl
ZW5XaW5kb3ddOworICAgIFt3aW5kb3cgc2V0SGFzU2hhZG93OllFU107IC8vIFRoaXMgaXMgbmlj
ZXIgd2l0aCBhIHNoYWRvdy4KKyAgICBbd2luZG93IHNldExldmVsOk5TUG9wVXBNZW51V2luZG93
TGV2ZWwtMV07CisgICAgWyhOU1ZpZXcqKVt3aW5kb3cgY29udGVudFZpZXddIHNldExheWVyOltD
QUxheWVyIGxheWVyXV07CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6
WUVTXTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6
KSBuYW1lOk5TQXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Ok5T
QXBwXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFy
YW1ldGVyczopIG5hbWU6TlNBcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnNOb3Rp
ZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKK30KKworLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9F
bGVtZW50Cit7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7Cit9CisKKy0gKHZvaWQp
c2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKK3sKKyAgICBf
dmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCisgICAgaWYgKCFfdmlkZW9FbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3NlbGYgaXNXaW5kb3dMb2FkZWRdKSB7CisgICAg
ICAgIGlmIChfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1l
ZGlhOjpBVkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGUpIHsKKyAgICAgICAgICAgIEFWUGxheWVy
ICpwbGF5ZXIgPSBfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEuYXZmTWVkaWFQ
bGF5ZXI7CisgICAgICAgICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJMYXllcj4gbGF5ZXIgPSBhZG9w
dE5TKFthbGxvY0FWUGxheWVyTGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICAgICAgICAgIFtz
ZWxmIHNldHVwVmlkZW9PdmVybGF5OmxheWVyLmdldCgpXTsKKyAgICAgICAgICAgIFtsYXllci5n
ZXQoKSBzZXRQbGF5ZXI6cGxheWVyXTsKKworICAgICAgICAgICAgW3BsYXllciBhZGRPYnNlcnZl
cjpzZWxmIGZvcktleVBhdGg6QCJyYXRlIiBvcHRpb25zOjAgY29udGV4dDpudWxscHRyXTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworLSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJE
ZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQorCistICh2b2lk
KXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilk
ZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChDR0Zsb2F0KWNs
ZWFyRmFkZUFuaW1hdGlvbgoreworICAgIFtfZmFkZUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsK
KyAgICBDR0Zsb2F0IHByZXZpb3VzQWxwaGEgPSBbX2ZhZGVBbmltYXRpb24gY3VycmVudEFscGhh
XTsKKyAgICBbX2ZhZGVBbmltYXRpb24gc2V0V2luZG93Om5pbF07CisgICAgW19mYWRlQW5pbWF0
aW9uIHJlbGVhc2VdOworICAgIF9mYWRlQW5pbWF0aW9uID0gbmlsOworICAgIHJldHVybiBwcmV2
aW91c0FscGhhOworfQorCistICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCit7CisgICAg
Q0FMYXllciAqbGF5ZXIgPSBbKE5TVmlldyopW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGxh
eWVyXTsKKyAgICBpZiAoW2xheWVyIGlzS2luZE9mQ2xhc3M6Z2V0QVZQbGF5ZXJMYXllckNsYXNz
KCldKQorICAgICAgICBbWyhBVlBsYXllckxheWVyKilsYXllciBwbGF5ZXJdIHJlbW92ZU9ic2Vy
dmVyOnNlbGYgZm9yS2V5UGF0aDpAInJhdGUiXTsKKworICAgIFtzZWxmIGNsZWFyRmFkZUFuaW1h
dGlvbl07CisgICAgW1tzZWxmIHdpbmRvd10gY2xvc2VdOworICAgIFtzZWxmIHNldFdpbmRvdzpu
aWxdOworICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07ICAgCisgICAg
W3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6bmlsXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgX2h1ZENvbnRy
b2xsZXIgPSBuaWw7CisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBjbG9zZV07Cisg
ICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyByZWxlYXNlXTsKKyAgICBfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgPSBuaWw7CisgICAgCisgICAgW3NlbGYgYXV0b3JlbGVhc2VdOyAv
LyBBc3NvY2lhdGVkIC1yZXRhaW4gaXMgaW4gLWV4aXRGdWxsc2NyZWVuLgorICAgIF9pc0VuZGlu
Z0Z1bGxzY3JlZW4gPSBOTzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4K
K3sKKyAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOworCisgICAgQVNTRVJUKCFfaHVkQ29u
dHJvbGxlcik7CisgICAgX2h1ZENvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOworICAgIFtfaHVkQ29udHJvbGxlciBzZXREZWxl
Z2F0ZTpzZWxmXTsKKworICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07
CisgICAgW3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICBbTlNDdXJzb3Igc2V0SGlk
ZGVuVW50aWxNb3VzZU1vdmVzOllFU107CisgICAgCisgICAgLy8gR2l2ZSB0aGUgSFVEIGtleWJv
YXJkIGZvY3VzIGluaXRpYWxseQorICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOwor
fQorCistIChOU1JlY3QpdmlkZW9FbGVtZW50UmVjdAoreworICAgIHJldHVybiBfdmlkZW9FbGVt
ZW50LT5zY3JlZW5SZWN0KCk7Cit9CisKKy0gKHZvaWQpYXBwbGljYXRpb25EaWRSZXNpZ25BY3Rp
dmU6KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb24KK3sgICAKKyAgICBVTlVTRURfUEFSQU0o
bm90aWZpY2F0aW9uKTsKKyAgICBOU1dpbmRvdyogZnVsbHNjcmVlbldpbmRvdyA9IFtzZWxmIGZ1
bGxzY3JlZW5XaW5kb3ddOworCisgICAgLy8gUmVwbGljYXRlIHRoZSBRdWlja1RpbWUgUGxheWVy
IChYKSBiZWhhdmlvciB3aGVuIGxvc2luZyBhY3RpdmUgYXBwbGljYXRpb24gc3RhdHVzOgorICAg
IC8vIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVlbiB0aGUgbWFpbiBzY3JlZW4/IChOb3RlOiB0aGlz
IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBvbmx5IGEgCisgICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBh
dmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNl
PyBJRkYgc28sIAorICAgIC8vIHRoZW4gZXhpdCBmdWxsc2NyZWVuIG1vZGUuICAgIAorICAgIGlm
IChmdWxsc2NyZWVuV2luZG93LnNjcmVlbiA9PSBbTlNTY3JlZW4gc2NyZWVuc11bMF0gJiYgZnVs
bHNjcmVlbldpbmRvdy5vbkFjdGl2ZVNwYWNlKQorICAgICAgICAgW3NlbGYgcmVxdWVzdEV4aXRG
dWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107Cit9CisgICAgICAgICAKKyAgICAgICAgIAorLy8g
TUFSSzogLQorLy8gTUFSSzogRXhwb3NlZCBJbnRlcmZhY2UKKworc3RhdGljIE5TUmVjdCBmcmFt
ZUV4cGFuZGVkVG9SYXRpb09mRnJhbWUoTlNSZWN0IGZyYW1lVG9FeHBhbmQsIE5TUmVjdCBmcmFt
ZSkKK3sKKyAgICAvLyBLZWVwIGEgY29uc3RyYWluZWQgYXNwZWN0IHJhdGlvIGZvciB0aGUgZGVz
dGluYXRpb24gd2luZG93CisgICAgTlNSZWN0IHJlc3VsdCA9IGZyYW1lVG9FeHBhbmQ7CisgICAg
Q0dGbG9hdCBuZXdSYXRpbyA9IGZyYW1lLnNpemUud2lkdGggLyBmcmFtZS5zaXplLmhlaWdodDsK
KyAgICBDR0Zsb2F0IG9yaWdpbmFsUmF0aW8gPSBmcmFtZVRvRXhwYW5kLnNpemUud2lkdGggLyBm
cmFtZVRvRXhwYW5kLnNpemUuaGVpZ2h0OworICAgIGlmIChuZXdSYXRpbyA+IG9yaWdpbmFsUmF0
aW8pIHsKKyAgICAgICAgQ0dGbG9hdCBuZXdXaWR0aCA9IG5ld1JhdGlvICogZnJhbWVUb0V4cGFu
ZC5zaXplLmhlaWdodDsKKyAgICAgICAgQ0dGbG9hdCBkaWZmID0gbmV3V2lkdGggLSBmcmFtZVRv
RXhwYW5kLnNpemUud2lkdGg7CisgICAgICAgIHJlc3VsdC5zaXplLndpZHRoID0gbmV3V2lkdGg7
CisgICAgICAgIHJlc3VsdC5vcmlnaW4ueCAtPSBkaWZmIC8gMjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBDR0Zsb2F0IG5ld0hlaWdodCA9IGZyYW1lVG9FeHBhbmQuc2l6ZS53aWR0aCAvIG5ld1Jh
dGlvOworICAgICAgICBDR0Zsb2F0IGRpZmYgPSBuZXdIZWlnaHQgLSBmcmFtZVRvRXhwYW5kLnNp
emUuaGVpZ2h0OworICAgICAgICByZXN1bHQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7CisgICAg
ICAgIHJlc3VsdC5vcmlnaW4ueSAtPSBkaWZmIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIE5TV2luZG93ICpjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRv
dyhOU1JlY3QgZnJhbWUsIGludCBsZXZlbCkKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tO
U1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpmcmFtZSBzdHlsZU1hc2s6TlNCb3Jk
ZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9d
OworICAgIFt3aW5kb3cgc2V0T3BhcXVlOllFU107CisgICAgW3dpbmRvdyBzZXRCYWNrZ3JvdW5k
Q29sb3I6W05TQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFt3aW5kb3cgc2V0TGV2ZWw6bGV2ZWxd
OworICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICByZXR1cm4gd2lu
ZG93OworfQorCistICh2b2lkKXNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOihC
T09MKWZhZGVJbgoreworICAgIENHRmxvYXQgaW5pdGlhbEFscGhhID0gZmFkZUluID8gMCA6IDE7
CisgICAgaWYgKF9mYWRlQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdXBw
b3J0IHF1ZXVpbmcgYW5pbWF0aW9uIGlmIHRoZSBwcmV2aW91cyBvbmUgaXNuJ3Qgb3ZlciB5ZXQK
KyAgICAgICAgaW5pdGlhbEFscGhhID0gW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKyAgICB9
CisgICAgaWYgKCFfZm9yY2VEaXNhYmxlQW5pbWF0aW9uKQorICAgICAgICBfZmFkZUFuaW1hdGlv
biA9IFtbV2ViV2luZG93RmFkZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjowLjIg
d2luZG93Ol9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBpbml0aWFsQWxwaGE6aW5pdGlhbEFs
cGhhIGZpbmFsQWxwaGE6ZmFkZUluID8gMSA6IDBdOworfQorCistICh2b2lkKWVudGVyRnVsbHNj
cmVlbjooTlNTY3JlZW4gKilzY3JlZW4KK3sKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgc2Ny
ZWVuID0gW05TU2NyZWVuIG1haW5TY3JlZW5dOworCisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3Nj
cmVlbiBmcmFtZV07CisgICAgTlNSZWN0IGZyYW1lID0gZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZy
YW1lKFtzZWxmIHZpZGVvRWxlbWVudFJlY3RdLCBlbmRGcmFtZSk7CisKKyAgICAvLyBDcmVhdGUg
YSBibGFjayB3aW5kb3cgaWYgbmVlZGVkCisgICAgaWYgKCFfYmFja2dyb3VuZEZ1bGxzY3JlZW5X
aW5kb3cpCisgICAgICAgIF9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyA9IGNyZWF0ZUJhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93KFtzY3JlZW4gZnJhbWVdLCBbW3NlbGYgd2luZG93XSBsZXZl
bF0tMSk7CisgICAgZWxzZQorICAgICAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IHNl
dEZyYW1lOltzY3JlZW4gZnJhbWVdIGRpc3BsYXk6Tk9dOworCisgICAgW3NlbGYgc2V0dXBGYWRl
QW5pbWF0aW9uSWZOZWVkZWRBbmRGYWRlSW46WUVTXTsKKyAgICBpZiAoX2ZvcmNlRGlzYWJsZUFu
aW1hdGlvbikgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmltYXRpb24K
KyAgICAgICAgZnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICBbW3NlbGYgZnVsbHNjcmVl
bldpbmRvd10gYW5pbWF0ZUZyb21SZWN0OmZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRoU3ViQW5p
bWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdpbmRvd0Rp
ZEVudGVyRnVsbHNjcmVlbildOworCisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBv
cmRlcldpbmRvdzpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86W1tzZWxmIGZ1bGxzY3JlZW5XaW5k
b3ddIHdpbmRvd051bWJlcl1dOworfQorCistICh2b2lkKWV4aXRGdWxsc2NyZWVuCit7CisgICAg
aWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBfaXNFbmRpbmdG
dWxsc2NyZWVuID0gWUVTOworICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CisKKyAg
ICBOU1JlY3QgZW5kRnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKKworICAgIFtzZWxm
IHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOk5PXTsKKyAgICBpZiAoX2ZvcmNl
RGlzYWJsZUFuaW1hdGlvbikgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBh
bmltYXRpb24KKyAgICAgICAgZW5kRnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICAKKyAg
ICAvLyBXZSBoYXZlIHRvIHJldGFpbiBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFs
aXZlIGZvciB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uCisgICAgLy8gSWYgb3VyIG93bmVyIHJl
bGVhc2VzIHVzIHdlIGNvdWxkIGNyYXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorICAgIC8v
IEJhbGFuY2VkIGluIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCisgICAgW3NlbGYgcmV0YWluXTsg
ICAgCisKKyAgICBOU1JlY3Qgc3RhcnRGcmFtZSA9IFtbc2VsZiB3aW5kb3ddIGZyYW1lXTsKKyAg
ICBlbmRGcmFtZSA9IGZyYW1lRXhwYW5kZWRUb1JhdGlvT2ZGcmFtZShlbmRGcmFtZSwgc3RhcnRG
cmFtZSk7CisKKyAgICBbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0ZUZyb21SZWN0OnN0
YXJ0RnJhbWUgdG9SZWN0OmVuZEZyYW1lIHdpdGhTdWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24g
Y29udHJvbGxlckFjdGlvbjpAc2VsZWN0b3Iod2luZG93RGlkRXhpdEZ1bGxzY3JlZW4pXTsKK30K
KworLSAodm9pZClhcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KE5TTm90aWZp
Y2F0aW9uKilub3RpZmljYXRpb24KK3sKKyAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsK
KyAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBtYWluIHNjcmVlbiBieSBtb3Zp
bmcgdGhlIG1lbnUgYmFyLCBvciB0aGV5IG1heSBoYXZlIGNoYW5nZWQKKyAgICAvLyB0aGUgRG9j
aydzIHNpemUgb3IgbG9jYXRpb24sIG9yIHRoZXkgbWF5IGhhdmUgY2hhbmdlZCB0aGUgZnVsbHNj
cmVlbiBzY3JlZW4ncyBkaW1lbnNpb25zLiAgCisgICAgLy8gVXBkYXRlIG91ciBwcmVzZW50YXRp
b24gcGFyYW1ldGVycywgYW5kIGVuc3VyZSB0aGF0IHRoZSBmdWxsIHNjcmVlbiB3aW5kb3cgb2Nj
dXBpZXMgdGhlIAorICAgIC8vIGVudGlyZSBzY3JlZW46CisgICAgW3NlbGYgdXBkYXRlTWVudUFu
ZERvY2tGb3JGdWxsc2NyZWVuXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTpbW1tzZWxm
IHdpbmRvd10gc2NyZWVuXSBmcmFtZV0gZGlzcGxheTpZRVNdOworfQorCistICh2b2lkKXVwZGF0
ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgoreworICAgIC8vIE5TQXBwbGljYXRpb25QcmVzZW50
YXRpb25PcHRpb25zIGlzIGF2YWlsYWJsZSBvbiA+IDEwLjYgb25seToKKyAgICBOU0FwcGxpY2F0
aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBvcHRpb25zID0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlv
bkRlZmF1bHQ7CisgICAgTlNTY3JlZW4qIGZ1bGxzY3JlZW5TY3JlZW4gPSBbW3NlbGYgd2luZG93
XSBzY3JlZW5dOworCisgICAgaWYgKCFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CisgICAgICAgIC8v
IEF1dG8taGlkZSB0aGUgbWVudSBiYXIgaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMg
dGhlIG1lbnUgYmFyOgorICAgICAgICAvLyBOT1RFOiBpZiB0aGUgZnVsbHNjcmVlblNjcmVlbiBj
b250YWlucyB0aGUgbWVudSBiYXIgYnV0IG5vdCB0aGUgZG9jaywgd2UgbXVzdCBzdGlsbCAKKyAg
ICAgICAgLy8gYXV0by1oaWRlIHRoZSBkb2NrLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJv
d24uCisgICAgICAgIGlmIChbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gPT0g
ZnVsbHNjcmVlblNjcmVlbikKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gKE5TQXBwbGljYXRpb25Q
cmVzZW50YXRpb25BdXRvSGlkZU1lbnVCYXIgfCBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0
b0hpZGVEb2NrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgc2NyZWVuIGNvbnRh
aW5zIHRoZSBkb2NrIGJ5IGNvbXBhcmluZyB0aGUgc2NyZWVuJ3MgZnJhbWUgdG8gaXRzCisgICAg
ICAgIC8vIHZpc2libGVGcmFtZTsgaWYgYSBkb2NrIGlzIHByZXNlbnQsIHRoZSB2aXNpYmxlRnJh
bWUgd2lsbCBkaWZmZXIuICBJZiB0aGUgY3VycmVudCBzY3JlZW4KKyAgICAgICAgLy8gY29udGFp
bnMgdGhlIGRvY2ssIGhpZGUgaXQuCisgICAgICAgIGVsc2UgaWYgKCFOU0VxdWFsUmVjdHMoW2Z1
bGxzY3JlZW5TY3JlZW4gZnJhbWVdLCBbZnVsbHNjcmVlblNjcmVlbiB2aXNpYmxlRnJhbWVdKSkK
KyAgICAgICAgICAgIG9wdGlvbnMgfD0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRl
RG9jazsKKyAgICB9CisKKyAgICBOU0FwcC5wcmVzZW50YXRpb25PcHRpb25zID0gb3B0aW9uczsK
K30KKworLSAodm9pZCl1cGRhdGVQb3dlckFzc2VydGlvbnMKK3sKKyAgICBfZGlzcGxheVNsZWVw
RGlzYWJsZXIgPSBudWxscHRyOworfQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBXaW5kb3cgY2Fs
bGJhY2sKKworLSAodm9pZClfcmVxdWVzdEV4aXQKK3sKKyAgICBpZiAoX3ZpZGVvRWxlbWVudCkK
KyAgICAgICAgX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uID0gTk87Cit9CisKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0
aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb24KK3sKKyAgICBpZiAoX2lzRW5kaW5nRnVsbHNjcmVl
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmlt
YXRpb247CisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4aXQp
IHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CisKK30KKworLSAodm9pZClyZXF1ZXN0RXhp
dEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0
aW9uOllFU107Cit9CisKKy0gKHZvaWQpZmFkZUhVREluCit7CisgICAgW19odWRDb250cm9sbGVy
IGZhZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNT
dHJpbmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnkg
KiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAgICBVTlVTRURfUEFSQU0ob2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4
dCk7CisKKyAgICBpZiAoW2tleVBhdGggaXNFcXVhbFRvOkAicmF0ZSJdKQorICAgICAgICBbc2Vs
ZiByYXRlQ2hhbmdlZDpuaWxdOworfQorCistICh2b2lkKXJhdGVDaGFuZ2VkOihOU05vdGlmaWNh
dGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3Rp
ZmljYXRpb24pOworICAgIFtfaHVkQ29udHJvbGxlciB1cGRhdGVSYXRlXTsKKyAgICBbc2VsZiB1
cGRhdGVQb3dlckFzc2VydGlvbnNdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJW
aWRlb0Z1bGxzY3JlZW5XaW5kb3cKKworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0
KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNr
aW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNF
RF9QQVJBTShhU3R5bGUpOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpj
b250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZl
cmluZ1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9y
OltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6
Tk9dOworICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2Z1bGxzY3Jl
ZW5BbmltYXRpb24pOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoQk9PTClyZXNpZ25G
aXJzdFJlc3BvbmRlcgoreworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTCljYW5CZWNvbWVL
ZXlXaW5kb3cKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2
ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQpOworfQorCistICh2
b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIHJlcXVlc3RFeGl0RnVsbHNjcmVlbl07
Cit9CisKKy0gKHZvaWQpYW5pbWF0ZWRSZXNpemVEaWRFbmQKK3sKKyAgICAvLyBDYWxsIG91ciB3
aW5kb3dDb250cm9sbGVyLgorICAgIGlmIChfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5k
KQorICAgICAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gcGVyZm9ybVNlbGVjdG9yOl9jb250
cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmRdOworICAgIF9jb250cm9sbGVyQWN0aW9uT25Bbmlt
YXRpb25FbmQgPSBOVUxMOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGFuaW1hdGUg
YSBjaGFuZ2Ugb2YgZnJhbWUgcmVjdGFuZ2xlCisvLyBXZSBzdXBwb3J0IHF1ZXVpbmcgYW5pbWF0
aW9uLCB0aGF0IG1lYW5zIHRoYXQgd2UnbGwgY29ycmVjdGx5CisvLyBpbnRlcnJ1cHQgdGhlIHJ1
bm5pbmcgYW5pbWF0aW9uLCBhbmQgcXVldWUgdGhlIG5leHQgb25lLgorLy8KKy0gKHZvaWQpYW5p
bWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRSZWN0IHRvUmVjdDooTlNSZWN0KWVuZFJlY3Qgd2l0
aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilzdWJBbmltYXRpb24gY29udHJvbGxlckFjdGlv
bjooU0VMKWNvbnRyb2xsZXJBY3Rpb24KK3sKKyAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0
aW9uRW5kID0gY29udHJvbGxlckFjdGlvbjsKKworICAgIEJPT0wgd2FzQW5pbWF0aW5nID0gTk87
CisgICAgaWYgKF9mdWxsc2NyZWVuQW5pbWF0aW9uKSB7CisgICAgICAgIHdhc0FuaW1hdGluZyA9
IFlFUzsKKworICAgICAgICAvLyBJbnRlcnJ1cHQgYW55IHJ1bm5pbmcgYW5pbWF0aW9uLgorICAg
ICAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisKKyAgICAgICAgLy8g
U2F2ZSB0aGUgY3VycmVudCByZWN0IHRvIGVuc3VyZSBhIHNtb290aCB0cmFuc2l0aW9uLgorICAg
ICAgICBzdGFydFJlY3QgPSBbX2Z1bGxzY3JlZW5BbmltYXRpb24gY3VycmVudEZyYW1lXTsKKyAg
ICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHJlbGVhc2VdOworICAgICAgICBfZnVsbHNjcmVl
bkFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisgICAgCisgICAgaWYgKE5TSXNFbXB0eVJlY3Qoc3Rh
cnRSZWN0KSB8fCBOU0lzRW1wdHlSZWN0KGVuZFJlY3QpKSB7CisgICAgICAgIC8vIEZha2VseSBl
bmQgdGhlIHN1YmFuaW1hdGlvbi4KKyAgICAgICAgW3N1YkFuaW1hdGlvbiBzZXRDdXJyZW50UHJv
Z3Jlc3M6MV07CisgICAgICAgIC8vIEFuZCByZW1vdmUgdGhlIHdlYWsgbGluayB0byB0aGUgd2lu
ZG93LgorICAgICAgICBbc3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworCisgICAgICAgIFtz
ZWxmIHNldEZyYW1lOmVuZFJlY3QgZGlzcGxheTpOT107CisgICAgICAgIFtzZWxmIG1ha2VLZXlB
bmRPcmRlckZyb250OnNlbGZdOworICAgICAgICBbc2VsZiBhbmltYXRlZFJlc2l6ZURpZEVuZF07
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXdhc0FuaW1hdGluZykgeworICAg
ICAgICAvLyBXZSdsbCBkb3duc2NhbGUgdGhlIHdpbmRvdyBkdXJpbmcgdGhlIGFuaW1hdGlvbiBi
YXNlZCBvbiB0aGUgaGlnaGVyIHJlc29sdXRpb24gcmVjdAorICAgICAgICBCT09MIGhpZ2hlclJl
c29sdXRpb25Jc0VuZFJlY3QgPSBzdGFydFJlY3Quc2l6ZS53aWR0aCA8IGVuZFJlY3Quc2l6ZS53
aWR0aCAmJiBzdGFydFJlY3Quc2l6ZS5oZWlnaHQgPCBlbmRSZWN0LnNpemUuaGVpZ2h0OworICAg
ICAgICBbc2VsZiBzZXRGcmFtZTpoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID8gZW5kUmVjdCA6
IHN0YXJ0UmVjdCBkaXNwbGF5Ok5PXTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFfZnVsbHNj
cmVlbkFuaW1hdGlvbik7CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW1dlYldpbmRvd1Nj
YWxlQW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aEhpbnRlZER1cmF0aW9uOjAuMiB3aW5kb3c6c2Vs
ZiBpbml0YWxGcmFtZTpzdGFydFJlY3QgZmluYWxGcmFtZTplbmRSZWN0XTsKKyAgICBbX2Z1bGxz
Y3JlZW5BbmltYXRpb24gc2V0U3ViQW5pbWF0aW9uOnN1YkFuaW1hdGlvbl07CisgICAgW19mdWxs
c2NyZWVuQW5pbWF0aW9uIHNldERlbGVnYXRlOnNlbGZdOworICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgYW5pbWF0aW9uIGhhcyBzY2FsZWQgdGhlIHdpbmRvdyBiZWZvcmUgc2hvd2luZyBpdC4K
KyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtz
ZWxmIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0
aW9uIHN0YXJ0QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5p
bWF0aW9uICopYW5pbWF0aW9uCit7CisgICAgaWYgKCFbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkg
eworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKGFu
aW1hdGlvbkRpZEVuZDopIHdpdGhPYmplY3Q6YW5pbWF0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhbmltYXRpb24gIT0gX2Z1bGxzY3JlZW5B
bmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBhbmltYXRpb24gaXMgbm90
IHJlYWxseSBvdmVyIGFuZCB3YXMgaW50ZXJydXB0ZWQKKyAgICAvLyBEb24ndCBzZW5kIGNvbXBs
ZXRpb24gZXZlbnRzLgorICAgIGlmIChbYW5pbWF0aW9uIGN1cnJlbnRQcm9ncmVzc10gPCAxLjAp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFuaW1hdGlvbiAoYW5kIHN1
YmFuaW1hdGlvbikgZG9uJ3Qga2VlcAorICAgIC8vIHRoZSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUg
d2luZG93IGl2YXIgdGhhdCBtYXkgYmUgZGVzdHJveWVkIGZyb20KKyAgICAvLyBub3cgb24uCisg
ICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworCisgICAgW19mdWxsc2Ny
ZWVuQW5pbWF0aW9uIGF1dG9yZWxlYXNlXTsKKyAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5p
bDsKKworICAgIFtzZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKK30KKworLSAodm9pZCltb3Vz
ZU1vdmVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQp
OworICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSBmYWRlSFVESW5dOworfQorCitAZW5kCisK
KyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0K
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5tbQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw5ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKFZJREVP
KSAmJiBQTEFURk9STShNQUMpCiAKICNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIuaCIKIApAQCAtNTAsOCArNDgsNyBAQCBTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlv
bikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiAKIHVzaW5n
IFdlYkNvcmU6OlBsYXRmb3JtTWVkaWE7Ci1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbldp
bmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+Ci17CitAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbldpbmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+IHsKICAg
ICBTRUwgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZDsKICAgICBXZWJXaW5kb3dTY2Fs
ZUFuaW1hdGlvbiAqX2Z1bGxzY3JlZW5BbmltYXRpb247IC8vIChyZXRhaW4pCiB9CkBAIC0yMTAs
MTAgKzIwNywxMCBAQCAtICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05vCiAg
ICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBhdmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3JlZW4gc2Ny
ZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNlPyBJRkYgc28sIAogICAgIC8vIHRoZW4gZXhpdCBmdWxs
c2NyZWVuIG1vZGUuICAgIAogICAgIGlmIChmdWxsc2NyZWVuV2luZG93LnNjcmVlbiA9PSBbTlNT
Y3JlZW4gc2NyZWVuc11bMF0gJiYgZnVsbHNjcmVlbldpbmRvdy5vbkFjdGl2ZVNwYWNlKQotICAg
ICAgICAgW3NlbGYgcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107CisgICAg
ICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246Tk9dOwogfQotICAg
ICAgICAgCi0gICAgICAgICAKKworCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBFeHBvc2VkIEludGVy
ZmFjZQogCkBAIC0zMzIsNyArMzI5LDcgQEAgLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1
bGxzY3JlZW4KICAgICAgICAgaWYgKFtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDow
XSA9PSBmdWxsc2NyZWVuU2NyZWVuKQogICAgICAgICAgICAgb3B0aW9ucyB8PSAoTlNBcHBsaWNh
dGlvblByZXNlbnRhdGlvbkF1dG9IaWRlTWVudUJhciB8IE5TQXBwbGljYXRpb25QcmVzZW50YXRp
b25BdXRvSGlkZURvY2spOwogICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzY3JlZW4g
Y29udGFpbnMgdGhlIGRvY2sgYnkgY29tcGFyaW5nIHRoZSBzY3JlZW4ncyBmcmFtZSB0byBpdHMK
LSAgICAgICAgLy8gdmlzaWJsZUZyYW1lOyBpZiBhIGRvY2sgaXMgcHJlc2VudCwgdGhlIHZpc2li
bGVGcmFtZSB3aWxsIGRpZmZlci4gIElmIHRoZSBjdXJyZW50IHNjcmVlbgorICAgICAgICAvLyB2
aXNpYmxlRnJhbWU7IGlmIGEgZG9jayBpcyBwcmVzZW50LCB0aGUgdmlzaWJsZUZyYW1lIHdpbGwg
ZGlmZmVyLiBJZiB0aGUgY3VycmVudCBzY3JlZW4KICAgICAgICAgLy8gY29udGFpbnMgdGhlIGRv
Y2ssIGhpZGUgaXQuCiAgICAgICAgIGVsc2UgaWYgKCFOU0VxdWFsUmVjdHMoW2Z1bGxzY3JlZW5T
Y3JlZW4gZnJhbWVdLCBbZnVsbHNjcmVlblNjcmVlbiB2aXNpYmxlRnJhbWVdKSkKICAgICAgICAg
ICAgIG9wdGlvbnMgfD0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jazsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lv
biAyMjgyNzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6MjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoVklE
RU8pCisKKyNpbXBvcnQgPEFwcEtpdC9OU0J1dHRvbi5oPgorI2ltcG9ydCA8QXBwS2l0L05TQ29u
dHJvbC5oPgorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEZpZWxkLmg+CisjaW1wb3J0IDxBcHBLaXQv
TlNUcmFja2luZ0FyZWEuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1dpbmRvdy5oPgorI2ltcG9ydCA8
QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBIVE1MVmlkZW9FbGVtZW50OworfQorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlckRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKK3sKKyAgICBpZCA8V2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7Cisg
ICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7CisgICAgTlNUcmFja2luZ0FyZWEgKl9h
cmVhOworICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKKyAgICBCT09MIF9pc0VuZGluZ0Z1bGxzY3Jl
ZW47CisgICAgQk9PTCBfaXNTY3J1YmJpbmc7CisKKyAgICBOU0NvbnRyb2wgKl90aW1lbGluZTsK
KyAgICBOU1RleHRGaWVsZCAqX3JlbWFpbmluZ1RpbWVUZXh0OworICAgIE5TVGV4dEZpZWxkICpf
ZWxhcHNlZFRpbWVUZXh0OworICAgIE5TQ29udHJvbCAqX3ZvbHVtZVNsaWRlcjsKKyAgICBOU0J1
dHRvbiAqX3BsYXlCdXR0b247Cit9CisKKy0gKGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQg
PFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7
CistICh2b2lkKWZhZGVXaW5kb3dJbjsKKy0gKHZvaWQpZmFkZVdpbmRvd091dDsKKy0gKHZvaWQp
Y2xvc2VXaW5kb3c7CistICh2b2lkKXVwZGF0ZVJhdGU7CisKK0BlbmQKKworQHByb3RvY29sIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Cist
ICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKKy0gKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQqKXZpZGVvRWxlbWVudDsKK0BlbmQKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIwor
bmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMjgyNzgpCisrKyBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNyBAQCBjbGFzcyBIVE1M
VmlkZW9FbGVtZW50OwogCiBAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlckRlbGVnYXRlOwogCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKLXsKK0BpbnRlcmZhY2UgV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciA6IE5TV2luZG93Q29udHJvbGxlciB7CiAgICAg
aWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVn
YXRlOwogICAgIE5TVGltZXIgKl90aW1lbGluZVVwZGF0ZVRpbWVyOwogICAgIE5TVHJhY2tpbmdB
cmVhICpfYXJlYTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDIyODI3OCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW06MjI4Mjc4KQorKysg
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1wb3J0ICJGbG9h
dENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2lt
cG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFj
L1FUS2l0U1BJLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX0ZS
QU1FV09SSyhRVEtpdCkKKworU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVREJhY2tncm91bmRW
aWV3KQorU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVREJ1dHRvbikKK1NPRlRfTElOS19DTEFT
UyhRVEtpdCwgUVRIVURTbGlkZXIpCitTT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEVGltZWxp
bmUpCisKKyNkZWZpbmUgUVRIVURCYWNrZ3JvdW5kVmlldyBnZXRRVEhVREJhY2tncm91bmRWaWV3
Q2xhc3MoKQorI2RlZmluZSBRVEhVREJ1dHRvbiBnZXRRVEhVREJ1dHRvbkNsYXNzKCkKKyNkZWZp
bmUgUVRIVURTbGlkZXIgZ2V0UVRIVURTbGlkZXJDbGFzcygpCisjZGVmaW5lIFFUSFVEVGltZWxp
bmUgZ2V0UVRIVURUaW1lbGluZUNsYXNzKCkKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gY2xhc3MgTWVkaWFVSUNvbnRyb2wgeworICAgIFRpbWVsaW5lLAorICAgIFNsaWRlciwKKyAg
ICBQbGF5UGF1c2VCdXR0b24sCisgICAgRXhpdEZ1bGxzY3JlZW5CdXR0b24sCisgICAgUmV3aW5k
QnV0dG9uLAorICAgIEZhc3RGb3J3YXJkQnV0dG9uLAorICAgIFZvbHVtZVVwQnV0dG9uLAorICAg
IFZvbHVtZURvd25CdXR0b24sCit9OworCit9CisKK3VzaW5nIFdlYkNvcmU6Ok1lZGlhVUlDb250
cm9sOwordXNpbmcgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDsKK3VzaW5nIFdlYkNvcmU6Om5h
cnJvd1ByZWNpc2lvblRvRmxvYXQ7CitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIgKFByaXZhdGUpIDxOU1dpbmRvd0RlbGVnYXRlPgorCistICh2b2lkKXVw
ZGF0ZVRpbWU7CistICh2b2lkKXRpbWVsaW5lUG9zaXRpb25DaGFuZ2VkOihpZClzZW5kZXI7Cist
IChmbG9hdCljdXJyZW50VGltZTsKKy0gKHZvaWQpc2V0Q3VycmVudFRpbWU6KGZsb2F0KWN1cnJl
bnRUaW1lOworLSAoZG91YmxlKWR1cmF0aW9uOworCistICh2b2lkKXZvbHVtZUNoYW5nZWQ6KGlk
KXNlbmRlcjsKKy0gKGZsb2F0KW1heFZvbHVtZTsKKy0gKGZsb2F0KXZvbHVtZTsKKy0gKHZvaWQp
c2V0Vm9sdW1lOihmbG9hdCl2b2x1bWU7CistICh2b2lkKWRlY3JlbWVudFZvbHVtZTsKKy0gKHZv
aWQpaW5jcmVtZW50Vm9sdW1lOworCistICh2b2lkKXVwZGF0ZVBsYXlCdXR0b247CistICh2b2lk
KXRvZ2dsZVBsYXlpbmc6KGlkKXNlbmRlcjsKKy0gKEJPT0wpcGxheWluZzsKKy0gKHZvaWQpc2V0
UGxheWluZzooQk9PTClwbGF5aW5nOworCistICh2b2lkKXJld2luZDooaWQpc2VuZGVyOworLSAo
dm9pZClmYXN0Rm9yd2FyZDooaWQpc2VuZGVyOworCistIChOU1N0cmluZyAqKXJlbWFpbmluZ1Rp
bWVUZXh0OworLSAoTlNTdHJpbmcgKillbGFwc2VkVGltZVRleHQ7CisKKy0gKHZvaWQpZXhpdEZ1
bGxzY3JlZW46KGlkKXNlbmRlcjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3cgOiBOU1dpbmRvdworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93CisKKy0gKGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdClj
b250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2lu
Z1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcKK3sKKyAgICBVTlVTRURf
UEFSQU0oYVN0eWxlKTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29u
dGVudFJlY3Qgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOmJ1
ZmZlcmluZ1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICBbc2VsZiBzZXRCYWNrZ3JvdW5k
Q29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFtzZWxmIHNldExldmVsOk5TUG9wVXBN
ZW51V2luZG93TGV2ZWxdOworICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllF
U107CisgICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKKyAgICBbc2VsZiBzZXRN
b3ZhYmxlQnlXaW5kb3dCYWNrZ3JvdW5kOllFU107CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistICh2
b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIGV4aXRGdWxsc2NyZWVuOnNlbGZdOwor
fQorCistICh2b2lkKWNlbnRlcgoreworICAgIE5TUmVjdCBodWRGcmFtZSA9IFtzZWxmIGZyYW1l
XTsKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbW05TU2NyZWVuIG1haW5TY3JlZW5dIGZyYW1l
XTsKKyAgICBbc2VsZiBzZXRGcmFtZVRvcExlZnRQb2ludDpOU01ha2VQb2ludChzY3JlZW5GcmFt
ZS5vcmlnaW4ueCArIChzY3JlZW5GcmFtZS5zaXplLndpZHRoIC0gaHVkRnJhbWUuc2l6ZS53aWR0
aCkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVl
bkZyYW1lLm9yaWdpbi55ICsgKHNjcmVlbkZyYW1lLnNpemUuaGVpZ2h0IC0gaHVkRnJhbWUuc2l6
ZS5oZWlnaHQpIC8gNildOworfQorCistICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAor
eworICAgIFtzdXBlciBrZXlEb3duOmV2ZW50XTsKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxl
cl0gZmFkZVdpbmRvd0luXTsKK30KKworLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgorewor
ICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTClwZXJmb3JtS2V5RXF1aXZhbGVudDooTlNFdmVu
dCAqKWV2ZW50Cit7CisgICAgLy8gQmxvY2sgYWxsIGNvbW1hbmQga2V5IGV2ZW50cyB3aGlsZSB0
aGUgZnVsbHNjcmVlbiB3aW5kb3cgaXMgdXAuCisgICAgaWYgKFtldmVudCB0eXBlXSAhPSBOU0V2
ZW50VHlwZUtleURvd24pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoIShbZXZl
bnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnQ29tbWFuZCkpCisgICAgICAg
IHJldHVybiBOTzsKKyAgICByZXR1cm4gWUVTOworfQorCitAZW5kCisKK3N0YXRpYyBjb25zdCBD
R0Zsb2F0IHdpbmRvd0hlaWdodCA9IDU5Oworc3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93V2lk
dGggPSA0Mzg7CisKK3N0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBIVURXaW5kb3dGYWRlT3V0
RGVsYXkgPSAzOworCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlcgorCistIChpZClpbml0Cit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TTWFr
ZVJlY3QoMCwgMCwgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodCkgc3R5bGVNYXNrOk5TV2luZG93
U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6
Tk9dOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2lu
ZG93IHNldERlbGVnYXRlOnNlbGZdOworICAgIFt3aW5kb3cgcmVsZWFzZV07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIFtzZWxmIHdpbmRvd0RpZExvYWRdOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV90aW1l
bGluZVVwZGF0ZVRpbWVyKTsKKyAgICBBU1NFUlQoIV9hcmVhKTsKKyAgICBBU1NFUlQoIV9pc1Nj
cnViYmluZyk7CisgICAgW190aW1lbGluZSByZWxlYXNlXTsKKyAgICBbX3JlbWFpbmluZ1RpbWVU
ZXh0IHJlbGVhc2VdOworICAgIFtfZWxhcHNlZFRpbWVUZXh0IHJlbGVhc2VdOworICAgIFtfdm9s
dW1lU2xpZGVyIHJlbGVhc2VdOworICAgIFtfcGxheUJ1dHRvbiByZWxlYXNlXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0QXJlYTooTlNUcmFja2luZ0FyZWEgKilhcmVh
Cit7CisgICAgaWYgKGFyZWEgPT0gX2FyZWEpCisgICAgICAgIHJldHVybjsKKyAgICBbX2FyZWEg
cmVsZWFzZV07CisgICAgX2FyZWEgPSBbYXJlYSByZXRhaW5dOworfQorCistICh2b2lkKWtleURv
d246KE5TRXZlbnQgKilldmVudAoreworICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnMgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKKyAgICBpZiAo
W2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEpIHsKKyAgICAgICAgc3dp
dGNoIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsK
KyAgICAgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBsYXlp
bmc6bmlsXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIE5TVXBB
cnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFn
c10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQorICAgICAgICAgICAgICAgICAgICBbc2Vs
ZiBzZXRWb2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBbc2VsZiBpbmNyZW1lbnRWb2x1bWVdOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlvbktleToKKyAgICAg
ICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxh
Z09wdGlvbikKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0Vm9sdW1lOjBdOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGVjcmVtZW50Vm9sdW1l
XTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgW3N1cGVyIGtleURvd246
ZXZlbnRdOworfQorCistIChpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZGVsZWdhdGU7Cit9CisKKy0gKHZv
aWQpc2V0RGVsZWdhdGU6KGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
RGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0g
KHZvaWQpc2NoZWR1bGVUaW1lVXBkYXRlCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3Vz
UGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih1bnNjaGVk
dWxlVGltZVVwZGF0ZSkgb2JqZWN0OnNlbGZdOworCisgICAgLy8gRmlyc3QsIHVwZGF0ZSByaWdo
dCBhd2F5LCB0aGVuIHNjaGVkdWxlIGZ1dHVyZSB1cGRhdGUKKyAgICBbc2VsZiB1cGRhdGVUaW1l
XTsKKyAgICBbc2VsZiB1cGRhdGVQbGF5QnV0dG9uXTsKKworICAgIFtfdGltZWxpbmVVcGRhdGVU
aW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgcmVsZWFzZV07CisK
KyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjcmVhdGVzIGEgcmV0YWluIGN5Y2xlIGJldHdlZW4gdGhl
IHdpbmRvdyBhbmQgdXMuCisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIgPSBbW05TVGltZXIgdGlt
ZXJXaXRoVGltZUludGVydmFsOjAuMjUgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVw
ZGF0ZVRpbWUpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10gcmV0YWluXTsKKyAgICBbW05TUnVu
TG9vcCBjdXJyZW50UnVuTG9vcF0gYWRkVGltZXI6X3RpbWVsaW5lVXBkYXRlVGltZXIgZm9yTW9k
ZTpOU1J1bkxvb3BDb21tb25Nb2Rlc107Cit9CisKKy0gKHZvaWQpdW5zY2hlZHVsZVRpbWVVcGRh
dGUKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6
bmlsXTsKKworICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3Rp
bWVsaW5lVXBkYXRlVGltZXIgcmVsZWFzZV07CisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIgPSBu
aWw7Cit9CisKKy0gKHZvaWQpZmFkZVdpbmRvd0luCit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9
IFtzZWxmIHdpbmRvd107CisgICAgaWYgKCFbd2luZG93IGlzVmlzaWJsZV0pCisgICAgICAgIFt3
aW5kb3cgc2V0QWxwaGFWYWx1ZTowXTsKKworICAgIFt3aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJv
bnQ6c2VsZl07CisgICAgW1t3aW5kb3cgYW5pbWF0b3JdIHNldEFscGhhVmFsdWU6MV07CisgICAg
W3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKKworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91
c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdp
bmRvd091dCkgb2JqZWN0Om5pbF07CisgICAgaWYgKCFfbW91c2VJc0luSFVEICYmIFtzZWxmIHBs
YXlpbmddKSAgIC8vIERvbid0IGZhZGUgb3V0IHdoZW4gcGF1c2VkLgorICAgICAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhPYmplY3Q6bmlsIGFm
dGVyRGVsYXk6SFVEV2luZG93RmFkZU91dERlbGF5XTsKK30KKworLSAodm9pZClmYWRlV2luZG93
T3V0Cit7CisgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworICAg
IFtbW3NlbGYgd2luZG93XSBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZTowXTsKKyAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSB3aXRoT2JqZWN0
Om5pbCBhZnRlckRlbGF5OjFdOworfQorCistICh2b2lkKWNsb3NlV2luZG93Cit7CisgICAgW05T
T2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVj
dG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKKyAgICBbc2VsZiB1bnNj
aGVkdWxlVGltZVVwZGF0ZV07CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107
CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHJlbW92ZVRyYWNraW5nQXJlYTpfYXJlYV07Cisg
ICAgW3NlbGYgc2V0QXJlYTpuaWxdOworICAgIFt3aW5kb3cgY2xvc2VdOworICAgIFt3aW5kb3cg
c2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKK30KKworc3RhdGlj
IE5TQ29udHJvbCAqY3JlYXRlTWVkaWFVSUNvbnRyb2woTWVkaWFVSUNvbnRyb2wgY29udHJvbFR5
cGUpCit7CisgICAgc3dpdGNoIChjb250cm9sVHlwZSkgeworICAgIGNhc2UgTWVkaWFVSUNvbnRy
b2w6OlRpbWVsaW5lOiB7CisgICAgICAgIE5TU2xpZGVyICpzbGlkZXIgPSBbW1FUSFVEVGltZWxp
bmUgYWxsb2NdIGluaXRdOworICAgICAgICBbW3NsaWRlciBjZWxsXSBzZXRDb250aW51b3VzOllF
U107CisgICAgICAgIHJldHVybiBzbGlkZXI7CisgICAgfQorICAgIGNhc2UgTWVkaWFVSUNvbnRy
b2w6OlNsaWRlcjogeworICAgICAgICBOU0J1dHRvbiAqc2xpZGVyID0gW1tRVEhVRFNsaWRlciBh
bGxvY10gaW5pdF07CisgICAgICAgIFtbc2xpZGVyIGNlbGxdIHNldENvbnRpbnVvdXM6WUVTXTsK
KyAgICAgICAgcmV0dXJuIHNsaWRlcjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6
UGxheVBhdXNlQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0
dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNQbGF5VGVtcGxhdGUiXV07CisgICAgICAgIFtidXR0b24gc2V0QWx0ZXJuYXRl
SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TUGF1c2VRVFByaXZhdGVUZW1wbGF0ZSJdXTsK
KworICAgICAgICBbW2J1dHRvbiBjZWxsXSBzZXRTaG93c1N0YXRlQnk6TlNDb250ZW50c0NlbGxN
YXNrXTsKKyAgICAgICAgW2J1dHRvbiBzZXRCb3JkZXJlZDpOT107CisgICAgICAgIHJldHVybiBi
dXR0b247CisgICAgfQorICAgIGNhc2UgTWVkaWFVSUNvbnRyb2w6OkV4aXRGdWxsc2NyZWVuQnV0
dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0dG9uIGFsbG9jXSBp
bml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNF
eGl0RnVsbFNjcmVlblRlbXBsYXRlIl1dOworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5P
XTsKKyAgICAgICAgcmV0dXJuIGJ1dHRvbjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJv
bDo6UmV3aW5kQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0
dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNSZXdpbmRUZW1wbGF0ZSJdXTsKKyAgICAgICAgW2J1dHRvbiBzZXRCb3JkZXJl
ZDpOT107CisgICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAgIGNhc2UgTWVkaWFVSUNv
bnRyb2w6OkZhc3RGb3J3YXJkQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBb
W1FUSFVEQnV0dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJ
bWFnZSBpbWFnZU5hbWVkOkAiTlNGYXN0Rm9yd2FyZFRlbXBsYXRlIl1dOworICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0dXJuIGJ1dHRvbjsKKyAgICB9CisgICAg
Y2FzZSBNZWRpYVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0b246IHsKKyAgICAgICAgTlNCdXR0b24g
KmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOworICAgICAgICBbYnV0dG9uIHNl
dEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0F1ZGlvT3V0cHV0Vm9sdW1lSGlnaFRlbXBs
YXRlIl1dOworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0dXJu
IGJ1dHRvbjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6Vm9sdW1lRG93bkJ1dHRv
bjogeworICAgICAgICBOU0J1dHRvbiAqYnV0dG9uID0gW1tRVEhVREJ1dHRvbiBhbGxvY10gaW5p
dF07CisgICAgICAgIFtidXR0b24gc2V0SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQXVk
aW9PdXRwdXRWb2x1bWVMb3dUZW1wbGF0ZSJdXTsKKyAgICAgICAgW2J1dHRvbiBzZXRCb3JkZXJl
ZDpOT107CisgICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyBOU0NvbnRyb2wg
KmNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9sIGNvbnRy
b2xUeXBlLCBOU1JlY3QgZnJhbWUpCit7CisgICAgTlNDb250cm9sICpjb250cm9sID0gY3JlYXRl
TWVkaWFVSUNvbnRyb2woY29udHJvbFR5cGUpOworICAgIGNvbnRyb2wuZnJhbWUgPSBmcmFtZTsK
KyAgICByZXR1cm4gY29udHJvbDsKK30KKworc3RhdGljIE5TVGV4dEZpZWxkICpjcmVhdGVUaW1l
VGV4dEZpZWxkKE5TUmVjdCBmcmFtZSkKK3sKKyAgICBOU1RleHRGaWVsZCAqdGV4dEZpZWxkID0g
W1tOU1RleHRGaWVsZCBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV07CisgICAgW3RleHRGaWVs
ZCBzZXRUZXh0Q29sb3I6W05TQ29sb3Igd2hpdGVDb2xvcl1dOworICAgIFt0ZXh0RmllbGQgc2V0
Qm9yZGVyZWQ6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0Rm9udDpbTlNGb250IGJvbGRTeXN0ZW1G
b250T2ZTaXplOjEwXV07CisgICAgW3RleHRGaWVsZCBzZXREcmF3c0JhY2tncm91bmQ6Tk9dOwor
ICAgIFt0ZXh0RmllbGQgc2V0QmV6ZWxlZDpOT107CisgICAgW3RleHRGaWVsZCBzZXRFZGl0YWJs
ZTpOT107CisgICAgW3RleHRGaWVsZCBzZXRTZWxlY3RhYmxlOk5PXTsKKyAgICByZXR1cm4gdGV4
dEZpZWxkOworfQorCitzdGF0aWMgTlNWaWV3ICpjcmVhdGVNZWRpYVVJQmFja2dyb3VuZFZpZXco
KQoreworICAgIGlkIHZpZXcgPSBbW1FUSFVEQmFja2dyb3VuZFZpZXcgYWxsb2NdIGluaXRdOwor
CisgICAgY29uc3QgQ0dGbG9hdCBxdWlja1RpbWVQbGF5ZXJIVURIZWlnaHQgPSA1OTsKKyAgICBj
b25zdCBDR0Zsb2F0IHF1aWNrVGltZVBsYXllckhVRENvbnRlbnRCb3JkZXJQb3NpdGlvbiA9IDM4
OworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgW3ZpZXcgc2V0Q29u
dGVudEJvcmRlclBvc2l0aW9uOnF1aWNrVGltZVBsYXllckhVRENvbnRlbnRCb3JkZXJQb3NpdGlv
biAvIHF1aWNrVGltZVBsYXllckhVREhlaWdodF07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCisKKyAgICByZXR1cm4gdmlldzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRMb2FkCit7Cisg
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgaG9yaXpvbnRhbE1hcmdpbiA9IDEwOworICAgIHN0YXRp
YyBjb25zdCBDR0Zsb2F0IHBsYXlCdXR0b25XaWR0aCA9IDQxOworICAgIHN0YXRpYyBjb25zdCBD
R0Zsb2F0IHBsYXlCdXR0b25IZWlnaHQgPSAzNTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBw
bGF5QnV0dG9uVG9wTWFyZ2luID0gNDsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVT
bGlkZXJXaWR0aCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZVNsaWRlckhl
aWdodCA9IDEzOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZUJ1dHRvbldpZHRoID0g
MTg7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lQnV0dG9uSGVpZ2h0ID0gMTY7Cisg
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lVXBCdXR0b25MZWZ0TWFyZ2luID0gNDsKKyAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVDb250cm9sc1RvcE1hcmdpbiA9IDEzOworICAg
IHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9uV2lkdGggPSAyNTsKKyAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBleGl0RnVsbHNjcmVlbkJ1dHRvbkhlaWdodCA9IDIxOwor
ICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9uVG9wTWFyZ2luID0g
MTE7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZWxpbmVXaWR0aCA9IDMxNTsKKyAgICBz
dGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lbGluZUhlaWdodCA9IDE0OworICAgIHN0YXRpYyBjb25z
dCBDR0Zsb2F0IHRpbWVsaW5lQm90dG9tTWFyZ2luID0gNzsKKyAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCB0aW1lVGV4dEZpZWxkV2lkdGggPSA1NDsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0
aW1lVGV4dEZpZWxkSGVpZ2h0ID0gMTM7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZVRl
eHRGaWVsZEhvcml6b250YWxNYXJnaW4gPSA3OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107CisgICAgQVNTRVJUKHdpbmRvdyk7CisKKyAgICBOU1ZpZXcgKmJhY2tncm91
bmQgPSBjcmVhdGVNZWRpYVVJQmFja2dyb3VuZFZpZXcoKTsKKworICAgIFt3aW5kb3cgc2V0Q29u
dGVudFZpZXc6YmFja2dyb3VuZF07CisgICAgX2FyZWEgPSBbW05TVHJhY2tpbmdBcmVhIGFsbG9j
XSBpbml0V2l0aFJlY3Q6W2JhY2tncm91bmQgYm91bmRzXSBvcHRpb25zOk5TVHJhY2tpbmdNb3Vz
ZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nQWN0aXZlQWx3YXlzIG93bmVyOnNlbGYgdXNl
ckluZm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFja2luZ0FyZWE6X2FyZWFdOworICAg
IFtiYWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBb
d2luZG93IGNvbnRlbnRWaWV3XTsKKworICAgIENHRmxvYXQgY2VudGVyID0gQ0dGbG9vcigod2lu
ZG93V2lkdGggLSBwbGF5QnV0dG9uV2lkdGgpIC8gMik7CisgICAgX3BsYXlCdXR0b24gPSAoTlNC
dXR0b24gKiljcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJv
bDo6UGxheVBhdXNlQnV0dG9uLCBOU01ha2VSZWN0KGNlbnRlciwgd2luZG93SGVpZ2h0IC0gcGxh
eUJ1dHRvblRvcE1hcmdpbiAtIHBsYXlCdXR0b25IZWlnaHQsIHBsYXlCdXR0b25XaWR0aCwgcGxh
eUJ1dHRvbkhlaWdodCkpOworICAgIEFTU0VSVChbX3BsYXlCdXR0b24gaXNLaW5kT2ZDbGFzczpb
TlNCdXR0b24gY2xhc3NdXSk7CisgICAgW19wbGF5QnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAg
ICBbX3BsYXlCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3Rvcih0b2dnbGVQbGF5aW5nOildOworICAg
IFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9wbGF5QnV0dG9uXTsKKworICAgIENHRmxvYXQgY2xv
c2VUb1JpZ2h0ID0gd2luZG93V2lkdGggLSBob3Jpem9udGFsTWFyZ2luIC0gZXhpdEZ1bGxzY3Jl
ZW5CdXR0b25XaWR0aDsKKyAgICBOU0NvbnRyb2wgKmV4aXRGdWxsc2NyZWVuQnV0dG9uID0gY3Jl
YXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OkV4aXRGdWxs
c2NyZWVuQnV0dG9uLCBOU01ha2VSZWN0KGNsb3NlVG9SaWdodCwgd2luZG93SGVpZ2h0IC0gZXhp
dEZ1bGxzY3JlZW5CdXR0b25Ub3BNYXJnaW4gLSBleGl0RnVsbHNjcmVlbkJ1dHRvbkhlaWdodCwg
ZXhpdEZ1bGxzY3JlZW5CdXR0b25XaWR0aCwgZXhpdEZ1bGxzY3JlZW5CdXR0b25IZWlnaHQpKTsK
KyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihleGl0RnVsbHNj
cmVlbjopXTsKKyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAg
IFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmV4aXRGdWxsc2NyZWVuQnV0dG9uXTsKKyAgICBbZXhp
dEZ1bGxzY3JlZW5CdXR0b24gcmVsZWFzZV07CisgICAgCisgICAgQ0dGbG9hdCB2b2x1bWVDb250
cm9sc0JvdHRvbSA9IHdpbmRvd0hlaWdodCAtIHZvbHVtZUNvbnRyb2xzVG9wTWFyZ2luIC0gdm9s
dW1lQnV0dG9uSGVpZ2h0OworICAgIENHRmxvYXQgbGVmdCA9IGhvcml6b250YWxNYXJnaW47Cisg
ICAgTlNDb250cm9sICp2b2x1bWVEb3duQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJ
Q29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OlZvbHVtZURvd25CdXR0b24sIE5TTWFrZVJlY3Qo
bGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20sIHZvbHVtZUJ1dHRvbldpZHRoLCB2b2x1bWVCdXR0
b25IZWlnaHQpKTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVEb3duQnV0dG9u
XTsKKyAgICBbdm9sdW1lRG93bkJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW3ZvbHVtZURv
d25CdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihzZXRWb2x1bWVUb1plcm86KV07CisgICAgW3Zv
bHVtZURvd25CdXR0b24gcmVsZWFzZV07CisKKyAgICBsZWZ0ICs9IHZvbHVtZUJ1dHRvbldpZHRo
OworICAgIF92b2x1bWVTbGlkZXIgPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlw
ZShNZWRpYVVJQ29udHJvbDo6U2xpZGVyLCBOU01ha2VSZWN0KGxlZnQsIHZvbHVtZUNvbnRyb2xz
Qm90dG9tICsgQ0dGbG9vcigodm9sdW1lQnV0dG9uSGVpZ2h0IC0gdm9sdW1lU2xpZGVySGVpZ2h0
KSAvIDIpLCB2b2x1bWVTbGlkZXJXaWR0aCwgdm9sdW1lU2xpZGVySGVpZ2h0KSk7CisgICAgW192
b2x1bWVTbGlkZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6W3NlbGYgbWF4
Vm9sdW1lXV0gZm9yS2V5OkAibWF4VmFsdWUiXTsKKyAgICBbX3ZvbHVtZVNsaWRlciBzZXRUYXJn
ZXQ6c2VsZl07CisgICAgW192b2x1bWVTbGlkZXIgc2V0QWN0aW9uOkBzZWxlY3Rvcih2b2x1bWVD
aGFuZ2VkOildOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol92b2x1bWVTbGlkZXJdOwor
CisgICAgbGVmdCArPSB2b2x1bWVTbGlkZXJXaWR0aCArIHZvbHVtZVVwQnV0dG9uTGVmdE1hcmdp
bjsKKyAgICBOU0NvbnRyb2wgKnZvbHVtZVVwQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRp
YVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OlZvbHVtZVVwQnV0dG9uLCBOU01ha2VSZWN0
KGxlZnQsIHZvbHVtZUNvbnRyb2xzQm90dG9tLCB2b2x1bWVCdXR0b25XaWR0aCwgdm9sdW1lQnV0
dG9uSGVpZ2h0KSk7CisgICAgW3ZvbHVtZVVwQnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAgICBb
dm9sdW1lVXBCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihzZXRWb2x1bWVUb01heGltdW06KV07
CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9sdW1lVXBCdXR0b25dOworICAgIFt2b2x1
bWVVcEJ1dHRvbiByZWxlYXNlXTsKKworICAgIF90aW1lbGluZSA9IGNyZWF0ZU1lZGlhVUlDb250
cm9sKE1lZGlhVUlDb250cm9sOjpUaW1lbGluZSk7CisKKyAgICBbX3RpbWVsaW5lIHNldFRhcmdl
dDpzZWxmXTsKKyAgICBbX3RpbWVsaW5lIHNldEFjdGlvbjpAc2VsZWN0b3IodGltZWxpbmVQb3Np
dGlvbkNoYW5nZWQ6KV07CisgICAgW190aW1lbGluZSBzZXRGcmFtZTpOU01ha2VSZWN0KENHRmxv
b3IoKHdpbmRvd1dpZHRoIC0gdGltZWxpbmVXaWR0aCkgLyAyKSwgdGltZWxpbmVCb3R0b21NYXJn
aW4sIHRpbWVsaW5lV2lkdGgsIHRpbWVsaW5lSGVpZ2h0KV07CisgICAgW2NvbnRlbnRWaWV3IGFk
ZFN1YnZpZXc6X3RpbWVsaW5lXTsKKworICAgIF9lbGFwc2VkVGltZVRleHQgPSBjcmVhdGVUaW1l
VGV4dEZpZWxkKE5TTWFrZVJlY3QodGltZVRleHRGaWVsZEhvcml6b250YWxNYXJnaW4sIHRpbWVs
aW5lQm90dG9tTWFyZ2luLCB0aW1lVGV4dEZpZWxkV2lkdGgsIHRpbWVUZXh0RmllbGRIZWlnaHQp
KTsKKyAgICBbX2VsYXBzZWRUaW1lVGV4dCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50TGVm
dF07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X2VsYXBzZWRUaW1lVGV4dF07CisKKyAg
ICBfcmVtYWluaW5nVGltZVRleHQgPSBjcmVhdGVUaW1lVGV4dEZpZWxkKE5TTWFrZVJlY3Qod2lu
ZG93V2lkdGggLSB0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiAtIHRpbWVUZXh0RmllbGRX
aWR0aCwgdGltZWxpbmVCb3R0b21NYXJnaW4sIHRpbWVUZXh0RmllbGRXaWR0aCwgdGltZVRleHRG
aWVsZEhlaWdodCkpOworICAgIFtfcmVtYWluaW5nVGltZVRleHQgc2V0QWxpZ25tZW50Ok5TVGV4
dEFsaWdubWVudFJpZ2h0XTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfcmVtYWluaW5n
VGltZVRleHRdOworCisgICAgW3dpbmRvdyByZWNhbGN1bGF0ZUtleVZpZXdMb29wXTsKKyAgICBb
d2luZG93IHNldEluaXRpYWxGaXJzdFJlc3BvbmRlcjpfcGxheUJ1dHRvbl07CisgICAgW3dpbmRv
dyBjZW50ZXJdOworfQorCistICh2b2lkKXVwZGF0ZVZvbHVtZQoreworICAgIFtfdm9sdW1lU2xp
ZGVyIHNldEZsb2F0VmFsdWU6W3NlbGYgdm9sdW1lXV07Cit9CisKKy0gKHZvaWQpdXBkYXRlVGlt
ZQoreworICAgIFtzZWxmIHVwZGF0ZVZvbHVtZV07CisKKyAgICBbX3RpbWVsaW5lIHNldEZsb2F0
VmFsdWU6W3NlbGYgY3VycmVudFRpbWVdXTsKKyAgICBbX3RpbWVsaW5lIHNldFZhbHVlOltOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOltzZWxmIGR1cmF0aW9uXV0gZm9yS2V5OkAibWF4VmFsdWUi
XTsKKworICAgIFtfcmVtYWluaW5nVGltZVRleHQgc2V0U3RyaW5nVmFsdWU6W3NlbGYgcmVtYWlu
aW5nVGltZVRleHRdXTsKKyAgICBbX2VsYXBzZWRUaW1lVGV4dCBzZXRTdHJpbmdWYWx1ZTpbc2Vs
ZiBlbGFwc2VkVGltZVRleHRdXTsKK30KKworLSAodm9pZCllbmRTY3J1YmJpbmcKK3sKKyAgICBB
U1NFUlQoX2lzU2NydWJiaW5nKTsKKyAgICBfaXNTY3J1YmJpbmcgPSBOTzsKKyAgICBpZiAoSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQor
ICAgICAgICB2aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOworfQorCistICh2b2lkKXRpbWVs
aW5lUG9zaXRpb25DaGFuZ2VkOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVy
KTsKKyAgICBbc2VsZiBzZXRDdXJyZW50VGltZTpbX3RpbWVsaW5lIGZsb2F0VmFsdWVdXTsKKyAg
ICBpZiAoIV9pc1NjcnViYmluZykgeworICAgICAgICBfaXNTY3J1YmJpbmcgPSBZRVM7CisgICAg
ICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF0pCisgICAgICAgICAgICB2aWRlb0VsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Cisg
ICAgICAgIHN0YXRpYyBOU0FycmF5ICplbmRTY3J1YmJpbmdNb2RlcyA9IFtbTlNBcnJheSBhbGxv
Y10gaW5pdFdpdGhPYmplY3RzOk5TRGVmYXVsdFJ1bkxvb3BNb2RlLCBOU01vZGFsUGFuZWxSdW5M
b29wTW9kZSwgbmlsXTsKKyAgICAgICAgLy8gU2NoZWR1bGUgLWVuZFNjcnViYmluZyBmb3Igd2hl
biBsZWF2aW5nIG1vdXNlIHRyYWNraW5nIG1vZGUuCisgICAgICAgIFtbTlNSdW5Mb29wIGN1cnJl
bnRSdW5Mb29wXSBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGVuZFNjcnViYmluZykgdGFyZ2V0
OnNlbGYgYXJndW1lbnQ6bmlsIG9yZGVyOjAgbW9kZXM6ZW5kU2NydWJiaW5nTW9kZXNdOworICAg
IH0KK30KKworLSAoZmxvYXQpY3VycmVudFRpbWUKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB2
aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5jdXJyZW50VGltZSgpIDog
MDsKK30KKworLSAodm9pZClzZXRDdXJyZW50VGltZTooZmxvYXQpY3VycmVudFRpbWUKK3sKKyAg
ICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFtf
ZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+c2V0Q3VycmVudFRpbWUoY3VycmVudFRpbWUpOworICAg
IFtzZWxmIHVwZGF0ZVRpbWVdOworfQorCistIChkb3VibGUpZHVyYXRpb24KK3sKKyAgICByZXR1
cm4gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5k
dXJhdGlvbigpIDogMDsKK30KKworLSAoZmxvYXQpbWF4Vm9sdW1lCit7CisgICAgLy8gU2V0IHRo
ZSB2b2x1bWUgc2xpZGVyIHJlc29sdXRpb24KKyAgICByZXR1cm4gMTAwOworfQorCistICh2b2lk
KXZvbHVtZUNoYW5nZWQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwor
ICAgIFtzZWxmIHNldFZvbHVtZTpbX3ZvbHVtZVNsaWRlciBmbG9hdFZhbHVlXV07Cit9CisKKy0g
KHZvaWQpc2V0Vm9sdW1lVG9aZXJvOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Vu
ZGVyKTsKKyAgICBbc2VsZiBzZXRWb2x1bWU6MF07Cit9CisKKy0gKHZvaWQpc2V0Vm9sdW1lVG9N
YXhpbXVtOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBbc2Vs
ZiBzZXRWb2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07Cit9CisKKy0gKHZvaWQpZGVjcmVtZW50Vm9s
dW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHJldHVy
bjsKKworICAgIGZsb2F0IHZvbHVtZSA9IFtzZWxmIHZvbHVtZV0gLSAxMDsKKyAgICBbc2VsZiBz
ZXRWb2x1bWU6TUFYKHZvbHVtZSwgMCldOworfQorCistICh2b2lkKWluY3JlbWVudFZvbHVtZQor
eworICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCB2b2x1bWUgPSBbc2VsZiB2b2x1bWVdICsgMTA7CisgICAgW3NlbGYgc2V0Vm9s
dW1lOnN0ZDo6bWluKHZvbHVtZSwgW3NlbGYgbWF4Vm9sdW1lXSldOworfQorCistIChmbG9hdCl2
b2x1bWUKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0
ZSB2aWRlb0VsZW1lbnRdLT52b2x1bWUoKSAqIFtzZWxmIG1heFZvbHVtZV0gOiAwOworfQorCist
ICh2b2lkKXNldFZvbHVtZTooZmxvYXQpdm9sdW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW19kZWxlZ2F0ZSB2aWRlb0Vs
ZW1lbnRdLT5tdXRlZCgpKQorICAgICAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnNldE11
dGVkKGZhbHNlKTsKKyAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnNldFZvbHVtZSh2b2x1
bWUgLyBbc2VsZiBtYXhWb2x1bWVdKTsKKyAgICBbc2VsZiB1cGRhdGVWb2x1bWVdOworfQorCist
ICh2b2lkKXVwZGF0ZVBsYXlCdXR0b24KK3sKKyAgICBbX3BsYXlCdXR0b24gc2V0SW50VmFsdWU6
W3NlbGYgcGxheWluZ11dOworfQorCistICh2b2lkKXVwZGF0ZVJhdGUKK3sKKyAgICBCT09MIHBs
YXlpbmcgPSBbc2VsZiBwbGF5aW5nXTsKKworICAgIC8vIEtlZXAgdGhlIEhVRCB2aXNpYmxlIHdo
ZW4gcGF1c2VkLgorICAgIGlmICghcGxheWluZykKKyAgICAgICAgW3NlbGYgZmFkZVdpbmRvd0lu
XTsKKyAgICBlbHNlIGlmICghX21vdXNlSXNJbkhVRCkgeworICAgICAgICBbTlNPYmplY3QgY2Fu
Y2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOworICAgICAgICBbc2VsZiBwZXJmb3JtU2Vs
ZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6
SFVEV2luZG93RmFkZU91dERlbGF5XTsKKyAgICB9CisgICAgW3NlbGYgdXBkYXRlUGxheUJ1dHRv
bl07Cit9CisKKy0gKHZvaWQpdG9nZ2xlUGxheWluZzooaWQpc2VuZGVyCit7CisgICAgVU5VU0VE
X1BBUkFNKHNlbmRlcik7CisgICAgW3NlbGYgc2V0UGxheWluZzohW3NlbGYgcGxheWluZ11dOwor
fQorCistIChCT09MKXBsYXlpbmcKK3sKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1l
bnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07CisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCisg
ICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiAhdmlkZW9FbGVtZW50LT5jYW5QbGF5KCk7
Cit9CisKKy0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCit7CisgICAgSFRNTFZpZGVv
RWxlbWVudCogdmlkZW9FbGVtZW50ID0gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdOworCisgICAg
aWYgKCF2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwbGF5aW5nKQor
ICAgICAgICB2aWRlb0VsZW1lbnQtPnBsYXkoKTsKKyAgICBlbHNlCisgICAgICAgIHZpZGVvRWxl
bWVudC0+cGF1c2UoKTsKK30KKworc3RhdGljIE5TU3RyaW5nICp0aW1lVG9TdHJpbmcoZG91Ymxl
IHRpbWUpCit7CisgICAgQVNTRVJUX0FSRyh0aW1lLCB0aW1lID49IDApOworCisgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKHRpbWUpKQorICAgICAgICB0aW1lID0gMDsKKworICAgIGludCBzZWNvbmRz
ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGQ6OmFicyh0aW1lKSk7CisgICAgaW50IGhvdXJz
ID0gc2Vjb25kcyAvICg2MCAqIDYwKTsKKyAgICBpbnQgbWludXRlcyA9IChzZWNvbmRzIC8gNjAp
ICUgNjA7CisgICAgc2Vjb25kcyAlPSA2MDsKKworICAgIGlmIChob3VycykKKyAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQ6JTAyZDolMDJkIiwgaG91cnMsIG1p
bnV0ZXMsIHNlY29uZHNdOworCisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJTAyZDolMDJkIiwgbWludXRlcywgc2Vjb25kc107ICAgIAorfQorCistIChOU1N0cmluZyAq
KXJlbWFpbmluZ1RpbWVUZXh0Cit7CisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50
ID0gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdOworICAgIGlmICghdmlkZW9FbGVtZW50KQorICAg
ICAgICByZXR1cm4gQCIiOworCisgICAgZG91YmxlIHJlbWFpbmluZ1RpbWUgPSAwOworCisgICAg
aWYgKHN0ZDo6aXNmaW5pdGUodmlkZW9FbGVtZW50LT5kdXJhdGlvbigpKSAmJiBzdGQ6OmlzZmlu
aXRlKHZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSkpCisgICAgICAgIHJlbWFpbmluZ1RpbWUg
PSB2aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkgLSB2aWRlb0VsZW1lbnQtPmN1cnJlbnRUaW1lKCk7
CisKKyAgICByZXR1cm4gW0AiLSIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6dGltZVRvU3RyaW5n
KHJlbWFpbmluZ1RpbWUpXTsKK30KKworLSAoTlNTdHJpbmcgKillbGFwc2VkVGltZVRleHQKK3sK
KyAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIEAiIjsK
KworICAgIHJldHVybiB0aW1lVG9TdHJpbmcoW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5jdXJy
ZW50VGltZSgpKTsKK30KKworLy8gTUFSSzogTlNSZXNwb25kZXIKKworLSAodm9pZCltb3VzZUVu
dGVyZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7
CisgICAgLy8gTWFrZSBzdXJlIHRoZSBIVUQgd29uJ3QgYmUgaGlkZGVuIGZyb20gbm93CisgICAg
X21vdXNlSXNJbkhVRCA9IFlFUzsKKyAgICBbc2VsZiBmYWRlV2luZG93SW5dOworfQorCistICh2
b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGhlRXZlbnQpOworICAgIF9tb3VzZUlzSW5IVUQgPSBOTzsKKyAgICBbc2VsZiBmYWRlV2luZG93
SW5dOworfQorCistICh2b2lkKXJld2luZDooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFN
KHNlbmRlcik7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHJl
dHVybjsKKyAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnJld2luZCgzMCk7Cit9CisKKy0g
KHZvaWQpZmFzdEZvcndhcmQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIp
OworICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQorICAgICAgICByZXR1cm47Cit9
CisKKy0gKHZvaWQpZXhpdEZ1bGxzY3JlZW46KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJB
TShzZW5kZXIpOworICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQorICAgICAgICByZXR1cm47
CisgICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKKyAgICBbX2RlbGVnYXRlIHJlcXVlc3RF
eGl0RnVsbHNjcmVlbl07IAorfQorCisvLyBNQVJLOiBOU1dpbmRvd0RlbGVnYXRlCisKKy0gKHZv
aWQpd2luZG93RGlkRXhwb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IFVOVVNFRF9QQVJBTShub3RpZmljYXRpb24pOworICAgIFtzZWxmIHNjaGVkdWxlVGltZVVwZGF0
ZV07Cit9CisKKy0gKHZvaWQpd2luZG93RGlkQ2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7CisgICAgW3NlbGYgdW5z
Y2hlZHVsZVRpbWVVcGRhdGVdOworfQorCitAZW5kCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNpb24gMjI4
Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMiArMjIsMTEg
QEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgorI2lmIEVOQUJMRShWSURFTykgJiYgUExB
VEZPUk0oTUFDKQogCi0jaWYgRU5BQkxFKFZJREVPKQorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgogCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
KyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRDb252ZXJzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxWaWRlb0VsZW1lbnQuaD4KICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9RVEtpdFNQSS5oPgpAQCAtMTMwLDggKzEyOSw3IEBAIC0g
KHZvaWQpY2VudGVyCiB7CiAgICAgTlNSZWN0IGh1ZEZyYW1lID0gW3NlbGYgZnJhbWVdOwogICAg
IE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFpblNjcmVlbl0gZnJhbWVdOwotICAg
IFtzZWxmIHNldEZyYW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBvaW50KHNjcmVlbkZyYW1lLm9yaWdp
bi54ICsgKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRGcmFtZS5zaXplLndpZHRoKSAvIDIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuRnJhbWUu
b3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQgLSBodWRGcmFtZS5zaXplLmhlaWdo
dCkgLyA2KV07CisgICAgW3NlbGYgc2V0RnJhbWVUb3BMZWZ0UG9pbnQ6TlNNYWtlUG9pbnQoc2Ny
ZWVuRnJhbWUub3JpZ2luLnggKyAoc2NyZWVuRnJhbWUuc2l6ZS53aWR0aCAtIGh1ZEZyYW1lLnNp
emUud2lkdGgpIC8gMiwgc2NyZWVuRnJhbWUub3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5o
ZWlnaHQgLSBodWRGcmFtZS5zaXplLmhlaWdodCkgLyA2KV07CiB9CiAKIC0gKHZvaWQpa2V5RG93
bjooTlNFdmVudCAqKWV2ZW50CkBAIC0yMDMsMjMgKzIwMSwyMyBAQCAtICh2b2lkKWtleURvd246
KE5TRXZlbnQgKilldmVudAogICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnMgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKICAgICBpZiAoW2NoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEpIHsKICAgICAgICAgc3dpdGNoIChb
Y2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKLSAgICAg
ICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBsYXlpbmc6bmls
XTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIE5TVXBBcnJvd0Z1
bmN0aW9uS2V5OgotICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRW
b2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBpbmNyZW1lbnRWb2x1bWVdOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAg
ICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0Vm9sdW1lOjBdOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGVjcmVtZW50Vm9sdW1lXTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICcgJzoKKyAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBs
YXlpbmc6bmlsXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBOU1VwQXJyb3dG
dW5jdGlvbktleToKKyAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2
ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQorICAgICAgICAgICAgICAgIFtzZWxmIHNldFZvbHVtZTpb
c2VsZiBtYXhWb2x1bWVdXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbc2Vs
ZiBpbmNyZW1lbnRWb2x1bWVdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE5T
RG93bkFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxh
Z3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlvbikKKyAgICAgICAgICAgICAgICBbc2VsZiBz
ZXRWb2x1bWU6MF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3NlbGYgZGVj
cmVtZW50Vm9sdW1lXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNzIsNyArMjcwLDcgQEAg
LSAodm9pZClmYWRlV2luZG93SW4KICAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwogCiAg
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAo
IV9tb3VzZUlzSW5IVUQgJiYgW3NlbGYgcGxheWluZ10pICAgLy8gRG9uJ3QgZmFkZSBvdXQgd2hl
biBwYXVzZWQuCisgICAgaWYgKCFfbW91c2VJc0luSFVEICYmIFtzZWxmIHBsYXlpbmddKSAvLyBE
b24ndCBmYWRlIG91dCB3aGVuIHBhdXNlZC4KICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OkhVRFdp
bmRvd0ZhZGVPdXREZWxheV07CiB9CiAKQEAgLTU2NCw3ICs1NjIsNyBAQCAtICh2b2lkKWRlY3Jl
bWVudFZvbHVtZQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCB2b2x1bWUgPSBbc2VsZiB2
b2x1bWVdIC0gMTA7Ci0gICAgW3NlbGYgc2V0Vm9sdW1lOk1BWCh2b2x1bWUsIDApXTsKKyAgICBb
c2VsZiBzZXRWb2x1bWU6c3RkOjptYXgodm9sdW1lLCAwLjBmKV07CiB9CiAKIC0gKHZvaWQpaW5j
cmVtZW50Vm9sdW1lCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0NCw5ICsyNDQsOSBAQAogI2ltcG9y
dCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOU1ByaW50T3BlcmF0aW9u
RXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJQREZWaWV3LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgotI2ltcG9ydCA8V2ViQ29yZS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0FW
S2l0U1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KICNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmlt
YXRpb24uaAkocmV2aXNpb24gMjI4Mjc4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViV2luZG93QW5pbWF0aW9uLmg6MjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgPENvY29hL0NvY29hLmg+CisKK1dFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViV2lu
ZG93U2NhbGVBbmltYXRpb24gOiBOU0FuaW1hdGlvbiB7CitAcHJpdmF0ZQorICAgIE5TUmVjdCBf
aW5pdGlhbEZyYW1lLCBfZmluYWxGcmFtZSwgX3JlYWxGcmFtZTsKKyAgICBOU1dpbmRvdyAqX3dp
bmRvdzsgLy8gKGFzc2lnbikKKyAgICBOU0FuaW1hdGlvbiAqX3N1YkFuaW1hdGlvbjsgLy8gKHJl
dGFpbikKKyAgICBOU1RpbWVJbnRlcnZhbCBfaGludGVkRHVyYXRpb247Cit9CistIChpZClpbml0
V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2lu
ZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6
KE5TUmVjdClmaW5hbEZyYW1lOworCistICh2b2lkKXNldFN1YkFuaW1hdGlvbjooTlNBbmltYXRp
b24gKilhbmltYXRpb247CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWU7CisKKy8vIEJlIHN1cmUg
dG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVu
IGFwcHJvcHJpYXRlCistICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7CitAZW5k
CisKKworV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIDog
TlNBbmltYXRpb24geworQHByaXZhdGUKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGEsIF9maW5h
bEFscGhhOworICAgIE5TV2luZG93ICpfd2luZG93OyAvLyAoYXNzaWduKQorICAgIEJPT0wgX2lz
U3RvcHBlZDsKKyAgICAKK30KKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGltZUludGVydmFs
KWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0
KWluaXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGE7CisKKy0gKENHRmxv
YXQpY3VycmVudEFscGhhOworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93Om5pbCB0byBj
bGVhciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQorLSAodm9pZClzZXRX
aW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViV2luZG93QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCShyZXZpc2lvbiAyMjgyNzgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW06MjI4Mjc4
KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lt
cG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCisKKyNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5o
IgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNsb3dNb3Rpb25GYWN0b3IgPSAxMDsKKwor
c3RhdGljIE5TVGltZUludGVydmFsIFdlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0
aW9uKE5TVGltZUludGVydmFsIGR1cmF0aW9uKQoreworICAgIHJldHVybiAoW1tOU0FwcCBjdXJy
ZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ1NoaWZ0KSA/IGR1
cmF0aW9uICogc2xvd01vdGlvbkZhY3RvciA6IGR1cmF0aW9uOworfQorCitzdGF0aWMgTlNSZWN0
IHNjYWxlZFJlY3QoTlNSZWN0IF9pbml0aWFsRnJhbWUsIE5TUmVjdCBfZmluYWxGcmFtZSwgQ0dG
bG9hdCBmYWN0b3IpCit7CisgICAgTlNSZWN0IGN1cnJlbnRSZWN0ID0gX2luaXRpYWxGcmFtZTsK
KyAgICBjdXJyZW50UmVjdC5vcmlnaW4ueCArPSAoTlNNaW5YKF9maW5hbEZyYW1lKSAtIE5TTWlu
WChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgY3VycmVudFJlY3Qub3JpZ2luLnkgKz0g
KE5TTWluWShfZmluYWxGcmFtZSkgLSBOU01pblkoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOwor
ICAgIGN1cnJlbnRSZWN0LnNpemUud2lkdGggKz0gKE5TV2lkdGgoX2ZpbmFsRnJhbWUpIC0gTlNX
aWR0aChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgY3VycmVudFJlY3Quc2l6ZS5oZWln
aHQgKz0gKE5TSGVpZ2h0KF9maW5hbEZyYW1lKSAtIE5TSGVpZ2h0KF9pbml0aWFsRnJhbWUpKSAq
IGZhY3RvcjsKKyAgICByZXR1cm4gY3VycmVudFJlY3Q7Cit9CisKK3N0YXRpYyBDR0Zsb2F0IHNx
dWFyZWREaXN0YW5jZShOU1BvaW50IHBvaW50MSwgTlNQb2ludCBwb2ludDIpCit7CisgICAgQ0dG
bG9hdCBkZWx0YVggPSBwb2ludDEueCAtIHBvaW50Mi54OworICAgIENHRmxvYXQgZGVsdGFZID0g
cG9pbnQxLnkgLSBwb2ludDIueTsKKyAgICByZXR1cm4gZGVsdGFYICogZGVsdGFYICsgZGVsdGFZ
ICogZGVsdGFZOworfQorCit9CisKK3VzaW5nIFdlYkNvcmU6OldlYldpbmRvd0FuaW1hdGlvbkR1
cmF0aW9uRnJvbUR1cmF0aW9uOwordXNpbmcgV2ViQ29yZTo6bmFycm93UHJlY2lzaW9uVG9GbG9h
dDsKK3VzaW5nIFdlYkNvcmU6OnNjYWxlZFJlY3Q7Cit1c2luZyBXZWJDb3JlOjpzcXVhcmVkRGlz
dGFuY2U7CitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93U2NhbGVBbmltYXRpb24KKworLSAoaWQp
aW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1h
dGlvbk5vbmJsb2NraW5nVGhyZWFkZWRdOworICAgIFtzZWxmIHNldEZyYW1lUmF0ZTo2MF07Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoSGludGVkRHVyYXRpb246KE5TVGlt
ZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGFsRnJhbWU6
KE5TUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooTlNSZWN0KWZpbmFsRnJhbWUKK3sKKyAg
ICBzZWxmID0gW3NlbGYgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIF9oaW50ZWREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIF93aW5kb3cgPSB3aW5kb3c7
CisgICAgX2luaXRpYWxGcmFtZSA9IGluaXRpYWxGcmFtZTsKKyAgICBfZmluYWxGcmFtZSA9IGZp
bmFsRnJhbWU7CisgICAgX3JlYWxGcmFtZSA9IFt3aW5kb3cgZnJhbWVdOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKSBkZWFsbG9jCit7CisgICAgW19zdWJBbmltYXRpb24gcmVsZWFz
ZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldER1cmF0aW9uOihOU1Rp
bWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIFtzdXBlciBzZXREdXJhdGlvbjpXZWJXaW5kb3dB
bmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlvbihkdXJhdGlvbildOworfQorCistICh2b2lkKXNl
dFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2luZG93OworfQor
CistIChmbG9hdCljdXJyZW50VmFsdWUKK3sKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjUgLSAwLjUgKiBjb3MocGlEb3VibGUgKiAoMSAtIFtzZWxmIGN1cnJlbnRQcm9ncmVz
c10pKSk7Cit9CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWUKK3sKKyAgICByZXR1cm4gc2NhbGVk
UmVjdChfZmluYWxGcmFtZSwgX2luaXRpYWxGcmFtZSwgW3NlbGYgY3VycmVudFZhbHVlXSk7Cit9
CisKK3N0YXRpYyB2b2lkIGZsaXBSZWN0KE5TUmVjdCogcmVjdCkKK3sKKyAgICByZWN0LT5vcmln
aW4ueSA9IE5TTWF4WShbKE5TU2NyZWVuICopW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdElu
ZGV4OjBdIGZyYW1lXSkgLSBOU01heFkoKnJlY3QpOworfQorCitzdGF0aWMgQ0dTQ29ubmVjdGlv
bklEIG1haW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKQoreworICAgIHN0YXRpYyBDR1NDb25u
ZWN0aW9uSUQgY2dzSWQ7CisgICAgaWYgKCFjZ3NJZCkKKyAgICAgICAgY2dzSWQgPSBDR1NNYWlu
Q29ubmVjdGlvbklEKCk7CisgICAgcmV0dXJuIGNnc0lkOworfQorCitzdGF0aWMgdm9pZCBzZXRT
Y2FsZWRGcmFtZUZvcldpbmRvdyhOU1dpbmRvdyAqd2luZG93LCBOU1JlY3Qgc2NhbGVGcmFtZSwg
TlNSZWN0IG5vblNjYWxlZEZyYW1lKQoreworICAgIGlmIChOU0VxdWFsUmVjdHMoc2NhbGVGcmFt
ZSwgbm9uU2NhbGVkRnJhbWUpKSB7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xbm9ubnVsbCIKKyAgICAgICAgQ0dTU2V0
V2luZG93V2FycChtYWluV2luZG93U2VydmVyQ29ubmVjdGlvbklEKCksIHdpbmRvdy53aW5kb3dO
dW1iZXIsIDAsIDAsIG51bGxwdHIpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZsb2F0IG1lc2hbMTZdOworICAgIAorICAg
IGZsaXBSZWN0KCZzY2FsZUZyYW1lKTsKKyAgICBmbGlwUmVjdCgmbm9uU2NhbGVkRnJhbWUpOwor
ICAgIAorICAgIC8vIHRvcC1sZWZ0IHBvaW50ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzBdID0g
MDsKKyAgICBtZXNoWzFdID0gMDsKKyAgICBtZXNoWzJdID0gTlNNaW5YKHNjYWxlRnJhbWUpOwor
ICAgIG1lc2hbM10gPSBOU01pblkoc2NhbGVGcmFtZSk7CisgICAgCisgICAgLy8gdG9wLXJpZ2h0
IHBvaW50ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzRdID0gTlNXaWR0aChub25TY2FsZWRGcmFt
ZSk7CisgICAgbWVzaFs1XSA9IDA7CisgICAgbWVzaFs2XSA9IE5TTWF4WChzY2FsZUZyYW1lKTsK
KyAgICBtZXNoWzddID0gTlNNaW5ZKHNjYWxlRnJhbWUpOworICAgIAorICAgIC8vIGJvdHRvbS1s
ZWZ0ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzhdID0gMDsKKyAgICBtZXNoWzldID0gTlNIZWln
aHQobm9uU2NhbGVkRnJhbWUpOworICAgIG1lc2hbMTBdID0gTlNNaW5YKHNjYWxlRnJhbWUpOwor
ICAgIG1lc2hbMTFdID0gTlNNYXhZKHNjYWxlRnJhbWUpOworICAgIAorICAgIC8vIGJvdHRvbS1y
aWdodCAodG8gYW5kIGZyb20pCisgICAgbWVzaFsxMl0gPSBOU1dpZHRoKG5vblNjYWxlZEZyYW1l
KTsKKyAgICBtZXNoWzEzXSA9IE5TSGVpZ2h0KG5vblNjYWxlZEZyYW1lKTsKKyAgICBtZXNoWzE0
XSA9IE5TTWF4WChzY2FsZUZyYW1lKTsKKyAgICBtZXNoWzE1XSA9IE5TTWF4WShzY2FsZUZyYW1l
KTsKKyAgICAKKyAgICAvLyBBcHBseSB0aGUgd2FycC4KKyAgICBDR1NTZXRXaW5kb3dXYXJwKG1h
aW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKSwgd2luZG93LndpbmRvd051bWJlciwgMiwgMiwg
bWVzaCk7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dy
ZXNzKXByb2dyZXNzCit7CisgICAgaWYgKCFfd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAg
ICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAgIE5TUmVjdCBjdXJy
ZW50UmVjdCA9IFtzZWxmIGN1cnJlbnRGcmFtZV07CisgICAgc2V0U2NhbGVkRnJhbWVGb3JXaW5k
b3coX3dpbmRvdywgY3VycmVudFJlY3QsIF9yZWFsRnJhbWUpOworICAgIFtfc3ViQW5pbWF0aW9u
IHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107Cit9CisKKy0gKHZvaWQpc2V0U3ViQW5pbWF0
aW9uOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgoreworICAgIGlkIG9sZEFuaW1hdGlvbiA9IF9z
dWJBbmltYXRpb247CisgICAgX3N1YkFuaW1hdGlvbiA9IFthbmltYXRpb24gcmV0YWluXTsKKyAg
ICBbb2xkQW5pbWF0aW9uIHJlbGVhc2VdOworfQorCistIChOU1RpbWVJbnRlcnZhbClhZGRpdGlv
bmFsRHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZQoreworICAgIHN0YXRpYyBjb25zdCBD
R0Zsb2F0IG1heEFkZGl0aW9uYWxEdXJhdGlvbiA9IDE7CisgICAgc3RhdGljIGNvbnN0IENHRmxv
YXQgc3BlZWRGYWN0b3IgPSAwLjAwMDFmOworICAgIAorICAgIENHRmxvYXQgbWF4RGlzdCA9IHNx
dWFyZWREaXN0YW5jZShfaW5pdGlhbEZyYW1lLm9yaWdpbiwgX2ZpbmFsRnJhbWUub3JpZ2luKTsK
KyAgICBDR0Zsb2F0IGRpc3Q7CisgICAgCisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShOU01h
a2VQb2ludChOU01heFgoX2luaXRpYWxGcmFtZSksIE5TTWluWShfaW5pdGlhbEZyYW1lKSksIE5T
TWFrZVBvaW50KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWluWShfZmluYWxGcmFtZSkpKTsKKyAg
ICBpZiAoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAg
IGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUp
LCBOU01heFkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUp
LCBOU01heFkoX2ZpbmFsRnJhbWUpKSk7CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQorICAgICAg
ICBtYXhEaXN0ID0gZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFr
ZVBvaW50KE5TTWluWChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNN
YWtlUG9pbnQoTlNNaW5YKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOworICAg
IGlmIChkaXN0ID4gbWF4RGlzdCkKKyAgICAgICAgbWF4RGlzdCA9IGRpc3Q7CisgICAgCisgICAg
cmV0dXJuIE1JTihzcXJ0KG1heERpc3QpICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJh
dGlvbik7ICAgIAorfQorCistICh2b2lkKXN0YXJ0QW5pbWF0aW9uCit7CisgICAgLy8gQ29tcHV0
ZSBleHRyYSB0aW1lCisgICAgaWYgKF9oaW50ZWREdXJhdGlvbikKKyAgICAgICAgW3NlbGYgc2V0
RHVyYXRpb246X2hpbnRlZER1cmF0aW9uICsgW3NlbGYgYWRkaXRpb25hbER1cmF0aW9uTmVlZGVk
VG9SZWFjaEZpbmFsRnJhbWVdXTsKKyAgICBbc3VwZXIgc3RhcnRBbmltYXRpb25dOworfQorCist
ICh2b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICBfd2luZG93ID0gbmlsOworICAgIFtzdXBlciBz
dG9wQW5pbWF0aW9uXTsKKyAgICBbX3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93RmFkZUFuaW1hdGlvbgorCistIChpZClp
bml0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5TQW5pbWF0
aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07CisgICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwXTsKKyAg
ICBbc2VsZiBzZXRBbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0KWlu
aXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGEKK3sKKyAgICBzZWxmID0g
W3NlbGYgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOyAgICAKKyAg
ICBfd2luZG93ID0gd2luZG93OworICAgIF9pbml0aWFsQWxwaGEgPSBpbml0aWFsQWxwaGE7Cisg
ICAgX2ZpbmFsQWxwaGEgPSBmaW5hbEFscGhhOworICAgIFtzZWxmIHNldER1cmF0aW9uOmR1cmF0
aW9uXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXREdXJhdGlvbjooTlNUaW1l
SW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBbc3VwZXIgc2V0RHVyYXRpb246V2ViV2luZG93QW5p
bWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oZHVyYXRpb24pXTsKK30KKworLSAoQ0dGbG9hdClj
dXJyZW50QWxwaGEKK3sKKyAgICByZXR1cm4gTUFYKDAsIE1JTigxLCBfaW5pdGlhbEFscGhhICsg
W3NlbGYgY3VycmVudFZhbHVlXSAqIChfZmluYWxBbHBoYSAtIF9pbml0aWFsQWxwaGEpKSk7Cit9
CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dy
ZXNzCit7CisgICAgaWYgKF9pc1N0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChfd2luZG93KTsKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKwor
ICAgIENHU1NldFdpbmRvd0FscGhhKG1haW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKSwgX3dp
bmRvdy53aW5kb3dOdW1iZXIsIHNlbGYuY3VycmVudEFscGhhKTsKK30KKworLSAodm9pZClzZXRX
aW5kb3c6KE5TV2luZG93Kil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2luZG93OworfQorCist
ICh2b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHdoZW4gd2Ug
YXJlIGEgc3ViIGFuaW1hdGlvbiBvZiBhIHNjYWxlIGFuaW1hdGlvbi4KKyAgICAvLyBJbiB0aGlz
IGNhc2Ugd2UgYXJlIGhvc3RlZCBpbiB0aGUgYW5pbWF0ZWQgdGhyZWFkIG9mIHRoZSBwYXJlbnQK
KyAgICAvLyBhbmQgZXZlbiBhZnRlciBbc3VwZXIgc3RvcEFuaW1hdGlvbl0sIHRoZSBwYXJlbnQg
bWlnaHQgY2FsbAorICAgIC8vIHNldEN1cnJyZW50UHJvZ3Jlc3MuCisgICAgX2lzU3RvcHBlZCA9
IFlFUzsKKworICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKK30KKworQGVuZAorCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0
aW9uLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCShyZXZp
c2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYldpbmRv
d0FuaW1hdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDExIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaW1wb3J0ICJjb25maWcuaCIKKyNpZiBQTEFURk9STShNQUMpCiAK
ICNpbXBvcnQgIldlYldpbmRvd0FuaW1hdGlvbi5oIgogCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNp
b24uaCIKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRDb252ZXJzaW9uLmg+CiAjaW1wb3J0IDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0yMTAsNyArMjEwLDcgQEAgLSAoTlNUaW1lSW50
ZXJ2YWwpYWRkaXRpb25hbER1cmF0aW9uTmVlZAogICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKICAg
ICAgICAgbWF4RGlzdCA9IGRpc3Q7CiAgICAgCi0gICAgcmV0dXJuIE1JTihzcXJ0KG1heERpc3Qp
ICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlvbik7ICAgIAorICAgIHJldHVybiBz
dGQ6Om1pbihzcXJ0KG1heERpc3QpICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlv
bik7CiB9CiAKIC0gKHZvaWQpc3RhcnRBbmltYXRpb24KQEAgLTI2Miw3ICsyNjIsNyBAQCAtICh2
b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhCiAKIC0gKENHRmxvYXQpY3VycmVu
dEFscGhhCiB7Ci0gICAgcmV0dXJuIE1BWCgwLCBNSU4oMSwgX2luaXRpYWxBbHBoYSArIFtzZWxm
IGN1cnJlbnRWYWx1ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5pdGlhbEFscGhhKSkpOworICAgIHJl
dHVybiBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDEuMCwgX2luaXRpYWxBbHBoYSArIFtzZWxmIGN1
cnJlbnRWYWx1ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5pdGlhbEFscGhhKSkpOwogfQogCiAtICh2
b2lkKXNldEN1cnJlbnRQcm9ncmVzczooTlNBbmltYXRpb25Qcm9ncmVzcylwcm9ncmVzcwpAQCAt
Mjk0LDMgKzI5NCw0IEBAIC0gKHZvaWQpc3RvcEFuaW1hdGlvbgogCiBAZW5kCiAKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333426</attachid>
            <date>2018-02-08 14:48:58 -0800</date>
            <delta_ts>2018-02-08 19:30:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182615-20180208144857.patch</filename>
            <type>text/plain</type>
            <size>155894</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE4LTAyLTA4ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgZnJvbSBXZWJDb3JlIHRvIFdlYktpdExlZ2FjeS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjYxNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IGlzIG9ubHkgdXNlZCBi
eSBXSzEuIEFsc28gdGhlcmUgYXJlIGEgZmV3IHJlZmVyZW5jZXMgdG8gTlNBcHAgaW4gV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbS4KKyAgICAgICAgSWRlYWxseSwgd2Ugc2hvdWxkIG5v
dCByZWZlcmVuY2UgTlNBcHAgaW4gV2ViQ29yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5v
IGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXNNYWMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIu
bW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW06
IFJlbW92ZWQuCisKIDIwMTgtMDItMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCB0aW55IHBhcnRpYWwgcm9sbG91dCBvZiByMjI4MjYwIGFz
IGl0IGNhdXNlZCBzb21lIHdvcmtlciBmYWlsdXJlcwpJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlc01hYy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlc01hYy50eHQJ
KHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNNYWMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDMsOSArMTAzLDYgQEAgcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZQogcGxhdGZvcm0vbWFjL1dlYkNvcmVGdWxsU2NyZWVuV2luZG93Lm1tCiBw
bGF0Zm9ybS9tYWMvV2ViR0xCbGFja2xpc3QubW0KIHBsYXRmb3JtL21hYy9XZWJOU0F0dHJpYnV0
ZWRTdHJpbmdFeHRyYXMubW0KLXBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tIEBuby11bmlmeQotcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIubW0KLXBsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0KIHBsYXRm
b3JtL21hYy9XaWRnZXRNYWMubW0KIAogcGxhdGZvcm0vbmV0d29yay9tYWMvTmV0d29ya1N0YXRl
Tm90aWZpZXJNYWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1
MjMsNyArMzUyMyw3IEBACiAJCUJDMDZFREEwMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJs
ZVJvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDZFRDlDMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZVJvd0VsZW1lbnQuaCAq
LzsgfTsKIAkJQkMwNkVERTQwQkZENkQwRDAwODU2RTlEIC8qIEpTSFRNTFRhYmxlQ2VsbEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZF
REUyMEJGRDZEMEQwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUNlbGxFbGVtZW50LmggKi87IH07CiAJ
CUJDMDZFRTA1MEJGRDcxQUEwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZFRTAzMEJGRDcxQUEw
MDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCAqLzsgfTsKLQkJQkMwNzNCQUEwQzM5OUIx
RjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwNzNCQTkwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29u
dmVyc2lvbi5oICovOyB9OworCQlCQzA3M0JBQTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252
ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzA3M0JBOTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252ZXJzaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxMEQ3NjgxN0Q4RUU3MTAw
NUUyNjI2IC8qIFJlbmRlckJsb2NrRmxvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGQjQ1RjMxN0Q4RTM5MjAwNDQ0NDQ2IC8qIFJlbmRlckJsb2Nr
Rmxvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDMTI0RUU4MEMyNjQxQ0QwMDlFMjM0OSAvKiBCYXJQcm9wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyNEVFNTBDMjY0MUNEMDA5RTIzNDkgLyog
QmFyUHJvcC5oICovOyB9OwogCQlCQzEyNEYwMDBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJQcm9w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyNEVG
RTBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJQcm9wLmggKi87IH07CkBAIC0zODY5LDkgKzM4Njks
NiBAQAogCQlDRDdEMzM0ODFDN0ExNkJGMDAwNDEyOTMgLyogQ29yZVZpZGVvU29mdExpbmsuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0QzMzQ2MUM3
QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5oICovOyB9OwogCQlDRDdEQkIyOTE4
Q0ExOUM2MDBDMTEwNjYgLyogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDdEQkIyNzE4Q0ExMUZGMDBDMTEwNjYg
LyogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggKi87IH07CiAJCUNEN0UwNTIyMTY1MUMyODIwMEMx
MjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDdFMDUyMTE2NTFBODQxMDBDMTIwMUYgLyogV2Vi
Q29yZUFWRlJlc291cmNlTG9hZGVyLm1tICovOyB9OwotCQlDRDgyMDMwQTEzOTVBQjZBMDBGOTU2
QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4MjAzMDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDRDgyMDMxMDEzOTVBQ0U3MDBGOTU2QzYgLyog
V2ViV2luZG93QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4
QTdCQkIxOTc3MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QTdCQjkxOTc3
MzVGRTAwQ0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tICovOyB9OwogCQlD
RDhBN0JCQzE5NzczNUZFMDBDQkQ2NDMgLyogQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEE3QkJBMTk3
NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovOyB9OwogCQlD
RDhBQ0E4OTFEMjM3QUEyMDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhBQ0E4NzFEMjM3
QUEyMDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLmggKi87IH07CkBAIC00Mjcx
LDcgKzQyNjgsNiBAQAogCQlERTVGODYxMjFGQTIzOUU3MDA2REI2M0EgLyogSlNHQ09ic2VydmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NzE0RUFFMUNGNjY1NEEwMDQ3MjNDNCAvKiBKU0dDT2JzZXJ2YXRpb24uY3BwICovOyB9OwogCQlE
RTVGODYxRDFGQTI4MTVCMDA2REI2M0EgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTQ3
OEE3RTE2Q0Q3MEMzMDA3RDFCQjQgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0gKi87IH07CiAJCURFNUY4NjFFMUZBMjgxRkQwMDZEQjYzQSAvKiBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOUE4MTI0NjBGQkI5Q0E5MDA1MTAyOTMgLyogV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLm1tICovOyB9OwotCQlERTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyog
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIwMzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICovOyB9OwogCQlERTVGODY1MDFGQTJBRjI0MDA2REI2
M0EgLyogVW5pZmllZFNvdXJjZTUxLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREU1Rjg2MzYxRkEyQUYwNDAwNkRCNjNBIC8qIFVuaWZpZWRTb3Vy
Y2U1MS1tbS5tbSAqLzsgfTsKIAkJREU1Rjg2NTExRkEyQUYyNDAwNkRCNjNBIC8qIFVuaWZpZWRT
b3VyY2U1Mi1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERFNUY4NjM3MUZBMkFGMDUwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTItbW0ubW0gKi87
IH07CiAJCURFNUY4NjUyMUZBMkFGMjQwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNTMtbW0ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERTVGODYzNTFG
QTJBRjAzMDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTUzLW1tLm1tICovOyB9OwpAQCAtMTI5ODMs
MTIgKzEyOTc5LDYgQEAKIAkJQ0Q3REJCMjcxOENBMTFGRjAwQzExMDY2IC8qIENTU0dyaWRMaW5l
TmFtZXNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NHcmlkTGlu
ZU5hbWVzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3RTA1MjAxNjUx
QTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q3RTA1MjExNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0Q4MjAzMDYxMzk1QUI2QTAwRjk1NkM2IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDRDgyMDMwNzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUNEODIwMzA4MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5p
bWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldpbmRvd0FuaW1h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRDgyMDMwRjEzOTVBQ0U3MDBG
OTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDg3MUM1QzFGQjUyQjYzMDBGMEI5NjUgLyogSVNPU2NoZW1lVHlwZUJveC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJU09TY2hlbWVUeXBlQm94Lmg7IHBh
dGggPSBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPU2NoZW1lVHlwZUJveC5oOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CiAJCUNEODcxQzVFMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBJU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHA7IHBhdGggPSBwbGF0Zm9ybS9ncmFw
aGljcy9pc28vSVNPUHJvdGVjdGlvblNjaGVtZUluZm9Cb3guY3BwOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CiAJCUNEODcxQzVGMUZCNTJCNjQwMEYwQjk2NSAvKiBJU09TY2hlbWVUeXBl
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElTT1NjaGVtZVR5
cGVCb3guY3BwOyBwYXRoID0gcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1NjaGVtZVR5cGVCb3gu
Y3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC0xODY4MCwxMiArMTg2NzAsNiBA
QAogCQkJCUUxQTMxNjJDMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdF
eHRyYXMubW0gKi8sCiAJCQkJQ0Q1ODk2RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLmggKi8sCiAJCQkJQ0Q1ODk2REYxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tICovLAotCQkJCUNEODIwMzA2MTM5NUFCNkEwMEY5
NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmggKi8sCi0JCQkJQ0Q4MjAzMDcx
Mzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gKi8sCi0J
CQkJQ0Q4MjAzMDgxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIuaCAqLywKLQkJCQlDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLywKLQkJCQlDRDgyMDMwRTEzOTVB
Q0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8sCi0JCQkJQ0Q4MjAzMEYxMzk1
QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSAqLywKIAkJCQk5MzgwRjQ3NzA5
QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7
CkBAIC0yODI3Myw3ICsyODI1Nyw2IEBACiAJCQkJMDc5NjlEQzIxN0QxNDE1MTAwN0ZGODQyIC8q
IEpTUlRDU3RhdHNSZXBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVFMkM0MzZDMUJDRjA3MUUw
MDAxRTJCQyAvKiBKU1JUQ1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUMwMUMz
MEMyNzREREQwMDlGNEVDOSAvKiBKU1NjcmVlbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY1QjQw
OEEyMDIxMkY3NzAwODBGOTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU1NjcmlwdFByb2Nlc3Nvck5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzNDQ3NkVGMURBNUJDNUUwMDJCNkVEMiAvKiBKU1Nj
cm9sbFRvT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRG
QUYxIC8qIEpTU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yODg5Myw2ICsyODg3Niw3IEBACiAJCQkJNDE4NEY1MTYxRUFGMDVBODAwRjE4QkYwIC8qIE9y
aWVudGF0aW9uTm90aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwMTQ2MjhCMTAzQ0QxREUw
MDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RTg5
RkMxNkUyREMwNTAwQTkwOEY4IC8qIE9yaWdpbkxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NUI0MDhBMjAyMTJGNzcwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDU4MUZBRjE1MjBGOTFGMDAzQTdBNzUgLyogT3NjaWxsYXRvck5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUREMEU4MUI4REQwMEIyNTk2NSAvKiBPdXRsaW5l
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMjlGNTcyMThDNjk1MTQwMDREMEY4MSAvKiBP
dXRPZkJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjQ4LDE0
ICszMDIzMiwxMSBAQAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUNEODIwMzBBMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjQyQjMxRDE4ODExOTFCMDAy
NzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggaW4gSGVhZGVycyAq
LywKLQkJCQlDRDgyMDMwQzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjEyMTcxRjYxNkE4Q0YwQjAw
MDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVEMjFBODAzMTNF
Q0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIxMEI2
OTgwMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjEwQjY5ODIxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQ0Q4MjAzMTAxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERTAxMjUxRjEyRDAwM0VGMjY5IC8qIFdlZWtJbnB1
dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjUxMEE0NEVGQzcwMEY5OTJFMCAvKiBX
aGVlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRUJCQzNEODFCNjU5ODgzMDBGNTI1M0Qg
LyogV2hlZWxFdmVudERlbHRhRmlsdGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNDc3LDcgKzMx
NDU4LDYgQEAKIAkJCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAvKiBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYzNDgyMEE2
QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywKLQkJCQlE
RTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAv
KiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAw
QkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2
LDcgKzE1Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBiZXN0
TWVkaWFFbGVtZW50Rm9yU2hvd2luZ1BsYXliYWNrQ29udHJvbHNNYW5hZ2VyKE1lZGlhRWxlbWVu
dFNlc3Npb246OlBsYXliYWNrQ29udHJvbHNQdXJwb3NlKTsKIAotICAgIHZvaWQgcmV3aW5kKGRv
dWJsZSB0aW1lRGVsdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV3aW5kKGRvdWJsZSB0
aW1lRGVsdGEpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmV0dXJuVG9SZWFsdGltZSgpIG92
ZXJyaWRlOwogCiAgICAgLy8gRXZlbnR1YWxseSBvdmVybG9hZGVkIGluIEhUTUxWaWRlb0VsZW1l
bnQKQEAgLTIyNyw3ICsyMjcsNyBAQCBwdWJsaWM6CiAKIC8vIHBsYXliYWNrIHN0YXRlCiAgICAg
V0VCQ09SRV9FWFBPUlQgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnJl
bnRUaW1lV2l0aFRvbGVyYW5jZShkb3VibGUsIGRvdWJsZSB0b2xlcmFuY2VCZWZvcmUsIGRvdWJs
ZSB0b2xlcmFuY2VBZnRlcik7CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lRm9yQmluZGluZ3MoKSBj
b25zdCB7IHJldHVybiBjdXJyZW50VGltZSgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0Q3VycmVudFRpbWVGb3JCaW5kaW5ncyhkb3VibGUpOwpAQCAtMzA2LDcg
KzMwNiw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRyb2xzKCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb250cm9scyhib29sKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBkb3VibGUgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0Vm9sdW1lKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0Vm9sdW1lKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBtdXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPKQotCi0jaW1wb3J0IDxBcHBLaXQvTlNXaW5kb3dDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNTY3JlZW4uaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFBBTCB7Ci1jbGFzcyBTbGVlcERpc2FibGVyOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9jb2wgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlOwotQGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXI7Ci1AY2xhc3MgV2ViV2luZG93RmFkZUFuaW1hdGlvbjsKLUBj
bGFzcyBDQUxheWVyOwotCi1XRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewotQHByaXZhdGUKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsgLy8gKHJldGFpbikK
LSAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7
IC8vIChhc3NpZ24pCi0KLSAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93
OyAvLyAocmV0YWluKQotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIg
Kl9odWRDb250cm9sbGVyOyAvLyAocmV0YWluKQotCi0gICAgV2ViV2luZG93RmFkZUFuaW1hdGlv
biAqX2ZhZGVBbmltYXRpb247IC8vIChyZXRhaW4pCi0KLSAgICBCT09MIF9pc0VuZGluZ0Z1bGxz
Y3JlZW47Ci0gICAgQk9PTCBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFBBTDo6U2xlZXBEaXNhYmxlcj4gX2Rpc3BsYXlTbGVlcERpc2FibGVyOwotfQotCi0t
IChpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKLS0g
KHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdh
dGU+KWRlbGVnYXRlOwotCi0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyKilsYXll
cjsKLS0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2
aWRlb0VsZW1lbnQ7Ci0tIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7
Ci0KLS0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKLS0gKHZvaWQp
ZXhpdEZ1bGxzY3JlZW47Ci0KLUBlbmQKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
bW0JKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNTM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJ
REVPKQotCi0jaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgiCi0KLSNpbXBv
cnQgIldlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldl
YldpbmRvd0FuaW1hdGlvbi5oIgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyTGF5ZXIu
aD4KLSNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVv
RWxlbWVudC5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3lzdGVt
L1NsZWVwRGlzYWJsZXIuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi9Tb2Z0TGlua2luZy5oPgotCi11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotCi0j
aWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0j
ZW5kaWYKLQotU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pCi1TT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQotCi11c2luZyBXZWJDb3JlOjpQbGF0Zm9y
bU1lZGlhOwotQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgOiBOU1dpbmRvdzxO
U0FuaW1hdGlvbkRlbGVnYXRlPgotewotICAgIFNFTCBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0
aW9uRW5kOwotICAgIFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uICpfZnVsbHNjcmVlbkFuaW1hdGlv
bjsgLy8gKHJldGFpbikKLX0KLS0gKHZvaWQpYW5pbWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRS
ZWN0IHRvUmVjdDooTlNSZWN0KWVuZFJlY3Qgd2l0aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24g
KilzdWJBbmltYXRpb24gY29udHJvbGxlckFjdGlvbjooU0VMKWNvbnRyb2xsZXJBY3Rpb247Ci1A
ZW5kCi0KLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcihIVURXaW5kb3dD
b250cm9sbGVyRGVsZWdhdGUpIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
RGVsZWdhdGU+Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJP
T0wpYW5pbWF0aW9uOwotLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW47Ci0t
ICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9uczsKLUBlbmQKLQotQGludGVyZmFjZSBOU1dpbmRv
dyhJc09uQWN0aXZlU3BhY2VBZGRpdGlvbkZvclRpZ2VyQW5kTGVvcGFyZCkKLS0gKEJPT0wpaXNP
bkFjdGl2ZVNwYWNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlcgotLSAoaWQpaW5pdAotewotICAgIC8vIERvIG5vdCBkZWZlciB3aW5kb3cgY3Jl
YXRpb24sIHRvIG1ha2Ugc3VyZSAtd2luZG93TnVtYmVyIGlzIGNyZWF0ZWQgKG5lZWRlZCBieSBX
ZWJXaW5kb3dTY2FsZUFuaW1hdGlvbikuCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2ViVmlk
ZW9GdWxsc2NyZWVuV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qg
c3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1
ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoV2luZG93OndpbmRv
d107Ci0gICAgW3dpbmRvdyByZWxlYXNlXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgW3NlbGYgd2luZG93RGlkTG9hZF07Ci0gICAgcmV0dXJuIHNlbGY7Ci0gICAg
Ci19Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBBU1NFUlQoIV9iYWNrZ3JvdW5kRnVsbHNjcmVl
bldpbmRvdyk7Ci0gICAgQVNTRVJUKCFfZmFkZUFuaW1hdGlvbik7Ci0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLS0gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKWZ1bGxzY3Jl
ZW5XaW5kb3cKLXsKLSAgICByZXR1cm4gKFdlYlZpZGVvRnVsbHNjcmVlbldpbmRvdyAqKVtzdXBl
ciB3aW5kb3ddOwotfQotCi0tICh2b2lkKXNldHVwVmlkZW9PdmVybGF5OihDQUxheWVyICopbGF5
ZXIKLXsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxz
Y3JlZW5XaW5kb3ddOwotICAgIFsoTlNWaWV3Kilbd2luZG93IGNvbnRlbnRWaWV3XSBzZXRMYXll
cjpsYXllcl07Ci0gICAgW1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6WUVTXTsK
LX0KLQotLSAodm9pZCl3aW5kb3dEaWRMb2FkCi17Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuV2lu
ZG93ICp3aW5kb3cgPSBbc2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLSAgICBbd2luZG93IHNldEhh
c1NoYWRvdzpZRVNdOyAvLyBUaGlzIGlzIG5pY2VyIHdpdGggYSBzaGFkb3cuCi0gICAgW3dpbmRv
dyBzZXRMZXZlbDpOU1BvcFVwTWVudVdpbmRvd0xldmVsLTFdOwotICAgIFsoTlNWaWV3Kilbd2lu
ZG93IGNvbnRlbnRWaWV3XSBzZXRMYXllcjpbQ0FMYXllciBsYXllcl1dOwotICAgIFtbd2luZG93
IGNvbnRlbnRWaWV3XSBzZXRXYW50c0xheWVyOllFU107Ci0KLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KGFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOikgbmFtZTpOU0FwcGxpY2F0aW9uRGlkUmVzaWdu
QWN0aXZlTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihh
cHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25E
aWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07Ci19Ci0K
LS0gKEhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAotewotICAgIHJldHVybiBfdmlkZW9F
bGVtZW50LmdldCgpOwotfQotCi0tICh2b2lkKXNldFZpZGVvRWxlbWVudDooSFRNTFZpZGVvRWxl
bWVudCopdmlkZW9FbGVtZW50Ci17Ci0gICAgX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsK
LQotICAgIGlmICghX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtz
ZWxmIGlzV2luZG93TG9hZGVkXSkgewotICAgICAgICBpZiAoX3ZpZGVvRWxlbWVudC0+cGxhdGZv
cm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQbGF5ZXJU
eXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0gX3ZpZGVvRWxlbWVudC0+cGxh
dGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOwotICAgICAgICAgICAgUmV0YWluUHRy
PEFWUGxheWVyTGF5ZXI+IGxheWVyID0gYWRvcHROUyhbYWxsb2NBVlBsYXllckxheWVySW5zdGFu
Y2UoKSBpbml0XSk7Ci0gICAgICAgICAgICBbc2VsZiBzZXR1cFZpZGVvT3ZlcmxheTpsYXllci5n
ZXQoKV07Ci0gICAgICAgICAgICBbbGF5ZXIuZ2V0KCkgc2V0UGxheWVyOnBsYXllcl07Ci0KLSAg
ICAgICAgICAgIFtwbGF5ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAicmF0ZSIgb3B0
aW9uczowIGNvbnRleHQ6bnVsbHB0cl07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKGlkIDxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0
dXJuIF9kZWxlZ2F0ZTsKLX0KLQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKLX0KLQotLSAoQ0dGbG9hdCljbGVhckZhZGVBbmltYXRpb24KLXsKLSAgICBbX2Zh
ZGVBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgQ0dGbG9hdCBwcmV2aW91c0FscGhhID0g
W19mYWRlQW5pbWF0aW9uIGN1cnJlbnRBbHBoYV07Ci0gICAgW19mYWRlQW5pbWF0aW9uIHNldFdp
bmRvdzpuaWxdOwotICAgIFtfZmFkZUFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBfZmFkZUFuaW1h
dGlvbiA9IG5pbDsKLSAgICByZXR1cm4gcHJldmlvdXNBbHBoYTsKLX0KLQotLSAodm9pZCl3aW5k
b3dEaWRFeGl0RnVsbHNjcmVlbgotewotICAgIENBTGF5ZXIgKmxheWVyID0gWyhOU1ZpZXcqKVtb
c2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBsYXllcl07Ci0gICAgaWYgKFtsYXllciBpc0tpbmRP
ZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSkKLSAgICAgICAgW1soQVZQbGF5ZXJMYXll
ciopbGF5ZXIgcGxheWVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJyYXRlIl07
Ci0KLSAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOwotICAgIFtbc2VsZiB3aW5kb3ddIGNs
b3NlXTsKLSAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKLSAgICBbc2VsZiB1cGRhdGVNZW51QW5k
RG9ja0ZvckZ1bGxzY3JlZW5dOyAgIAotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0aW9uc107
Ci0gICAgW19odWRDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19odWRDb250cm9s
bGVyIHJlbGVhc2VdOwotICAgIF9odWRDb250cm9sbGVyID0gbmlsOwotICAgIFtfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgY2xvc2VdOwotICAgIFtfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5k
b3cgcmVsZWFzZV07Ci0gICAgX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93ID0gbmlsOwotICAg
IAotICAgIFtzZWxmIGF1dG9yZWxlYXNlXTsgLy8gQXNzb2NpYXRlZCAtcmV0YWluIGlzIGluIC1l
eGl0RnVsbHNjcmVlbi4KLSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gTk87Ci19Ci0KLS0gKHZv
aWQpd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgY2xlYXJGYWRlQW5pbWF0
aW9uXTsKLQotICAgIEFTU0VSVCghX2h1ZENvbnRyb2xsZXIpOwotICAgIF9odWRDb250cm9sbGVy
ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsK
LSAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0KLSAgICBbc2VsZiB1cGRh
dGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOwotICAgIFtzZWxmIHVwZGF0ZVBvd2VyQXNzZXJ0
aW9uc107Ci0gICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOwotICAg
IAotICAgIC8vIEdpdmUgdGhlIEhVRCBrZXlib2FyZCBmb2N1cyBpbml0aWFsbHkKLSAgICBbX2h1
ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKLX0KLQotLSAoTlNSZWN0KXZpZGVvRWxlbWVudFJl
Y3QKLXsKLSAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpOwotfQotCi0tICh2
b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0
aW9uCi17ICAgCi0gICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgTlNXaW5kb3cq
IGZ1bGxzY3JlZW5XaW5kb3cgPSBbc2VsZiBmdWxsc2NyZWVuV2luZG93XTsKLQotICAgIC8vIFJl
cGxpY2F0ZSB0aGUgUXVpY2tUaW1lIFBsYXllciAoWCkgYmVoYXZpb3Igd2hlbiBsb3NpbmcgYWN0
aXZlIGFwcGxpY2F0aW9uIHN0YXR1czoKLSAgICAvLyBJcyB0aGUgZnVsbHNjcmVlbiBzY3JlZW4g
dGhlIG1haW4gc2NyZWVuPyAoTm90ZTogdGhpcyBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgb25seSBh
IAotICAgIC8vIHNpbmdsZSBzY3JlZW4gaXMgYXZhaWxhYmxlLikgIElzIHRoZSBmdWxsc2NyZWVu
IHNjcmVlbiBvbiB0aGUgY3VycmVudCBzcGFjZT8gSUZGIHNvLCAKLSAgICAvLyB0aGVuIGV4aXQg
ZnVsbHNjcmVlbiBtb2RlLiAgICAKLSAgICBpZiAoZnVsbHNjcmVlbldpbmRvdy5zY3JlZW4gPT0g
W05TU2NyZWVuIHNjcmVlbnNdWzBdICYmIGZ1bGxzY3JlZW5XaW5kb3cub25BY3RpdmVTcGFjZSkK
LSAgICAgICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246Tk9dOwot
fQotICAgICAgICAgCi0gICAgICAgICAKLS8vIE1BUks6IC0KLS8vIE1BUks6IEV4cG9zZWQgSW50
ZXJmYWNlCi0KLXN0YXRpYyBOU1JlY3QgZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZyYW1lKE5TUmVj
dCBmcmFtZVRvRXhwYW5kLCBOU1JlY3QgZnJhbWUpCi17Ci0gICAgLy8gS2VlcCBhIGNvbnN0cmFp
bmVkIGFzcGVjdCByYXRpbyBmb3IgdGhlIGRlc3RpbmF0aW9uIHdpbmRvdwotICAgIE5TUmVjdCBy
ZXN1bHQgPSBmcmFtZVRvRXhwYW5kOwotICAgIENHRmxvYXQgbmV3UmF0aW8gPSBmcmFtZS5zaXpl
LndpZHRoIC8gZnJhbWUuc2l6ZS5oZWlnaHQ7Ci0gICAgQ0dGbG9hdCBvcmlnaW5hbFJhdGlvID0g
ZnJhbWVUb0V4cGFuZC5zaXplLndpZHRoIC8gZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAg
ICBpZiAobmV3UmF0aW8gPiBvcmlnaW5hbFJhdGlvKSB7Ci0gICAgICAgIENHRmxvYXQgbmV3V2lk
dGggPSBuZXdSYXRpbyAqIGZyYW1lVG9FeHBhbmQuc2l6ZS5oZWlnaHQ7Ci0gICAgICAgIENHRmxv
YXQgZGlmZiA9IG5ld1dpZHRoIC0gZnJhbWVUb0V4cGFuZC5zaXplLndpZHRoOwotICAgICAgICBy
ZXN1bHQuc2l6ZS53aWR0aCA9IG5ld1dpZHRoOwotICAgICAgICByZXN1bHQub3JpZ2luLnggLT0g
ZGlmZiAvIDI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ0dGbG9hdCBuZXdIZWlnaHQgPSBmcmFt
ZVRvRXhwYW5kLnNpemUud2lkdGggLyBuZXdSYXRpbzsKLSAgICAgICAgQ0dGbG9hdCBkaWZmID0g
bmV3SGVpZ2h0IC0gZnJhbWVUb0V4cGFuZC5zaXplLmhlaWdodDsKLSAgICAgICAgcmVzdWx0LnNp
emUuaGVpZ2h0ID0gbmV3SGVpZ2h0OwotICAgICAgICByZXN1bHQub3JpZ2luLnkgLT0gZGlmZiAv
IDI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBOU1dpbmRvdyAqY3Jl
YXRlQmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3coTlNSZWN0IGZyYW1lLCBpbnQgbGV2ZWwpCi17
Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVu
dFJlY3Q6ZnJhbWUgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0Jh
Y2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBbd2luZG93IHNldE9wYXF1ZTpZRVNd
OwotICAgIFt3aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsK
LSAgICBbd2luZG93IHNldExldmVsOmxldmVsXTsKLSAgICBbd2luZG93IHNldFJlbGVhc2VkV2hl
bkNsb3NlZDpOT107Ci0gICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotLSAodm9pZClzZXR1cEZhZGVB
bmltYXRpb25JZk5lZWRlZEFuZEZhZGVJbjooQk9PTClmYWRlSW4KLXsKLSAgICBDR0Zsb2F0IGlu
aXRpYWxBbHBoYSA9IGZhZGVJbiA/IDAgOiAxOwotICAgIGlmIChfZmFkZUFuaW1hdGlvbikgewot
ICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiBpZiB0aGUg
cHJldmlvdXMgb25lIGlzbid0IG92ZXIgeWV0Ci0gICAgICAgIGluaXRpYWxBbHBoYSA9IFtzZWxm
IGNsZWFyRmFkZUFuaW1hdGlvbl07Ci0gICAgfQotICAgIGlmICghX2ZvcmNlRGlzYWJsZUFuaW1h
dGlvbikKLSAgICAgICAgX2ZhZGVBbmltYXRpb24gPSBbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24g
YWxsb2NdIGluaXRXaXRoRHVyYXRpb246MC4yIHdpbmRvdzpfYmFja2dyb3VuZEZ1bGxzY3JlZW5X
aW5kb3cgaW5pdGlhbEFscGhhOmluaXRpYWxBbHBoYSBmaW5hbEFscGhhOmZhZGVJbiA/IDEgOiAw
XTsKLX0KLQotLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCi17Ci0g
ICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsK
LQotICAgIE5TUmVjdCBlbmRGcmFtZSA9IFtzY3JlZW4gZnJhbWVdOwotICAgIE5TUmVjdCBmcmFt
ZSA9IGZyYW1lRXhwYW5kZWRUb1JhdGlvT2ZGcmFtZShbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XSwg
ZW5kRnJhbWUpOwotCi0gICAgLy8gQ3JlYXRlIGEgYmxhY2sgd2luZG93IGlmIG5lZWRlZAotICAg
IGlmICghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KQotICAgICAgICBfYmFja2dyb3VuZEZ1
bGxzY3JlZW5XaW5kb3cgPSBjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhbc2NyZWVu
IGZyYW1lXSwgW1tzZWxmIHdpbmRvd10gbGV2ZWxdLTEpOwotICAgIGVsc2UKLSAgICAgICAgW19i
YWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBzZXRGcmFtZTpbc2NyZWVuIGZyYW1lXSBkaXNwbGF5
Ok5PXTsKLQotICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOllF
U107Ci0gICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAgLy8gVGhpcyB3
aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGZyYW1lID0gTlNaZXJvUmVjdDsK
LSAgICB9Ci0gICAgW1tzZWxmIGZ1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpmcmFt
ZSB0b1JlY3Q6ZW5kRnJhbWUgd2l0aFN1YkFuaW1hdGlvbjpfZmFkZUFuaW1hdGlvbiBjb250cm9s
bGVyQWN0aW9uOkBzZWxlY3Rvcih3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4pXTsKLQotICAgIFtf
YmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cgb3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxh
dGl2ZVRvOltbc2VsZiBmdWxsc2NyZWVuV2luZG93XSB3aW5kb3dOdW1iZXJdXTsKLX0KLQotLSAo
dm9pZClleGl0RnVsbHNjcmVlbgotewotICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQotICAg
ICAgICByZXR1cm47Ci0gICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKLSAgICBbX2h1ZENv
bnRyb2xsZXIgY2xvc2VXaW5kb3ddOwotCi0gICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYgdmlk
ZW9FbGVtZW50UmVjdF07Ci0KLSAgICBbc2VsZiBzZXR1cEZhZGVBbmltYXRpb25JZk5lZWRlZEFu
ZEZhZGVJbjpOT107Ci0gICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKLSAgICAgICAg
Ly8gVGhpcyB3aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGVuZEZyYW1lID0g
TlNaZXJvUmVjdDsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgaGF2ZSB0byByZXRhaW4gb3Vyc2Vs
dmVzIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhbGl2ZSBmb3IgdGhlIGVuZCBvZiB0aGUgYW5pbWF0
aW9uLgotICAgIC8vIElmIG91ciBvd25lciByZWxlYXNlcyB1cyB3ZSBjb3VsZCBjcmFzaCBpZiB0
aGlzIGlzIG5vdCB0aGUgY2FzZS4KLSAgICAvLyBCYWxhbmNlZCBpbiB3aW5kb3dEaWRFeGl0RnVs
bHNjcmVlbgotICAgIFtzZWxmIHJldGFpbl07ICAgIAotCi0gICAgTlNSZWN0IHN0YXJ0RnJhbWUg
PSBbW3NlbGYgd2luZG93XSBmcmFtZV07Ci0gICAgZW5kRnJhbWUgPSBmcmFtZUV4cGFuZGVkVG9S
YXRpb09mRnJhbWUoZW5kRnJhbWUsIHN0YXJ0RnJhbWUpOwotCi0gICAgW1tzZWxmIGZ1bGxzY3Jl
ZW5XaW5kb3ddIGFuaW1hdGVGcm9tUmVjdDpzdGFydEZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRo
U3ViQW5pbWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdp
bmRvd0RpZEV4aXRGdWxsc2NyZWVuKV07Ci19Ci0KLS0gKHZvaWQpYXBwbGljYXRpb25EaWRDaGFu
Z2VTY3JlZW5QYXJhbWV0ZXJzOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCi17Ci0gICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgLy8gVGhlIHVzZXIgbWF5IGhhdmUgY2hh
bmdlZCB0aGUgbWFpbiBzY3JlZW4gYnkgbW92aW5nIHRoZSBtZW51IGJhciwgb3IgdGhleSBtYXkg
aGF2ZSBjaGFuZ2VkCi0gICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBvciB0aGV5
IG1heSBoYXZlIGNoYW5nZWQgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9ucy4gIAot
ICAgIC8vIFVwZGF0ZSBvdXIgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMsIGFuZCBlbnN1cmUgdGhh
dCB0aGUgZnVsbCBzY3JlZW4gd2luZG93IG9jY3VwaWVzIHRoZSAKLSAgICAvLyBlbnRpcmUgc2Ny
ZWVuOgotICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07Ci0gICAgW1tz
ZWxmIHdpbmRvd10gc2V0RnJhbWU6W1tbc2VsZiB3aW5kb3ddIHNjcmVlbl0gZnJhbWVdIGRpc3Bs
YXk6WUVTXTsKLX0KLQotLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW4KLXsK
LSAgICAvLyBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBpcyBhdmFpbGFibGUgb24g
PiAxMC42IG9ubHk6Ci0gICAgTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbk9wdGlvbnMgb3B0aW9u
cyA9IE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25EZWZhdWx0OwotICAgIE5TU2NyZWVuKiBmdWxs
c2NyZWVuU2NyZWVuID0gW1tzZWxmIHdpbmRvd10gc2NyZWVuXTsKLQotICAgIGlmICghX2lzRW5k
aW5nRnVsbHNjcmVlbikgewotICAgICAgICAvLyBBdXRvLWhpZGUgdGhlIG1lbnUgYmFyIGlmIHRo
ZSBmdWxsc2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhcjoKLSAgICAgICAgLy8gTk9U
RTogaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyIGJ1dCBub3Qg
dGhlIGRvY2ssIHdlIG11c3Qgc3RpbGwgCi0gICAgICAgIC8vIGF1dG8taGlkZSB0aGUgZG9jaywg
b3IgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICAgICAgICBpZiAoW1tOU1NjcmVlbiBz
Y3JlZW5zXSBvYmplY3RBdEluZGV4OjBdID09IGZ1bGxzY3JlZW5TY3JlZW4pCi0gICAgICAgICAg
ICBvcHRpb25zIHw9IChOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVNZW51QmFyIHwg
TlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jayk7Ci0gICAgICAgIC8vIENoZWNr
IGlmIHRoZSBjdXJyZW50IHNjcmVlbiBjb250YWlucyB0aGUgZG9jayBieSBjb21wYXJpbmcgdGhl
IHNjcmVlbidzIGZyYW1lIHRvIGl0cwotICAgICAgICAvLyB2aXNpYmxlRnJhbWU7IGlmIGEgZG9j
ayBpcyBwcmVzZW50LCB0aGUgdmlzaWJsZUZyYW1lIHdpbGwgZGlmZmVyLiAgSWYgdGhlIGN1cnJl
bnQgc2NyZWVuCi0gICAgICAgIC8vIGNvbnRhaW5zIHRoZSBkb2NrLCBoaWRlIGl0LgotICAgICAg
ICBlbHNlIGlmICghTlNFcXVhbFJlY3RzKFtmdWxsc2NyZWVuU2NyZWVuIGZyYW1lXSwgW2Z1bGxz
Y3JlZW5TY3JlZW4gdmlzaWJsZUZyYW1lXSkpCi0gICAgICAgICAgICBvcHRpb25zIHw9IE5TQXBw
bGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZURvY2s7Ci0gICAgfQotCi0gICAgTlNBcHAucHJl
c2VudGF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUG93ZXJBc3Nl
cnRpb25zCi17Ci0gICAgX2Rpc3BsYXlTbGVlcERpc2FibGVyID0gbnVsbHB0cjsKLX0KLQotLy8g
TUFSSzogLQotLy8gTUFSSzogV2luZG93IGNhbGxiYWNrCi0KLS0gKHZvaWQpX3JlcXVlc3RFeGl0
Ci17Ci0gICAgaWYgKF92aWRlb0VsZW1lbnQpCi0gICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRG
dWxsc2NyZWVuKCk7Ci0gICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwotfQotCi0tICh2
b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uCi17
Ci0gICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9m
b3JjZURpc2FibGVBbmltYXRpb24gPSAhYW5pbWF0aW9uOwotICAgIFtzZWxmIHBlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3IoX3JlcXVlc3RFeGl0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBd
OwotCi19Ci0KLS0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuCi17Ci0gICAgW3NlbGYgcmVx
dWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpZRVNdOwotfQotCi0tICh2b2lkKWZhZGVI
VURJbgotewotICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOwotfQotCi0tICh2b2lk
KW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQp
b2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250
ZXh0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoYW5n
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotCi0gICAgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUbzpAInJhdGUiXSkKLSAgICAgICAgW3NlbGYgcmF0ZUNoYW5nZWQ6bmlsXTsKLX0KLQotLSAo
dm9pZClyYXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KLXsK
LSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKLSAgICBbX2h1ZENvbnRyb2xs
ZXIgdXBkYXRlUmF0ZV07Ci0gICAgW3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKLX0KLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuV2luZG93Ci0KLS0gKGlk
KWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUlu
dGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRl
ZmVyOihCT09MKWZsYWcKLXsKLSAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVy
bGVzc1dpbmRvd01hc2sgYmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwot
ICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAg
W3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKLSAgICBbc2VsZiBzZXRBY2NlcHRzTW91
c2VNb3ZlZEV2ZW50czpZRVNdOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBBU1NFUlQoIV9mdWxsc2NyZWVuQW5pbWF0aW9uKTsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4g
Tk87Ci19Ci0KLS0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93Ci17Ci0gICAgcmV0dXJuIE5POwot
fQotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VE
X1BBUkFNKHRoZUV2ZW50KTsKLX0KLQotLSAodm9pZCljYW5jZWxPcGVyYXRpb246KGlkKXNlbmRl
cgotewotICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtbc2VsZiB3aW5kb3dDb250cm9s
bGVyXSByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5dOwotfQotCi0tICh2b2lkKWFuaW1hdGVkUmVzaXpl
RGlkRW5kCi17Ci0gICAgLy8gQ2FsbCBvdXIgd2luZG93Q29udHJvbGxlci4KLSAgICBpZiAoX2Nv
bnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCkKLSAgICAgICAgW1tzZWxmIHdpbmRvd0NvbnRy
b2xsZXJdIHBlcmZvcm1TZWxlY3RvcjpfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kXTsK
LSAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5kID0gTlVMTDsKLX0KLQotLy8KLS8v
IFRoaXMgZnVuY3Rpb24gd2lsbCBhbmltYXRlIGEgY2hhbmdlIG9mIGZyYW1lIHJlY3RhbmdsZQot
Ly8gV2Ugc3VwcG9ydCBxdWV1aW5nIGFuaW1hdGlvbiwgdGhhdCBtZWFucyB0aGF0IHdlJ2xsIGNv
cnJlY3RseQotLy8gaW50ZXJydXB0IHRoZSBydW5uaW5nIGFuaW1hdGlvbiwgYW5kIHF1ZXVlIHRo
ZSBuZXh0IG9uZS4KLS8vCi0tICh2b2lkKWFuaW1hdGVGcm9tUmVjdDooTlNSZWN0KXN0YXJ0UmVj
dCB0b1JlY3Q6KE5TUmVjdCllbmRSZWN0IHdpdGhTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICop
c3ViQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246KFNFTCljb250cm9sbGVyQWN0aW9uCi17Ci0g
ICAgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZCA9IGNvbnRyb2xsZXJBY3Rpb247Ci0K
LSAgICBCT09MIHdhc0FuaW1hdGluZyA9IE5POwotICAgIGlmIChfZnVsbHNjcmVlbkFuaW1hdGlv
bikgewotICAgICAgICB3YXNBbmltYXRpbmcgPSBZRVM7Ci0KLSAgICAgICAgLy8gSW50ZXJydXB0
IGFueSBydW5uaW5nIGFuaW1hdGlvbi4KLSAgICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHN0
b3BBbmltYXRpb25dOwotCi0gICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVjdCB0byBlbnN1
cmUgYSBzbW9vdGggdHJhbnNpdGlvbi4KLSAgICAgICAgc3RhcnRSZWN0ID0gW19mdWxsc2NyZWVu
QW5pbWF0aW9uIGN1cnJlbnRGcmFtZV07Ci0gICAgICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBy
ZWxlYXNlXTsKLSAgICAgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7Ci0gICAgfQotICAg
IAotICAgIGlmIChOU0lzRW1wdHlSZWN0KHN0YXJ0UmVjdCkgfHwgTlNJc0VtcHR5UmVjdChlbmRS
ZWN0KSkgewotICAgICAgICAvLyBGYWtlbHkgZW5kIHRoZSBzdWJhbmltYXRpb24uCi0gICAgICAg
IFtzdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjFdOwotICAgICAgICAvLyBBbmQgcmVt
b3ZlIHRoZSB3ZWFrIGxpbmsgdG8gdGhlIHdpbmRvdy4KLSAgICAgICAgW3N1YkFuaW1hdGlvbiBz
dG9wQW5pbWF0aW9uXTsKLQotICAgICAgICBbc2VsZiBzZXRGcmFtZTplbmRSZWN0IGRpc3BsYXk6
Tk9dOwotICAgICAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLSAgICAgICAg
W3NlbGYgYW5pbWF0ZWRSZXNpemVEaWRFbmRdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCF3YXNBbmltYXRpbmcpIHsKLSAgICAgICAgLy8gV2UnbGwgZG93bnNjYWxlIHRoZSB3
aW5kb3cgZHVyaW5nIHRoZSBhbmltYXRpb24gYmFzZWQgb24gdGhlIGhpZ2hlciByZXNvbHV0aW9u
IHJlY3QKLSAgICAgICAgQk9PTCBoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID0gc3RhcnRSZWN0
LnNpemUud2lkdGggPCBlbmRSZWN0LnNpemUud2lkdGggJiYgc3RhcnRSZWN0LnNpemUuaGVpZ2h0
IDwgZW5kUmVjdC5zaXplLmhlaWdodDsKLSAgICAgICAgW3NlbGYgc2V0RnJhbWU6aGlnaGVyUmVz
b2x1dGlvbklzRW5kUmVjdCA/IGVuZFJlY3QgOiBzdGFydFJlY3QgZGlzcGxheTpOT107Ci0gICAg
fQotICAgIAotICAgIEFTU0VSVCghX2Z1bGxzY3JlZW5BbmltYXRpb24pOwotICAgIF9mdWxsc2Ny
ZWVuQW5pbWF0aW9uID0gW1tXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhI
aW50ZWREdXJhdGlvbjowLjIgd2luZG93OnNlbGYgaW5pdGFsRnJhbWU6c3RhcnRSZWN0IGZpbmFs
RnJhbWU6ZW5kUmVjdF07Ci0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFN1YkFuaW1hdGlv
bjpzdWJBbmltYXRpb25dOwotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBoYXMgc2NhbGVkIHRo
ZSB3aW5kb3cgYmVmb3JlIHNob3dpbmcgaXQuCi0gICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczowXTsKLSAgICBbc2VsZiBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxm
XTsKLQotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0g
KHZvaWQpYW5pbWF0aW9uRGlkRW5kOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgotewotICAgIGlm
ICghW05TVGhyZWFkIGlzTWFpblRocmVhZF0pIHsKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVj
dG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihhbmltYXRpb25EaWRFbmQ6KSB3aXRoT2JqZWN0OmFu
aW1hdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoYW5pbWF0aW9uICE9IF9mdWxsc2NyZWVuQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBUaGUgYW5pbWF0aW9uIGlzIG5vdCByZWFsbHkgb3ZlciBhbmQgd2FzIGludGVycnVw
dGVkCi0gICAgLy8gRG9uJ3Qgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KLSAgICBpZiAoW2FuaW1h
dGlvbiBjdXJyZW50UHJvZ3Jlc3NdIDwgMS4wKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBF
bnN1cmUgdGhhdCBhbmltYXRpb24gKGFuZCBzdWJhbmltYXRpb24pIGRvbid0IGtlZXAKLSAgICAv
LyB0aGUgd2VhayByZWZlcmVuY2UgdG8gdGhlIHdpbmRvdyBpdmFyIHRoYXQgbWF5IGJlIGRlc3Ry
b3llZCBmcm9tCi0gICAgLy8gbm93IG9uLgotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBzZXRX
aW5kb3c6bmlsXTsKLQotICAgIFtfZnVsbHNjcmVlbkFuaW1hdGlvbiBhdXRvcmVsZWFzZV07Ci0g
ICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBuaWw7Ci0KLSAgICBbc2VsZiBhbmltYXRlZFJlc2l6
ZURpZEVuZF07Ci19Ci0KLS0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17
Ci0gICAgVU5VU0VEX1BBUkFNKHRoZUV2ZW50KTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxl
cl0gZmFkZUhVREluXTsKLX0KLQotQGVuZAotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLQotI2VuZGlmIC8qIEVOQUJMRShWSURFTykg
Ki8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhV
RFdpbmRvd0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lvbiAy
MjgyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbXBvcnQgPEFwcEtpdC9OU0J1dHRvbi5o
PgotI2ltcG9ydCA8QXBwS2l0L05TQ29udHJvbC5oPgotI2ltcG9ydCA8QXBwS2l0L05TVGV4dEZp
ZWxkLmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNUcmFja2luZ0FyZWEuaD4KLSNpbXBvcnQgPEFwcEtp
dC9OU1dpbmRvdy5oPgotI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotfQotCi1AcHJvdG9j
b2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlOwotCi1AaW50
ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0Nv
bnRyb2xsZXIKLXsKLSAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ckRlbGVnYXRlPiBfZGVsZWdhdGU7Ci0gICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7
Ci0gICAgTlNUcmFja2luZ0FyZWEgKl9hcmVhOwotICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKLSAg
ICBCT09MIF9pc0VuZGluZ0Z1bGxzY3JlZW47Ci0gICAgQk9PTCBfaXNTY3J1YmJpbmc7Ci0KLSAg
ICBOU0NvbnRyb2wgKl90aW1lbGluZTsKLSAgICBOU1RleHRGaWVsZCAqX3JlbWFpbmluZ1RpbWVU
ZXh0OwotICAgIE5TVGV4dEZpZWxkICpfZWxhcHNlZFRpbWVUZXh0OwotICAgIE5TQ29udHJvbCAq
X3ZvbHVtZVNsaWRlcjsKLSAgICBOU0J1dHRvbiAqX3BsYXlCdXR0b247Ci19Ci0KLS0gKGlkIDxX
ZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOwot
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7Ci0tICh2b2lkKWZhZGVXaW5kb3dJbjsKLS0gKHZvaWQp
ZmFkZVdpbmRvd091dDsKLS0gKHZvaWQpY2xvc2VXaW5kb3c7Ci0tICh2b2lkKXVwZGF0ZVJhdGU7
Ci0KLUBlbmQKLQotQHByb3RvY29sIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKLS0g
KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKLUBlbmQKLQotI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3Zu
OmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0JKHJl
dmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCShub25leGlzdGVudCkKQEAgLTEsNzM4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0K
LSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9F
bGVtZW50Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9y
dCA8cGFsL3NwaS9tYWMvUVRLaXRTUEkuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgot
Ci1TT0ZUX0xJTktfRlJBTUVXT1JLKFFUS2l0KQotCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFU
SFVEQmFja2dyb3VuZFZpZXcpCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEQnV0dG9uKQot
U09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVRFNsaWRlcikKLVNPRlRfTElOS19DTEFTUyhRVEtp
dCwgUVRIVURUaW1lbGluZSkKLQotI2RlZmluZSBRVEhVREJhY2tncm91bmRWaWV3IGdldFFUSFVE
QmFja2dyb3VuZFZpZXdDbGFzcygpCi0jZGVmaW5lIFFUSFVEQnV0dG9uIGdldFFUSFVEQnV0dG9u
Q2xhc3MoKQotI2RlZmluZSBRVEhVRFNsaWRlciBnZXRRVEhVRFNsaWRlckNsYXNzKCkKLSNkZWZp
bmUgUVRIVURUaW1lbGluZSBnZXRRVEhVRFRpbWVsaW5lQ2xhc3MoKQotCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotZW51bSBjbGFzcyBNZWRpYVVJQ29udHJvbCB7Ci0gICAgVGltZWxpbmUsCi0g
ICAgU2xpZGVyLAotICAgIFBsYXlQYXVzZUJ1dHRvbiwKLSAgICBFeGl0RnVsbHNjcmVlbkJ1dHRv
biwKLSAgICBSZXdpbmRCdXR0b24sCi0gICAgRmFzdEZvcndhcmRCdXR0b24sCi0gICAgVm9sdW1l
VXBCdXR0b24sCi0gICAgVm9sdW1lRG93bkJ1dHRvbiwKLX07Ci0KLX0KLQotdXNpbmcgV2ViQ29y
ZTo6TWVkaWFVSUNvbnRyb2w7Ci11c2luZyBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OwotdXNp
bmcgV2ViQ29yZTo6bmFycm93UHJlY2lzaW9uVG9GbG9hdDsKLUBpbnRlcmZhY2UgV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciAoUHJpdmF0ZSkgPE5TV2luZG93RGVsZWdhdGU+
Ci0KLS0gKHZvaWQpdXBkYXRlVGltZTsKLS0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6
KGlkKXNlbmRlcjsKLS0gKGZsb2F0KWN1cnJlbnRUaW1lOwotLSAodm9pZClzZXRDdXJyZW50VGlt
ZTooZmxvYXQpY3VycmVudFRpbWU7Ci0tIChkb3VibGUpZHVyYXRpb247Ci0KLS0gKHZvaWQpdm9s
dW1lQ2hhbmdlZDooaWQpc2VuZGVyOwotLSAoZmxvYXQpbWF4Vm9sdW1lOwotLSAoZmxvYXQpdm9s
dW1lOwotLSAodm9pZClzZXRWb2x1bWU6KGZsb2F0KXZvbHVtZTsKLS0gKHZvaWQpZGVjcmVtZW50
Vm9sdW1lOwotLSAodm9pZClpbmNyZW1lbnRWb2x1bWU7Ci0KLS0gKHZvaWQpdXBkYXRlUGxheUJ1
dHRvbjsKLS0gKHZvaWQpdG9nZ2xlUGxheWluZzooaWQpc2VuZGVyOwotLSAoQk9PTClwbGF5aW5n
OwotLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmc7Ci0KLS0gKHZvaWQpcmV3aW5kOihp
ZClzZW5kZXI7Ci0tICh2b2lkKWZhc3RGb3J3YXJkOihpZClzZW5kZXI7Ci0KLS0gKE5TU3RyaW5n
ICopcmVtYWluaW5nVGltZVRleHQ7Ci0tIChOU1N0cmluZyAqKWVsYXBzZWRUaW1lVGV4dDsKLQot
LSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyOwotQGVuZAotCi1AaW50ZXJmYWNlIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvdyA6IE5TV2luZG93Ci1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cKLQotLSAoaWQpaW5pdFdpdGhDb250ZW50
UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFj
a2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZwot
ewotICAgIFVOVVNFRF9QQVJBTShhU3R5bGUpOwotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhD
b250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJs
ZXNzIGJhY2tpbmc6YnVmZmVyaW5nVHlwZSBkZWZlcjpmbGFnXTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwotICAgIFtzZWxm
IHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW3NlbGYgc2V0
TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07Ci0gICAgW3NlbGYgc2V0QWNjZXB0c01vdXNl
TW92ZWRFdmVudHM6WUVTXTsKLSAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6Tk9dOwot
ICAgIFtzZWxmIHNldE1vdmFibGVCeVdpbmRvd0JhY2tncm91bmQ6WUVTXTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tIChCT09MKWNhbkJlY29tZUtleVdpbmRvdwotewotICAgIHJldHVybiBZ
RVM7Ci19Ci0KLS0gKHZvaWQpY2FuY2VsT3BlcmF0aW9uOihpZClzZW5kZXIKLXsKLSAgICBVTlVT
RURfUEFSQU0oc2VuZGVyKTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gZXhpdEZ1bGxz
Y3JlZW46c2VsZl07Ci19Ci0KLS0gKHZvaWQpY2VudGVyCi17Ci0gICAgTlNSZWN0IGh1ZEZyYW1l
ID0gW3NlbGYgZnJhbWVdOwotICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFp
blNjcmVlbl0gZnJhbWVdOwotICAgIFtzZWxmIHNldEZyYW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBv
aW50KHNjcmVlbkZyYW1lLm9yaWdpbi54ICsgKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRG
cmFtZS5zaXplLndpZHRoKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyZWVuRnJhbWUub3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQg
LSBodWRGcmFtZS5zaXplLmhlaWdodCkgLyA2KV07Ci19Ci0KLS0gKHZvaWQpa2V5RG93bjooTlNF
dmVudCAqKWV2ZW50Ci17Ci0gICAgW3N1cGVyIGtleURvd246ZXZlbnRdOwotICAgIFtbc2VsZiB3
aW5kb3dDb250cm9sbGVyXSBmYWRlV2luZG93SW5dOwotfQotCi0tIChCT09MKXJlc2lnbkZpcnN0
UmVzcG9uZGVyCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKXBlcmZvcm1LZXlFcXVp
dmFsZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBCbG9jayBhbGwgY29tbWFuZCBrZXkg
ZXZlbnRzIHdoaWxlIHRoZSBmdWxsc2NyZWVuIHdpbmRvdyBpcyB1cC4KLSAgICBpZiAoW2V2ZW50
IHR5cGVdICE9IE5TRXZlbnRUeXBlS2V5RG93bikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAot
ICAgIGlmICghKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdDb21t
YW5kKSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKLQot
c3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93SGVpZ2h0ID0gNTk7Ci1zdGF0aWMgY29uc3QgQ0dG
bG9hdCB3aW5kb3dXaWR0aCA9IDQzODsKLQotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIEhV
RFdpbmRvd0ZhZGVPdXREZWxheSA9IDM7Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyCi0KLS0gKGlkKWluaXQKLXsKLSAgICBOU1dpbmRvdyAq
d2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29u
dGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0KSBzdHls
ZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVC
dWZmZXJlZCBkZWZlcjpOT107Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aFdpbmRvdzp3aW5k
b3ddOwotICAgIFt3aW5kb3cgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW3dpbmRvdyByZWxlYXNl
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYgd2luZG93
RGlkTG9hZF07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IEFTU0VSVCghX3RpbWVsaW5lVXBkYXRlVGltZXIpOwotICAgIEFTU0VSVCghX2FyZWEpOwotICAg
IEFTU0VSVCghX2lzU2NydWJiaW5nKTsKLSAgICBbX3RpbWVsaW5lIHJlbGVhc2VdOwotICAgIFtf
cmVtYWluaW5nVGltZVRleHQgcmVsZWFzZV07Ci0gICAgW19lbGFwc2VkVGltZVRleHQgcmVsZWFz
ZV07Ci0gICAgW192b2x1bWVTbGlkZXIgcmVsZWFzZV07Ci0gICAgW19wbGF5QnV0dG9uIHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXRBcmVhOihOU1RyYWNr
aW5nQXJlYSAqKWFyZWEKLXsKLSAgICBpZiAoYXJlYSA9PSBfYXJlYSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFtfYXJlYSByZWxlYXNlXTsKLSAgICBfYXJlYSA9IFthcmVhIHJldGFpbl07Ci19Ci0K
LS0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgTlNTdHJpbmcgKmNoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnNdOwotICAgIGlmIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGxlbmd0aF0gPT0gMSkg
ewotICAgICAgICBzd2l0Y2ggKFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgY2hhcmFjdGVy
QXRJbmRleDowXSkgewotICAgICAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICAgICAgW3Nl
bGYgdG9nZ2xlUGxheWluZzpuaWxdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGNhc2UgTlNVcEFycm93RnVuY3Rpb25LZXk6Ci0gICAgICAgICAgICAgICAgaWYgKFtldmVu
dCBtb2RpZmllckZsYWdzXSAmIE5TRXZlbnRNb2RpZmllckZsYWdPcHRpb24pCi0gICAgICAgICAg
ICAgICAgICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFtzZWxmIGluY3JlbWVudFZvbHVtZV07Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0
aW9uS2V5OgotICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2
ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRWb2x1
bWU6MF07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBk
ZWNyZW1lbnRWb2x1bWVdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBb
c3VwZXIga2V5RG93bjpldmVudF07Ci19Ci0KLS0gKGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURX
aW5kb3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9kZWxlZ2F0
ZTsKLX0KLQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKLX0KLQotLSAodm9pZClzY2hlZHVsZVRpbWVVcGRhdGUKLXsKLSAgICBbTlNPYmplY3Qg
Y2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6c2VsZl07Ci0KLSAgICAvLyBGaXJz
dCwgdXBkYXRlIHJpZ2h0IGF3YXksIHRoZW4gc2NoZWR1bGUgZnV0dXJlIHVwZGF0ZQotICAgIFtz
ZWxmIHVwZGF0ZVRpbWVdOwotICAgIFtzZWxmIHVwZGF0ZVBsYXlCdXR0b25dOwotCi0gICAgW190
aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRhdGVdOwotICAgIFtfdGltZWxpbmVVcGRhdGVUaW1l
ciByZWxlYXNlXTsKLQotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMgYSByZXRhaW4gY3lj
bGUgYmV0d2VlbiB0aGUgd2luZG93IGFuZCB1cy4KLSAgICBfdGltZWxpbmVVcGRhdGVUaW1lciA9
IFtbTlNUaW1lciB0aW1lcldpdGhUaW1lSW50ZXJ2YWw6MC4yNSB0YXJnZXQ6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IodXBkYXRlVGltZSkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5d
OwotICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBhZGRUaW1lcjpfdGltZWxpbmVVcGRh
dGVUaW1lciBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKLX0KLQotLSAodm9pZCl1bnNj
aGVkdWxlVGltZVVwZGF0ZQotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVV
cGRhdGUpIG9iamVjdDpuaWxdOwotCi0gICAgW190aW1lbGluZVVwZGF0ZVRpbWVyIGludmFsaWRh
dGVdOwotICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciByZWxlYXNlXTsKLSAgICBfdGltZWxpbmVV
cGRhdGVUaW1lciA9IG5pbDsKLX0KLQotLSAodm9pZClmYWRlV2luZG93SW4KLXsKLSAgICBOU1dp
bmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAoIVt3aW5kb3cgaXNWaXNpYmxl
XSkKLSAgICAgICAgW3dpbmRvdyBzZXRBbHBoYVZhbHVlOjBdOwotCi0gICAgW3dpbmRvdyBtYWtl
S2V5QW5kT3JkZXJGcm9udDpzZWxmXTsKLSAgICBbW3dpbmRvdyBhbmltYXRvcl0gc2V0QWxwaGFW
YWx1ZToxXTsKLSAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwotCi0gICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAoIV9tb3VzZUlzSW5I
VUQgJiYgW3NlbGYgcGxheWluZ10pICAgLy8gRG9uJ3QgZmFkZSBvdXQgd2hlbiBwYXVzZWQuCi0g
ICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0
aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVsYXldOwotfQotCi0tICh2
b2lkKWZhZGVXaW5kb3dPdXQKLXsKLSAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1v
dmVzOllFU107Ci0gICAgW1tbc2VsZiB3aW5kb3ddIGFuaW1hdG9yXSBzZXRBbHBoYVZhbHVlOjBd
OwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodW5zY2hlZHVsZVRpbWVVcGRh
dGUpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MV07Ci19Ci0KLS0gKHZvaWQpY2xvc2VXaW5k
b3cKLXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOwot
ICAgIFtzZWxmIHVuc2NoZWR1bGVUaW1lVXBkYXRlXTsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0g
W3NlbGYgd2luZG93XTsKLSAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gcmVtb3ZlVHJhY2tpbmdB
cmVhOl9hcmVhXTsKLSAgICBbc2VsZiBzZXRBcmVhOm5pbF07Ci0gICAgW3dpbmRvdyBjbG9zZV07
Ci0gICAgW3dpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtzZWxmIHNldFdpbmRvdzpuaWxd
OwotfQotCi1zdGF0aWMgTlNDb250cm9sICpjcmVhdGVNZWRpYVVJQ29udHJvbChNZWRpYVVJQ29u
dHJvbCBjb250cm9sVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGNvbnRyb2xUeXBlKSB7Ci0gICAgY2Fz
ZSBNZWRpYVVJQ29udHJvbDo6VGltZWxpbmU6IHsKLSAgICAgICAgTlNTbGlkZXIgKnNsaWRlciA9
IFtbUVRIVURUaW1lbGluZSBhbGxvY10gaW5pdF07Ci0gICAgICAgIFtbc2xpZGVyIGNlbGxdIHNl
dENvbnRpbnVvdXM6WUVTXTsKLSAgICAgICAgcmV0dXJuIHNsaWRlcjsKLSAgICB9Ci0gICAgY2Fz
ZSBNZWRpYVVJQ29udHJvbDo6U2xpZGVyOiB7Ci0gICAgICAgIE5TQnV0dG9uICpzbGlkZXIgPSBb
W1FUSFVEU2xpZGVyIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW1tzbGlkZXIgY2VsbF0gc2V0Q29u
dGludW91czpZRVNdOwotICAgICAgICByZXR1cm4gc2xpZGVyOwotICAgIH0KLSAgICBjYXNlIE1l
ZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRv
biA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdl
OltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1BsYXlUZW1wbGF0ZSJdXTsKLSAgICAgICAgW2J1dHRv
biBzZXRBbHRlcm5hdGVJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNQYXVzZVFUUHJpdmF0
ZVRlbXBsYXRlIl1dOwotCi0gICAgICAgIFtbYnV0dG9uIGNlbGxdIHNldFNob3dzU3RhdGVCeTpO
U0NvbnRlbnRzQ2VsbE1hc2tdOwotICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAg
ICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6RXhp
dEZ1bGxzY3JlZW5CdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRvbiA9IFtbUVRIVURC
dXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdlOltOU0ltYWdlIGlt
YWdlTmFtZWQ6QCJOU0V4aXRGdWxsU2NyZWVuVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0b24g
c2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBjYXNl
IE1lZGlhVUlDb250cm9sOjpSZXdpbmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0b24gKmJ1dHRv
biA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9uIHNldEltYWdl
OltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU1Jld2luZFRlbXBsYXRlIl1dOwotICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAg
Y2FzZSBNZWRpYVVJQ29udHJvbDo6RmFzdEZvcndhcmRCdXR0b246IHsKLSAgICAgICAgTlNCdXR0
b24gKmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOwotICAgICAgICBbYnV0dG9u
IHNldEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0Zhc3RGb3J3YXJkVGVtcGxhdGUiXV07
Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOwotICAgICAgICByZXR1cm4gYnV0dG9u
OwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpWb2x1bWVVcEJ1dHRvbjogewotICAg
ICAgICBOU0J1dHRvbiAqYnV0dG9uID0gW1tRVEhVREJ1dHRvbiBhbGxvY10gaW5pdF07Ci0gICAg
ICAgIFtidXR0b24gc2V0SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQXVkaW9PdXRwdXRW
b2x1bWVIaWdoVGVtcGxhdGUiXV07Ci0gICAgICAgIFtidXR0b24gc2V0Qm9yZGVyZWQ6Tk9dOwot
ICAgICAgICByZXR1cm4gYnV0dG9uOwotICAgIH0KLSAgICBjYXNlIE1lZGlhVUlDb250cm9sOjpW
b2x1bWVEb3duQnV0dG9uOiB7Ci0gICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0
dG9uIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNBdWRpb091dHB1dFZvbHVtZUxvd1RlbXBsYXRlIl1dOwotICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKLSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotc3Rh
dGljIE5TQ29udHJvbCAqY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFV
SUNvbnRyb2wgY29udHJvbFR5cGUsIE5TUmVjdCBmcmFtZSkKLXsKLSAgICBOU0NvbnRyb2wgKmNv
bnRyb2wgPSBjcmVhdGVNZWRpYVVJQ29udHJvbChjb250cm9sVHlwZSk7Ci0gICAgY29udHJvbC5m
cmFtZSA9IGZyYW1lOwotICAgIHJldHVybiBjb250cm9sOwotfQotCi1zdGF0aWMgTlNUZXh0Rmll
bGQgKmNyZWF0ZVRpbWVUZXh0RmllbGQoTlNSZWN0IGZyYW1lKQotewotICAgIE5TVGV4dEZpZWxk
ICp0ZXh0RmllbGQgPSBbW05TVGV4dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lXTsK
LSAgICBbdGV4dEZpZWxkIHNldFRleHRDb2xvcjpbTlNDb2xvciB3aGl0ZUNvbG9yXV07Ci0gICAg
W3RleHRGaWVsZCBzZXRCb3JkZXJlZDpOT107Ci0gICAgW3RleHRGaWVsZCBzZXRGb250OltOU0Zv
bnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MTBdXTsKLSAgICBbdGV4dEZpZWxkIHNldERyYXdzQmFj
a2dyb3VuZDpOT107Ci0gICAgW3RleHRGaWVsZCBzZXRCZXplbGVkOk5PXTsKLSAgICBbdGV4dEZp
ZWxkIHNldEVkaXRhYmxlOk5PXTsKLSAgICBbdGV4dEZpZWxkIHNldFNlbGVjdGFibGU6Tk9dOwot
ICAgIHJldHVybiB0ZXh0RmllbGQ7Ci19Ci0KLXN0YXRpYyBOU1ZpZXcgKmNyZWF0ZU1lZGlhVUlC
YWNrZ3JvdW5kVmlldygpCi17Ci0gICAgaWQgdmlldyA9IFtbUVRIVURCYWNrZ3JvdW5kVmlldyBh
bGxvY10gaW5pdF07Ci0KLSAgICBjb25zdCBDR0Zsb2F0IHF1aWNrVGltZVBsYXllckhVREhlaWdo
dCA9IDU5OwotICAgIGNvbnN0IENHRmxvYXQgcXVpY2tUaW1lUGxheWVySFVEQ29udGVudEJvcmRl
clBvc2l0aW9uID0gMzg7Ci0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAg
ICBbdmlldyBzZXRDb250ZW50Qm9yZGVyUG9zaXRpb246cXVpY2tUaW1lUGxheWVySFVEQ29udGVu
dEJvcmRlclBvc2l0aW9uIC8gcXVpY2tUaW1lUGxheWVySFVESGVpZ2h0XTsKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIHJldHVybiB2aWV3OwotfQotCi0tICh2b2lkKXdpbmRv
d0RpZExvYWQKLXsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBob3Jpem9udGFsTWFyZ2luID0g
MTA7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbldpZHRoID0gNDE7Ci0gICAg
c3RhdGljIGNvbnN0IENHRmxvYXQgcGxheUJ1dHRvbkhlaWdodCA9IDM1OwotICAgIHN0YXRpYyBj
b25zdCBDR0Zsb2F0IHBsYXlCdXR0b25Ub3BNYXJnaW4gPSA0OwotICAgIHN0YXRpYyBjb25zdCBD
R0Zsb2F0IHZvbHVtZVNsaWRlcldpZHRoID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQg
dm9sdW1lU2xpZGVySGVpZ2h0ID0gMTM7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1l
QnV0dG9uV2lkdGggPSAxODsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVCdXR0b25I
ZWlnaHQgPSAxNjsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVVcEJ1dHRvbkxlZnRN
YXJnaW4gPSA0OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZUNvbnRyb2xzVG9wTWFy
Z2luID0gMTM7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0b25X
aWR0aCA9IDI1OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9u
SGVpZ2h0ID0gMjE7Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXhpdEZ1bGxzY3JlZW5CdXR0
b25Ub3BNYXJnaW4gPSAxMTsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lbGluZVdpZHRo
ID0gMzE1OwotICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVsaW5lSGVpZ2h0ID0gMTQ7Ci0g
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZWxpbmVCb3R0b21NYXJnaW4gPSA3OwotICAgIHN0
YXRpYyBjb25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRXaWR0aCA9IDU0OwotICAgIHN0YXRpYyBj
b25zdCBDR0Zsb2F0IHRpbWVUZXh0RmllbGRIZWlnaHQgPSAxMzsKLSAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCB0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiA9IDc7Ci0KLSAgICBOU1dpbmRv
dyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBBU1NFUlQod2luZG93KTsKLQotICAgIE5T
VmlldyAqYmFja2dyb3VuZCA9IGNyZWF0ZU1lZGlhVUlCYWNrZ3JvdW5kVmlldygpOwotCi0gICAg
W3dpbmRvdyBzZXRDb250ZW50VmlldzpiYWNrZ3JvdW5kXTsKLSAgICBfYXJlYSA9IFtbTlNUcmFj
a2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbYmFja2dyb3VuZCBib3VuZHNdIG9wdGlvbnM6
TlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdBY3RpdmVBbHdheXMg
b3duZXI6c2VsZiB1c2VySW5mbzpuaWxdOwotICAgIFtiYWNrZ3JvdW5kIGFkZFRyYWNraW5nQXJl
YTpfYXJlYV07Ci0gICAgW2JhY2tncm91bmQgcmVsZWFzZV07ICAgIAotCi0gICAgTlNWaWV3ICpj
b250ZW50VmlldyA9IFt3aW5kb3cgY29udGVudFZpZXddOwotCi0gICAgQ0dGbG9hdCBjZW50ZXIg
PSBDR0Zsb29yKCh3aW5kb3dXaWR0aCAtIHBsYXlCdXR0b25XaWR0aCkgLyAyKTsKLSAgICBfcGxh
eUJ1dHRvbiA9IChOU0J1dHRvbiAqKWNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBl
KE1lZGlhVUlDb250cm9sOjpQbGF5UGF1c2VCdXR0b24sIE5TTWFrZVJlY3QoY2VudGVyLCB3aW5k
b3dIZWlnaHQgLSBwbGF5QnV0dG9uVG9wTWFyZ2luIC0gcGxheUJ1dHRvbkhlaWdodCwgcGxheUJ1
dHRvbldpZHRoLCBwbGF5QnV0dG9uSGVpZ2h0KSk7Ci0gICAgQVNTRVJUKFtfcGxheUJ1dHRvbiBp
c0tpbmRPZkNsYXNzOltOU0J1dHRvbiBjbGFzc11dKTsKLSAgICBbX3BsYXlCdXR0b24gc2V0VGFy
Z2V0OnNlbGZdOwotICAgIFtfcGxheUJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHRvZ2dsZVBs
YXlpbmc6KV07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3BsYXlCdXR0b25dOwotCi0g
ICAgQ0dGbG9hdCBjbG9zZVRvUmlnaHQgPSB3aW5kb3dXaWR0aCAtIGhvcml6b250YWxNYXJnaW4g
LSBleGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoOwotICAgIE5TQ29udHJvbCAqZXhpdEZ1bGxzY3Jl
ZW5CdXR0b24gPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29u
dHJvbDo6RXhpdEZ1bGxzY3JlZW5CdXR0b24sIE5TTWFrZVJlY3QoY2xvc2VUb1JpZ2h0LCB3aW5k
b3dIZWlnaHQgLSBleGl0RnVsbHNjcmVlbkJ1dHRvblRvcE1hcmdpbiAtIGV4aXRGdWxsc2NyZWVu
QnV0dG9uSGVpZ2h0LCBleGl0RnVsbHNjcmVlbkJ1dHRvbldpZHRoLCBleGl0RnVsbHNjcmVlbkJ1
dHRvbkhlaWdodCkpOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVj
dG9yKGV4aXRGdWxsc2NyZWVuOildOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiBzZXRUYXJn
ZXQ6c2VsZl07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6ZXhpdEZ1bGxzY3JlZW5CdXR0
b25dOwotICAgIFtleGl0RnVsbHNjcmVlbkJ1dHRvbiByZWxlYXNlXTsKLSAgICAKLSAgICBDR0Zs
b2F0IHZvbHVtZUNvbnRyb2xzQm90dG9tID0gd2luZG93SGVpZ2h0IC0gdm9sdW1lQ29udHJvbHNU
b3BNYXJnaW4gLSB2b2x1bWVCdXR0b25IZWlnaHQ7Ci0gICAgQ0dGbG9hdCBsZWZ0ID0gaG9yaXpv
bnRhbE1hcmdpbjsKLSAgICBOU0NvbnRyb2wgKnZvbHVtZURvd25CdXR0b24gPSBjcmVhdGVDb250
cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lRG93bkJ1dHRv
biwgTlNNYWtlUmVjdChsZWZ0LCB2b2x1bWVDb250cm9sc0JvdHRvbSwgdm9sdW1lQnV0dG9uV2lk
dGgsIHZvbHVtZUJ1dHRvbkhlaWdodCkpOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OnZv
bHVtZURvd25CdXR0b25dOwotICAgIFt2b2x1bWVEb3duQnV0dG9uIHNldFRhcmdldDpzZWxmXTsK
LSAgICBbdm9sdW1lRG93bkJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVtZVRvWmVy
bzopXTsKLSAgICBbdm9sdW1lRG93bkJ1dHRvbiByZWxlYXNlXTsKLQotICAgIGxlZnQgKz0gdm9s
dW1lQnV0dG9uV2lkdGg7Ci0gICAgX3ZvbHVtZVNsaWRlciA9IGNyZWF0ZUNvbnRyb2xXaXRoTWVk
aWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9sOjpTbGlkZXIsIE5TTWFrZVJlY3QobGVmdCwg
dm9sdW1lQ29udHJvbHNCb3R0b20gKyBDR0Zsb29yKCh2b2x1bWVCdXR0b25IZWlnaHQgLSB2b2x1
bWVTbGlkZXJIZWlnaHQpIC8gMiksIHZvbHVtZVNsaWRlcldpZHRoLCB2b2x1bWVTbGlkZXJIZWln
aHQpKTsKLSAgICBbX3ZvbHVtZVNsaWRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTpbc2VsZiBtYXhWb2x1bWVdXSBmb3JLZXk6QCJtYXhWYWx1ZSJdOwotICAgIFtfdm9sdW1l
U2xpZGVyIHNldFRhcmdldDpzZWxmXTsKLSAgICBbX3ZvbHVtZVNsaWRlciBzZXRBY3Rpb246QHNl
bGVjdG9yKHZvbHVtZUNoYW5nZWQ6KV07Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X3Zv
bHVtZVNsaWRlcl07Ci0KLSAgICBsZWZ0ICs9IHZvbHVtZVNsaWRlcldpZHRoICsgdm9sdW1lVXBC
dXR0b25MZWZ0TWFyZ2luOwotICAgIE5TQ29udHJvbCAqdm9sdW1lVXBCdXR0b24gPSBjcmVhdGVD
b250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0
b24sIE5TTWFrZVJlY3QobGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20sIHZvbHVtZUJ1dHRvbldp
ZHRoLCB2b2x1bWVCdXR0b25IZWlnaHQpKTsKLSAgICBbdm9sdW1lVXBCdXR0b24gc2V0VGFyZ2V0
OnNlbGZdOwotICAgIFt2b2x1bWVVcEJ1dHRvbiBzZXRBY3Rpb246QHNlbGVjdG9yKHNldFZvbHVt
ZVRvTWF4aW11bTopXTsKLSAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVVcEJ1dHRv
bl07Ci0gICAgW3ZvbHVtZVVwQnV0dG9uIHJlbGVhc2VdOwotCi0gICAgX3RpbWVsaW5lID0gY3Jl
YXRlTWVkaWFVSUNvbnRyb2woTWVkaWFVSUNvbnRyb2w6OlRpbWVsaW5lKTsKLQotICAgIFtfdGlt
ZWxpbmUgc2V0VGFyZ2V0OnNlbGZdOwotICAgIFtfdGltZWxpbmUgc2V0QWN0aW9uOkBzZWxlY3Rv
cih0aW1lbGluZVBvc2l0aW9uQ2hhbmdlZDopXTsKLSAgICBbX3RpbWVsaW5lIHNldEZyYW1lOk5T
TWFrZVJlY3QoQ0dGbG9vcigod2luZG93V2lkdGggLSB0aW1lbGluZVdpZHRoKSAvIDIpLCB0aW1l
bGluZUJvdHRvbU1hcmdpbiwgdGltZWxpbmVXaWR0aCwgdGltZWxpbmVIZWlnaHQpXTsKLSAgICBb
Y29udGVudFZpZXcgYWRkU3VidmlldzpfdGltZWxpbmVdOwotCi0gICAgX2VsYXBzZWRUaW1lVGV4
dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQoTlNNYWtlUmVjdCh0aW1lVGV4dEZpZWxkSG9yaXpvbnRh
bE1hcmdpbiwgdGltZWxpbmVCb3R0b21NYXJnaW4sIHRpbWVUZXh0RmllbGRXaWR0aCwgdGltZVRl
eHRGaWVsZEhlaWdodCkpOwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldEFsaWdubWVudDpOU1Rl
eHRBbGlnbm1lbnRMZWZ0XTsKLSAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfZWxhcHNlZFRp
bWVUZXh0XTsKLQotICAgIF9yZW1haW5pbmdUaW1lVGV4dCA9IGNyZWF0ZVRpbWVUZXh0RmllbGQo
TlNNYWtlUmVjdCh3aW5kb3dXaWR0aCAtIHRpbWVUZXh0RmllbGRIb3Jpem9udGFsTWFyZ2luIC0g
dGltZVRleHRGaWVsZFdpZHRoLCB0aW1lbGluZUJvdHRvbU1hcmdpbiwgdGltZVRleHRGaWVsZFdp
ZHRoLCB0aW1lVGV4dEZpZWxkSGVpZ2h0KSk7Ci0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRB
bGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50UmlnaHRdOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2
aWV3Ol9yZW1haW5pbmdUaW1lVGV4dF07Ci0KLSAgICBbd2luZG93IHJlY2FsY3VsYXRlS2V5Vmll
d0xvb3BdOwotICAgIFt3aW5kb3cgc2V0SW5pdGlhbEZpcnN0UmVzcG9uZGVyOl9wbGF5QnV0dG9u
XTsKLSAgICBbd2luZG93IGNlbnRlcl07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlVm9sdW1lCi17Ci0g
ICAgW192b2x1bWVTbGlkZXIgc2V0RmxvYXRWYWx1ZTpbc2VsZiB2b2x1bWVdXTsKLX0KLQotLSAo
dm9pZCl1cGRhdGVUaW1lCi17Ci0gICAgW3NlbGYgdXBkYXRlVm9sdW1lXTsKLQotICAgIFtfdGlt
ZWxpbmUgc2V0RmxvYXRWYWx1ZTpbc2VsZiBjdXJyZW50VGltZV1dOwotICAgIFtfdGltZWxpbmUg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6W3NlbGYgZHVyYXRpb25dXSBmb3JL
ZXk6QCJtYXhWYWx1ZSJdOwotCi0gICAgW19yZW1haW5pbmdUaW1lVGV4dCBzZXRTdHJpbmdWYWx1
ZTpbc2VsZiByZW1haW5pbmdUaW1lVGV4dF1dOwotICAgIFtfZWxhcHNlZFRpbWVUZXh0IHNldFN0
cmluZ1ZhbHVlOltzZWxmIGVsYXBzZWRUaW1lVGV4dF1dOwotfQotCi0tICh2b2lkKWVuZFNjcnVi
YmluZwotewotICAgIEFTU0VSVChfaXNTY3J1YmJpbmcpOwotICAgIF9pc1NjcnViYmluZyA9IE5P
OwotICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0pCi0gICAgICAgIHZpZGVvRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci19Ci0K
LS0gKHZvaWQpdGltZWxpbmVQb3NpdGlvbkNoYW5nZWQ6KGlkKXNlbmRlcgotewotICAgIFVOVVNF
RF9QQVJBTShzZW5kZXIpOwotICAgIFtzZWxmIHNldEN1cnJlbnRUaW1lOltfdGltZWxpbmUgZmxv
YXRWYWx1ZV1dOwotICAgIGlmICghX2lzU2NydWJiaW5nKSB7Ci0gICAgICAgIF9pc1NjcnViYmlu
ZyA9IFlFUzsKLSAgICAgICAgaWYgKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCA9IFtf
ZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgICAgIHZpZGVvRWxlbWVudC0+YmVnaW5T
Y3J1YmJpbmcoKTsKLSAgICAgICAgc3RhdGljIE5TQXJyYXkgKmVuZFNjcnViYmluZ01vZGVzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6TlNEZWZhdWx0UnVuTG9vcE1vZGUsIE5T
TW9kYWxQYW5lbFJ1bkxvb3BNb2RlLCBuaWxdOwotICAgICAgICAvLyBTY2hlZHVsZSAtZW5kU2Ny
dWJiaW5nIGZvciB3aGVuIGxlYXZpbmcgbW91c2UgdHJhY2tpbmcgbW9kZS4KLSAgICAgICAgW1tO
U1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZW5kU2Ny
dWJiaW5nKSB0YXJnZXQ6c2VsZiBhcmd1bWVudDpuaWwgb3JkZXI6MCBtb2RlczplbmRTY3J1YmJp
bmdNb2Rlc107Ci0gICAgfQotfQotCi0tIChmbG9hdCljdXJyZW50VGltZQotewotICAgIHJldHVy
biBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPmN1
cnJlbnRUaW1lKCkgOiAwOwotfQotCi0tICh2b2lkKXNldEN1cnJlbnRUaW1lOihmbG9hdCljdXJy
ZW50VGltZQotewotICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAgICBy
ZXR1cm47Ci0gICAgW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5zZXRDdXJyZW50VGltZShjdXJy
ZW50VGltZSk7Ci0gICAgW3NlbGYgdXBkYXRlVGltZV07Ci19Ci0KLS0gKGRvdWJsZSlkdXJhdGlv
bgotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0gPyBbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0tPmR1cmF0aW9uKCkgOiAwOwotfQotCi0tIChmbG9hdCltYXhWb2x1bWUKLXsK
LSAgICAvLyBTZXQgdGhlIHZvbHVtZSBzbGlkZXIgcmVzb2x1dGlvbgotICAgIHJldHVybiAxMDA7
Ci19Ci0KLS0gKHZvaWQpdm9sdW1lQ2hhbmdlZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNlbmRlcik7Ci0gICAgW3NlbGYgc2V0Vm9sdW1lOltfdm9sdW1lU2xpZGVyIGZsb2F0VmFs
dWVdXTsKLX0KLQotLSAodm9pZClzZXRWb2x1bWVUb1plcm86KGlkKXNlbmRlcgotewotICAgIFVO
VVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtzZWxmIHNldFZvbHVtZTowXTsKLX0KLQotLSAodm9p
ZClzZXRWb2x1bWVUb01heGltdW06KGlkKXNlbmRlcgotewotICAgIFVOVVNFRF9QQVJBTShzZW5k
ZXIpOwotICAgIFtzZWxmIHNldFZvbHVtZTpbc2VsZiBtYXhWb2x1bWVdXTsKLX0KLQotLSAodm9p
ZClkZWNyZW1lbnRWb2x1bWUKLXsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgdm9sdW1lID0gW3NlbGYgdm9sdW1lXSAtIDEw
OwotICAgIFtzZWxmIHNldFZvbHVtZTpNQVgodm9sdW1lLCAwKV07Ci19Ci0KLS0gKHZvaWQpaW5j
cmVtZW50Vm9sdW1lCi17Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZsb2F0IHZvbHVtZSA9IFtzZWxmIHZvbHVtZV0gKyAxMDsKLSAg
ICBbc2VsZiBzZXRWb2x1bWU6c3RkOjptaW4odm9sdW1lLCBbc2VsZiBtYXhWb2x1bWVdKV07Ci19
Ci0KLS0gKGZsb2F0KXZvbHVtZQotewotICAgIHJldHVybiBbX2RlbGVnYXRlIHZpZGVvRWxlbWVu
dF0gPyBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnZvbHVtZSgpICogW3NlbGYgbWF4Vm9sdW1l
XSA6IDA7Ci19Ci0KLS0gKHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWUKLXsKLSAgICBpZiAo
IVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChbX2Rl
bGVnYXRlIHZpZGVvRWxlbWVudF0tPm11dGVkKCkpCi0gICAgICAgIFtfZGVsZWdhdGUgdmlkZW9F
bGVtZW50XS0+c2V0TXV0ZWQoZmFsc2UpOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+
c2V0Vm9sdW1lKHZvbHVtZSAvIFtzZWxmIG1heFZvbHVtZV0pOwotICAgIFtzZWxmIHVwZGF0ZVZv
bHVtZV07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUGxheUJ1dHRvbgotewotICAgIFtfcGxheUJ1dHRv
biBzZXRJbnRWYWx1ZTpbc2VsZiBwbGF5aW5nXV07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlUmF0ZQot
ewotICAgIEJPT0wgcGxheWluZyA9IFtzZWxmIHBsYXlpbmddOwotCi0gICAgLy8gS2VlcCB0aGUg
SFVEIHZpc2libGUgd2hlbiBwYXVzZWQuCi0gICAgaWYgKCFwbGF5aW5nKQotICAgICAgICBbc2Vs
ZiBmYWRlV2luZG93SW5dOwotICAgIGVsc2UgaWYgKCFfbW91c2VJc0luSFVEKSB7Ci0gICAgICAg
IFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgb2JqZWN0Om5pbF07Ci0gICAgICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdpbmRvd091dCkgd2l0aE9iamVjdDpu
aWwgYWZ0ZXJEZWxheTpIVURXaW5kb3dGYWRlT3V0RGVsYXldOwotICAgIH0KLSAgICBbc2VsZiB1
cGRhdGVQbGF5QnV0dG9uXTsKLX0KLQotLSAodm9pZCl0b2dnbGVQbGF5aW5nOihpZClzZW5kZXIK
LXsKLSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBbc2VsZiBzZXRQbGF5aW5nOiFbc2Vs
ZiBwbGF5aW5nXV07Ci19Ci0KLS0gKEJPT0wpcGxheWluZwotewotICAgIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvRWxlbWVudCA9IFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XTsKLSAgICBpZiAoIXZp
ZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgcmV0dXJuICF2aWRlb0VsZW1l
bnQtPmNhblBsYXkoKTsKLX0KLQotLSAodm9pZClzZXRQbGF5aW5nOihCT09MKXBsYXlpbmcKLXsK
LSAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxl
bWVudF07Ci0KLSAgICBpZiAoIXZpZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKHBsYXlpbmcpCi0gICAgICAgIHZpZGVvRWxlbWVudC0+cGxheSgpOwotICAgIGVsc2UKLSAg
ICAgICAgdmlkZW9FbGVtZW50LT5wYXVzZSgpOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnRpbWVU
b1N0cmluZyhkb3VibGUgdGltZSkKLXsKLSAgICBBU1NFUlRfQVJHKHRpbWUsIHRpbWUgPj0gMCk7
Ci0KLSAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodGltZSkpCi0gICAgICAgIHRpbWUgPSAwOwotCi0g
ICAgaW50IHNlY29uZHMgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0ZDo6YWJzKHRpbWUpKTsK
LSAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOwotICAgIGludCBtaW51dGVzID0g
KHNlY29uZHMgLyA2MCkgJSA2MDsKLSAgICBzZWNvbmRzICU9IDYwOwotCi0gICAgaWYgKGhvdXJz
KQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZDolMDJkOiUw
MmQiLCBob3VycywgbWludXRlcywgc2Vjb25kc107Ci0KLSAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlMDJkOiUwMmQiLCBtaW51dGVzLCBzZWNvbmRzXTsgICAgCi19Ci0K
LS0gKE5TU3RyaW5nICopcmVtYWluaW5nVGltZVRleHQKLXsKLSAgICBIVE1MVmlkZW9FbGVtZW50
KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07Ci0gICAgaWYgKCF2aWRl
b0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBAIiI7Ci0KLSAgICBkb3VibGUgcmVtYWluaW5nVGlt
ZSA9IDA7Ci0KLSAgICBpZiAoc3RkOjppc2Zpbml0ZSh2aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkp
ICYmIHN0ZDo6aXNmaW5pdGUodmlkZW9FbGVtZW50LT5jdXJyZW50VGltZSgpKSkKLSAgICAgICAg
cmVtYWluaW5nVGltZSA9IHZpZGVvRWxlbWVudC0+ZHVyYXRpb24oKSAtIHZpZGVvRWxlbWVudC0+
Y3VycmVudFRpbWUoKTsKLQotICAgIHJldHVybiBbQCItIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
Zzp0aW1lVG9TdHJpbmcocmVtYWluaW5nVGltZSldOwotfQotCi0tIChOU1N0cmluZyAqKWVsYXBz
ZWRUaW1lVGV4dAotewotICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQotICAgICAg
ICByZXR1cm4gQCIiOwotCi0gICAgcmV0dXJuIHRpbWVUb1N0cmluZyhbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF0tPmN1cnJlbnRUaW1lKCkpOwotfQotCi0vLyBNQVJLOiBOU1Jlc3BvbmRlcgotCi0t
ICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgVU5VU0VEX1BB
UkFNKHRoZUV2ZW50KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIEhVRCB3b24ndCBiZSBoaWRkZW4g
ZnJvbSBub3cKLSAgICBfbW91c2VJc0luSFVEID0gWUVTOwotICAgIFtzZWxmIGZhZGVXaW5kb3dJ
bl07Ci19Ci0KLS0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAg
IFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7Ci0gICAgX21vdXNlSXNJbkhVRCA9IE5POwotICAgIFtz
ZWxmIGZhZGVXaW5kb3dJbl07Ci19Ci0KLS0gKHZvaWQpcmV3aW5kOihpZClzZW5kZXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+cmV3aW5k
KDMwKTsKLX0KLQotLSAodm9pZClmYXN0Rm9yd2FyZDooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNlbmRlcik7Ci0gICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCi0gICAg
ICAgIHJldHVybjsKLX0KLQotLSAodm9pZClleGl0RnVsbHNjcmVlbjooaWQpc2VuZGVyCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7Ci0gICAgaWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCi0g
ICAgICAgIHJldHVybjsKLSAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVTOwotICAgIFtfZGVs
ZWdhdGUgcmVxdWVzdEV4aXRGdWxsc2NyZWVuXTsgCi19Ci0KLS8vIE1BUks6IE5TV2luZG93RGVs
ZWdhdGUKLQotLSAodm9pZCl3aW5kb3dEaWRFeHBvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7Ci0gICAgW3NlbGYgc2No
ZWR1bGVUaW1lVXBkYXRlXTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRDbG9zZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsK
LSAgICBbc2VsZiB1bnNjaGVkdWxlVGltZVVwZGF0ZV07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93
QW5pbWF0aW9uLmgJKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJXaW5kb3dBbmltYXRpb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8
Q29jb2EvQ29jb2EuaD4KLQotV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJXaW5kb3dTY2Fs
ZUFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uIHsKLUBwcml2YXRlCi0gICAgTlNSZWN0IF9pbml0aWFs
RnJhbWUsIF9maW5hbEZyYW1lLCBfcmVhbEZyYW1lOwotICAgIE5TV2luZG93ICpfd2luZG93OyAv
LyAoYXNzaWduKQotICAgIE5TQW5pbWF0aW9uICpfc3ViQW5pbWF0aW9uOyAvLyAocmV0YWluKQot
ICAgIE5TVGltZUludGVydmFsIF9oaW50ZWREdXJhdGlvbjsKLX0KLS0gKGlkKWluaXRXaXRoSGlu
dGVkRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3
aW5kb3cgaW5pdGFsRnJhbWU6KE5TUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooTlNSZWN0
KWZpbmFsRnJhbWU7Ci0KLS0gKHZvaWQpc2V0U3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKWFu
aW1hdGlvbjsKLQotLSAoTlNSZWN0KWN1cnJlbnRGcmFtZTsKLQotLy8gQmUgc3VyZSB0byBjYWxs
IHNldFdpbmRvdzpuaWwgdG8gY2xlYXIgdGhlIHdlYWsgbGluayBfd2luZG93IHdoZW4gYXBwcm9w
cmlhdGUKLS0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLUBlbmQKLQotCi1X
RUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gOiBOU0FuaW1h
dGlvbiB7Ci1AcHJpdmF0ZQotICAgIENHRmxvYXQgX2luaXRpYWxBbHBoYSwgX2ZpbmFsQWxwaGE7
Ci0gICAgTlNXaW5kb3cgKl93aW5kb3c7IC8vIChhc3NpZ24pCi0gICAgQk9PTCBfaXNTdG9wcGVk
OwotICAgIAotfQotLSAoaWQpaW5pdFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRp
b24gd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlh
bEFscGhhIGZpbmFsQWxwaGE6KENHRmxvYXQpZmluYWxBbHBoYTsKLQotLSAoQ0dGbG9hdCljdXJy
ZW50QWxwaGE7Ci0KLS8vIEJlIHN1cmUgdG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRo
ZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVuIGFwcHJvcHJpYXRlCi0tICh2b2lkKXNldFdpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3c7Ci1AZW5kCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93
QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJXaW5kb3dBbmltYXRpb24ubW0JKHJldmlzaW9uIDIyODI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0JKG5vbmV4aXN0ZW50KQpAQCAtMSwy
OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24u
aCIKLQotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IENH
RmxvYXQgc2xvd01vdGlvbkZhY3RvciA9IDEwOwotCi1zdGF0aWMgTlNUaW1lSW50ZXJ2YWwgV2Vi
V2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oTlNUaW1lSW50ZXJ2YWwgZHVyYXRp
b24pCi17Ci0gICAgcmV0dXJuIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10g
JiBOU0V2ZW50TW9kaWZpZXJGbGFnU2hpZnQpID8gZHVyYXRpb24gKiBzbG93TW90aW9uRmFjdG9y
IDogZHVyYXRpb247Ci19Ci0KLXN0YXRpYyBOU1JlY3Qgc2NhbGVkUmVjdChOU1JlY3QgX2luaXRp
YWxGcmFtZSwgTlNSZWN0IF9maW5hbEZyYW1lLCBDR0Zsb2F0IGZhY3RvcikKLXsKLSAgICBOU1Jl
Y3QgY3VycmVudFJlY3QgPSBfaW5pdGlhbEZyYW1lOwotICAgIGN1cnJlbnRSZWN0Lm9yaWdpbi54
ICs9IChOU01pblgoX2ZpbmFsRnJhbWUpIC0gTlNNaW5YKF9pbml0aWFsRnJhbWUpKSAqIGZhY3Rv
cjsKLSAgICBjdXJyZW50UmVjdC5vcmlnaW4ueSArPSAoTlNNaW5ZKF9maW5hbEZyYW1lKSAtIE5T
TWluWShfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7Ci0gICAgY3VycmVudFJlY3Quc2l6ZS53aWR0
aCArPSAoTlNXaWR0aChfZmluYWxGcmFtZSkgLSBOU1dpZHRoKF9pbml0aWFsRnJhbWUpKSAqIGZh
Y3RvcjsKLSAgICBjdXJyZW50UmVjdC5zaXplLmhlaWdodCArPSAoTlNIZWlnaHQoX2ZpbmFsRnJh
bWUpIC0gTlNIZWlnaHQoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOwotICAgIHJldHVybiBjdXJy
ZW50UmVjdDsKLX0KLQotc3RhdGljIENHRmxvYXQgc3F1YXJlZERpc3RhbmNlKE5TUG9pbnQgcG9p
bnQxLCBOU1BvaW50IHBvaW50MikKLXsKLSAgICBDR0Zsb2F0IGRlbHRhWCA9IHBvaW50MS54IC0g
cG9pbnQyLng7Ci0gICAgQ0dGbG9hdCBkZWx0YVkgPSBwb2ludDEueSAtIHBvaW50Mi55OwotICAg
IHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVk7Ci19Ci0KLX0KLQotdXNp
bmcgV2ViQ29yZTo6V2ViV2luZG93QW5pbWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb247Ci11c2lu
ZyBXZWJDb3JlOjpuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0OwotdXNpbmcgV2ViQ29yZTo6c2NhbGVk
UmVjdDsKLXVzaW5nIFdlYkNvcmU6OnNxdWFyZWREaXN0YW5jZTsKLUBpbXBsZW1lbnRhdGlvbiBX
ZWJXaW5kb3dTY2FsZUFuaW1hdGlvbgotCi0tIChpZClpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3NlbGYg
c2V0QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07
Ci0gICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aWQpaW5pdFdpdGhIaW50ZWREdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93
OihOU1dpbmRvdyAqKXdpbmRvdyBpbml0YWxGcmFtZTooTlNSZWN0KWluaXRpYWxGcmFtZSBmaW5h
bEZyYW1lOihOU1JlY3QpZmluYWxGcmFtZQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2hpbnRlZER1cmF0aW9uID0g
ZHVyYXRpb247Ci0gICAgX3dpbmRvdyA9IHdpbmRvdzsKLSAgICBfaW5pdGlhbEZyYW1lID0gaW5p
dGlhbEZyYW1lOwotICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKLSAgICBfcmVhbEZyYW1l
ID0gW3dpbmRvdyBmcmFtZV07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpIGRlYWxs
b2MKLXsKLSAgICBbX3N1YkFuaW1hdGlvbiByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpc2V0RHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uCi17Ci0g
ICAgW3N1cGVyIHNldER1cmF0aW9uOldlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0
aW9uKGR1cmF0aW9uKV07Ci19Ci0KLS0gKHZvaWQpc2V0V2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dwotewotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci19Ci0KLS0gKGZsb2F0KWN1cnJlbnRWYWx1ZQot
ewotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNSAtIDAuNSAqIGNvcyhwaURv
dWJsZSAqICgxIC0gW3NlbGYgY3VycmVudFByb2dyZXNzXSkpKTsKLX0KLQotLSAoTlNSZWN0KWN1
cnJlbnRGcmFtZQotewotICAgIHJldHVybiBzY2FsZWRSZWN0KF9maW5hbEZyYW1lLCBfaW5pdGlh
bEZyYW1lLCBbc2VsZiBjdXJyZW50VmFsdWVdKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcFJlY3Qo
TlNSZWN0KiByZWN0KQotewotICAgIHJlY3QtPm9yaWdpbi55ID0gTlNNYXhZKFsoTlNTY3JlZW4g
KilbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKSAtIE5TTWF4WSgq
cmVjdCk7Ci19Ci0KLXN0YXRpYyBDR1NDb25uZWN0aW9uSUQgbWFpbldpbmRvd1NlcnZlckNvbm5l
Y3Rpb25JRCgpCi17Ci0gICAgc3RhdGljIENHU0Nvbm5lY3Rpb25JRCBjZ3NJZDsKLSAgICBpZiAo
IWNnc0lkKQotICAgICAgICBjZ3NJZCA9IENHU01haW5Db25uZWN0aW9uSUQoKTsKLSAgICByZXR1
cm4gY2dzSWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFNjYWxlZEZyYW1lRm9yV2luZG93KE5TV2lu
ZG93ICp3aW5kb3csIE5TUmVjdCBzY2FsZUZyYW1lLCBOU1JlY3Qgbm9uU2NhbGVkRnJhbWUpCi17
Ci0gICAgaWYgKE5TRXF1YWxSZWN0cyhzY2FsZUZyYW1lLCBub25TY2FsZWRGcmFtZSkpIHsKLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdub25udWxsIgotICAgICAgICBDR1NTZXRXaW5kb3dXYXJwKG1haW5XaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uSUQoKSwgd2luZG93LndpbmRvd051bWJlciwgMCwgMCwgbnVsbHB0cik7Ci0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgZmxvYXQgbWVzaFsxNl07Ci0gICAgCi0gICAgZmxpcFJlY3QoJnNjYWxlRnJhbWUpOwot
ICAgIGZsaXBSZWN0KCZub25TY2FsZWRGcmFtZSk7Ci0gICAgCi0gICAgLy8gdG9wLWxlZnQgcG9p
bnQgKHRvIGFuZCBmcm9tKQotICAgIG1lc2hbMF0gPSAwOwotICAgIG1lc2hbMV0gPSAwOwotICAg
IG1lc2hbMl0gPSBOU01pblgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFszXSA9IE5TTWluWShzY2Fs
ZUZyYW1lKTsKLSAgICAKLSAgICAvLyB0b3AtcmlnaHQgcG9pbnQgKHRvIGFuZCBmcm9tKQotICAg
IG1lc2hbNF0gPSBOU1dpZHRoKG5vblNjYWxlZEZyYW1lKTsKLSAgICBtZXNoWzVdID0gMDsKLSAg
ICBtZXNoWzZdID0gTlNNYXhYKHNjYWxlRnJhbWUpOwotICAgIG1lc2hbN10gPSBOU01pblkoc2Nh
bGVGcmFtZSk7Ci0gICAgCi0gICAgLy8gYm90dG9tLWxlZnQgKHRvIGFuZCBmcm9tKQotICAgIG1l
c2hbOF0gPSAwOwotICAgIG1lc2hbOV0gPSBOU0hlaWdodChub25TY2FsZWRGcmFtZSk7Ci0gICAg
bWVzaFsxMF0gPSBOU01pblgoc2NhbGVGcmFtZSk7Ci0gICAgbWVzaFsxMV0gPSBOU01heFkoc2Nh
bGVGcmFtZSk7Ci0gICAgCi0gICAgLy8gYm90dG9tLXJpZ2h0ICh0byBhbmQgZnJvbSkKLSAgICBt
ZXNoWzEyXSA9IE5TV2lkdGgobm9uU2NhbGVkRnJhbWUpOwotICAgIG1lc2hbMTNdID0gTlNIZWln
aHQobm9uU2NhbGVkRnJhbWUpOwotICAgIG1lc2hbMTRdID0gTlNNYXhYKHNjYWxlRnJhbWUpOwot
ICAgIG1lc2hbMTVdID0gTlNNYXhZKHNjYWxlRnJhbWUpOwotICAgIAotICAgIC8vIEFwcGx5IHRo
ZSB3YXJwLgotICAgIENHU1NldFdpbmRvd1dhcnAobWFpbldpbmRvd1NlcnZlckNvbm5lY3Rpb25J
RCgpLCB3aW5kb3cud2luZG93TnVtYmVyLCAyLCAyLCBtZXNoKTsKLX0KLQotLSAodm9pZClzZXRD
dXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAo
IV93aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzdXBlciBzZXRDdXJyZW50UHJvZ3Jl
c3M6cHJvZ3Jlc3NdOwotCi0gICAgTlNSZWN0IGN1cnJlbnRSZWN0ID0gW3NlbGYgY3VycmVudEZy
YW1lXTsKLSAgICBzZXRTY2FsZWRGcmFtZUZvcldpbmRvdyhfd2luZG93LCBjdXJyZW50UmVjdCwg
X3JlYWxGcmFtZSk7Ci0gICAgW19zdWJBbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOnByb2dy
ZXNzXTsKLX0KLQotLSAodm9pZClzZXRTdWJBbmltYXRpb246KE5TQW5pbWF0aW9uICopYW5pbWF0
aW9uCi17Ci0gICAgaWQgb2xkQW5pbWF0aW9uID0gX3N1YkFuaW1hdGlvbjsKLSAgICBfc3ViQW5p
bWF0aW9uID0gW2FuaW1hdGlvbiByZXRhaW5dOwotICAgIFtvbGRBbmltYXRpb24gcmVsZWFzZV07
Ci19Ci0KLS0gKE5TVGltZUludGVydmFsKWFkZGl0aW9uYWxEdXJhdGlvbk5lZWRlZFRvUmVhY2hG
aW5hbEZyYW1lCi17Ci0gICAgc3RhdGljIGNvbnN0IENHRmxvYXQgbWF4QWRkaXRpb25hbER1cmF0
aW9uID0gMTsKLSAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBzcGVlZEZhY3RvciA9IDAuMDAwMWY7
Ci0gICAgCi0gICAgQ0dGbG9hdCBtYXhEaXN0ID0gc3F1YXJlZERpc3RhbmNlKF9pbml0aWFsRnJh
bWUub3JpZ2luLCBfZmluYWxGcmFtZS5vcmlnaW4pOwotICAgIENHRmxvYXQgZGlzdDsKLSAgICAK
LSAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFrZVBvaW50KE5TTWF4WChfaW5pdGlhbEZy
YW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNNYWtlUG9pbnQoTlNNYXhYKF9maW5hbEZy
YW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOwotICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKLSAg
ICAgICAgbWF4RGlzdCA9IGRpc3Q7Ci0gICAgCi0gICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShO
U01ha2VQb2ludChOU01heFgoX2luaXRpYWxGcmFtZSksIE5TTWF4WShfaW5pdGlhbEZyYW1lKSks
IE5TTWFrZVBvaW50KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWF4WShfZmluYWxGcmFtZSkpKTsK
LSAgICBpZiAoZGlzdCA+IG1heERpc3QpCi0gICAgICAgIG1heERpc3QgPSBkaXN0OwotICAgIAot
ICAgIGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNaW5YKF9pbml0aWFsRnJh
bWUpLCBOU01pblkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01pblgoX2ZpbmFsRnJh
bWUpLCBOU01pblkoX2ZpbmFsRnJhbWUpKSk7Ci0gICAgaWYgKGRpc3QgPiBtYXhEaXN0KQotICAg
ICAgICBtYXhEaXN0ID0gZGlzdDsKLSAgICAKLSAgICByZXR1cm4gTUlOKHNxcnQobWF4RGlzdCkg
KiBzcGVlZEZhY3RvciwgbWF4QWRkaXRpb25hbER1cmF0aW9uKTsgICAgCi19Ci0KLS0gKHZvaWQp
c3RhcnRBbmltYXRpb24KLXsKLSAgICAvLyBDb21wdXRlIGV4dHJhIHRpbWUKLSAgICBpZiAoX2hp
bnRlZER1cmF0aW9uKQotICAgICAgICBbc2VsZiBzZXREdXJhdGlvbjpfaGludGVkRHVyYXRpb24g
KyBbc2VsZiBhZGRpdGlvbmFsRHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZV1dOwotICAg
IFtzdXBlciBzdGFydEFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewot
ICAgIF93aW5kb3cgPSBuaWw7Ci0gICAgW3N1cGVyIHN0b3BBbmltYXRpb25dOwotICAgIFtfc3Vi
QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
ZWJXaW5kb3dGYWRlQW5pbWF0aW9uCi0KLS0gKGlkKWluaXQKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbc2VsZiBz
ZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ1RocmVhZGVkXTsK
LSAgICBbc2VsZiBzZXRGcmFtZVJhdGU6NjBdOwotICAgIFtzZWxmIHNldEFuaW1hdGlvbkN1cnZl
Ok5TQW5pbWF0aW9uRWFzZUluT3V0XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQpaW5p
dFdpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24gd2luZG93OihOU1dpbmRvdyAq
KXdpbmRvdyBpbml0aWFsQWxwaGE6KENHRmxvYXQpaW5pdGlhbEFscGhhIGZpbmFsQWxwaGE6KENH
RmxvYXQpZmluYWxBbHBoYQotewotICAgIHNlbGYgPSBbc2VsZiBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7ICAgIAotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci0gICAg
X2luaXRpYWxBbHBoYSA9IGluaXRpYWxBbHBoYTsKLSAgICBfZmluYWxBbHBoYSA9IGZpbmFsQWxw
aGE7Ci0gICAgW3NlbGYgc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbgotewotICAg
IFtzdXBlciBzZXREdXJhdGlvbjpXZWJXaW5kb3dBbmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlv
bihkdXJhdGlvbildOwotfQotCi0tIChDR0Zsb2F0KWN1cnJlbnRBbHBoYQotewotICAgIHJldHVy
biBNQVgoMCwgTUlOKDEsIF9pbml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9m
aW5hbEFscGhhIC0gX2luaXRpYWxBbHBoYSkpKTsKLX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJv
Z3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKLXsKLSAgICBpZiAoX2lzU3RvcHBl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKF93aW5kb3cpOwotICAgIFtzdXBlciBz
ZXRDdXJyZW50UHJvZ3Jlc3M6cHJvZ3Jlc3NdOwotCi0gICAgQ0dTU2V0V2luZG93QWxwaGEobWFp
bldpbmRvd1NlcnZlckNvbm5lY3Rpb25JRCgpLCBfd2luZG93LndpbmRvd051bWJlciwgc2VsZi5j
dXJyZW50QWxwaGEpOwotfQotCi0tICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cqKXdpbmRvdwot
ewotICAgIF93aW5kb3cgPSB3aW5kb3c7Ci19Ci0KLS0gKHZvaWQpc3RvcEFuaW1hdGlvbgotewot
ICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgd2hlbiB3ZSBhcmUgYSBzdWIgYW5pbWF0aW9uIG9mIGEg
c2NhbGUgYW5pbWF0aW9uLgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgaG9zdGVkIGluIHRo
ZSBhbmltYXRlZCB0aHJlYWQgb2YgdGhlIHBhcmVudAotICAgIC8vIGFuZCBldmVuIGFmdGVyIFtz
dXBlciBzdG9wQW5pbWF0aW9uXSwgdGhlIHBhcmVudCBtaWdodCBjYWxsCi0gICAgLy8gc2V0Q3Vy
cnJlbnRQcm9ncmVzcy4KLSAgICBfaXNTdG9wcGVkID0gWUVTOwotCi0gICAgW3N1cGVyIHN0b3BB
bmltYXRpb25dOwotfQotCi1AZW5kCi0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW0KX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MjkwKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxOC0wMi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20gV2ViQ29y
ZSB0byBXZWJLaXRMZWdhY3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODI2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBhIGZldyBy
ZWZlcmVuY2VzIHRvIE5TQXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0uCisg
ICAgICAgIElkZWFsbHksIHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdlYkNvcmUu
CisKKyAgICAgICAgKiBXZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxOC0wMS0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVzZSBDb21wbGV0aW9uSGFuZGxlcnMgZm9yIFJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJL
aXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NzQsNiArNzc0LDkgQEAKIAkJ
QzBCODhFOEIxMEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBCODhFOEEx
MEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMwQzVCM0VFMTE3N0E0
QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQzVCM0VDMTE3N0E0QTAwMDJCMEFFRiAv
KiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDMEM1QjNFRjExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzBDNUIzRUQxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJM
UGF0dGVybi5tbSAqLzsgfTsKKwkJQzFEODExMjgyMDJDRDgwMDAwRUU3NEY5IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlci5tbSAqLzsgfTsKKwkJQzFEODExMkIyMDJDRENDNDAwRUU3NEY5IC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMUQ4MTEyOTIwMkNEQ0MyMDBFRTc0RjkgLyog
V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKKwkJQzFEODEx
MkUyMDJDRUQwODAwRUU3NEY5IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMxRDgxMTJEMjAyQ0VEMDcwMEVFNzRG
OSAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gKi87IH07CiAJCUNEOEJGQ0U3MTU1MzEyMjQwMDVB
RkIyNSAvKiBXZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUgLyogV2Vi
S2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tICovOyB9OwogCQlDRDhCRkNFODE1NTMxMjI0MDA1QUZC
MjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0
RnVsbFNjcmVlbkxpc3RlbmVyLmggKi87IH07CiAJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAv
KiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLmggKi87IH07CkBAIC0xNTI1LDYgKzE1MjgsMTIgQEAKIAkJQzBCODhFOEEx
MEEwOEYzRDAwRkJCM0Y1IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUIzRUMxMTc3QTRBMDAwMkIwQUVGIC8q
IFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzBDNUIzRUQxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVy
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlVzZXJDb250
ZW50VVJMUGF0dGVybi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMjYy
MDJDRDdGRTAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyNzIwMkNEODAwMDBFRTc0Rjkg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRGOSAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzFEODExMkEyMDJDRENDMzAwRUU3
NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMUQ4MTEyQzIwMkNFRDA2MDBF
RTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYldpbmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMUQ4MTEyRDIwMkNFRDA3MDBFRTc0RjkgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCRkNFNTE1NTMxMjI0MDA1QUZCMjUg
LyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNj
cmVlbkxpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEZ1
bGxTY3JlZW5MaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREE2MkFF
MDEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzAsMTIgKzIwNzksMTggQEAKIAkJCQlGODM0QUFE
NjBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLm1tICovLAogCQkJCTUxNUUyN0ND
MDQ1OEM4NjUwMENBMkQzQSAvKiBXZWJVSURlbGVnYXRlLmggKi8sCiAJCQkJNjVBN0Q0NEEwNTY4
QUIyNjAwRTcwRUY2IC8qIFdlYlVJRGVsZWdhdGVQcml2YXRlLmggKi8sCisJCQkJQzFEODExMjYy
MDJDRDdGRTAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaCAqLywKKwkJ
CQlDMUQ4MTEyNzIwMkNEODAwMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ci5tbSAqLywKKwkJCQlDMUQ4MTEyQTIwMkNEQ0MzMDBFRTc0RjkgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5oICovLAorCQkJCUMxRDgxMTI5MjAyQ0RDQzIwMEVFNzRG
OSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovLAogCQkJCTUx
QThCNTc5MDQyODM0RjcwMENBMkQzQSAvKiBXZWJWaWV3LmggKi8sCiAJCQkJNTFBOEI1N0EwNDI4
MzRGNzAwQ0EyRDNBIC8qIFdlYlZpZXcubW0gKi8sCiAJCQkJQkMyRTQ2NEIwRkQ4QTk2ODAwQTlE
OURFIC8qIFdlYlZpZXdEYXRhLmggKi8sCiAJCQkJQkMyRTQ2NEMwRkQ4QTk2ODAwQTlEOURFIC8q
IFdlYlZpZXdEYXRhLm1tICovLAogCQkJCTkzMEQwMkJCMDYyNzVGNjQwMDc2NzAxRSAvKiBXZWJW
aWV3SW50ZXJuYWwuaCAqLywKIAkJCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyogV2ViVmll
d1ByaXZhdGUuaCAqLywKKwkJCQlDMUQ4MTEyQzIwMkNFRDA2MDBFRTc0RjkgLyogV2ViV2luZG93
QW5pbWF0aW9uLmggKi8sCisJCQkJQzFEODExMkQyMDJDRUQwNzAwRUU3NEY5IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gV2ViVmlldzsKIAkJCXBhdGggPSBt
YWMvV2ViVmlldzsKQEAgLTM2NzIsMTEgKzM2ODcsMTQgQEAKIAkJCQlDMEM1QjNFRjExNzdBNEEw
MDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDcwRjU0OUMxN0YxRTQyQjAwMTY5RTA0IC8qIFdlYlVzZXJNZWRpYUNsaWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTQ2MThERkY5MURFRjc2MEEwMDMzQzNBQSAvKiBXZWJWYWxpZGF0aW9u
TWVzc2FnZUNsaWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUMxRDgxMTI4MjAyQ0Q4MDAwMEVF
NzRGOSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzFEODExMkIyMDJDRENDNDAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTEwNzA4MjRCRjAxMDA4REYw
MzggLyogV2ViVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMkU0NjRFMEZEOEE5NjgwMEE5
RDlERSAvKiBXZWJWaWV3RGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MzBDMTJDMUIyQzVE
RjcwMERFQTAxRCAvKiBXZWJWaWV3R3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFE
NzcxODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBQzcxNzZFMUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQzFEODExMkUyMDJDRUQwODAwRUU3NEY5IC8qIFdlYldpbmRv
d0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzcwOSw5ICszNzI3LDcgQEAKIAkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMUM5MDRGRDIwQkE5REQwRjAwODFFOUQwIC8qIFdl
YktpdExlZ2FjeS54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJREVCVUdf
REVGSU5FUyA9ICIkKERFQlVHX0RFRklORVNfZGVidWcpIEVOQUJMRV9XRUJLSVRfVU5TRVRfRFlM
RF9GUkFNRVdPUktfUEFUSCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICgKLQkJCQkJIiQoT1RIRVJf
TERGTEFHUykiLAotCQkJCSk7CisJCQkJT1RIRVJfTERGTEFHUyA9ICIkKE9USEVSX0xERkxBR1Mp
IjsKIAkJCX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07CkBAIC0zNzIwLDkgKzM3MzYsNyBAQAog
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQzkwNEZEMjBCQTlERDBGMDA4MUU5RDAg
LyogV2ViS2l0TGVnYWN5LnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlE
RUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpIEVOQUJM
RV9XRUJLSVRfVU5TRVRfRFlMRF9GUkFNRVdPUktfUEFUSCI7Ci0JCQkJT1RIRVJfTERGTEFHUyA9
ICgKLQkJCQkJIiQoT1RIRVJfTERGTEFHUykiLAotCQkJCSk7CisJCQkJT1RIRVJfTERGTEFHUyA9
ICIkKE9USEVSX0xERkxBR1MpIjsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKQEAg
LTM3MzEsOSArMzc0NSw3IEBACiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDFDOTA0
RkQyMEJBOUREMEYwMDgxRTlEMCAvKiBXZWJLaXRMZWdhY3kueGNjb25maWcgKi87CiAJCQlidWls
ZFNldHRpbmdzID0gewogCQkJCUJVSUxEX1ZBUklBTlRTID0gbm9ybWFsOwotCQkJCU9USEVSX0xE
RkxBR1MgPSAoCi0JCQkJCSIkKE9USEVSX0xERkxBR1MpIiwKLQkJCQkpOworCQkJCU9USEVSX0xE
RkxBR1MgPSAiJChPVEhFUl9MREZMQUdTKSI7CiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjgyNzgp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMiBAQAorMjAxOC0wMi0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGZyb20g
V2ViQ29yZSB0byBXZWJLaXRMZWdhY3kuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODI2MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJdCBpcyBvbmx5IHVzZWQgYnkgV0sxLiBBbHNvIHRoZXJlIGFyZSBh
IGZldyByZWZlcmVuY2VzIHRvIE5TQXBwIGluIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
bW0uCisgICAgICAgIElkZWFsbHksIHdlIHNob3VsZCBub3QgcmVmZXJlbmNlIE5TQXBwIGluIFdl
YkNvcmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0uCisgICAgICAgICogV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5I
VURXaW5kb3dDb250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmguCisgICAgICAgICog
V2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlci5tbS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAg
ICogV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oLgorICAgICAgICAqIFdlYlZpZXcv
V2ViV2luZG93QW5pbWF0aW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViV2luZG93QW5pbWF0aW9uLm1tLgorCiAyMDE4LTAxLTEzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBFdmVudCBpbXByb3ZlbWVudHMKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5tbQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiV2ViTlNXaW5kb3dFeHRyYXMuaCIKICNpbXBvcnQg
IldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0ICJXZWJXaW5kb3dBbmltYXRpb24uaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KQEAgLTQyLDcgKzQzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29y
ZUZ1bGxTY3JlZW5XaW5kb3cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViV2luZG93QW5pbWF0aW9u
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcu
aD4KIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDIyODI3OCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIuaDoyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFTykKKworI2ltcG9ydCA8QXBwS2l0L05TV2luZG93Q29udHJvbGxl
ci5oPgorI2ltcG9ydCA8QXBwS2l0L05TU2NyZWVuLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBQQUwgeworY2xhc3MgU2xlZXBEaXNhYmxlcjsKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK30KKworQHByb3RvY29sIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKK0BjbGFzcyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdlYldpbmRvd0ZhZGVBbmltYXRpb247CitA
Y2xhc3MgQ0FMYXllcjsKKworV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIDogTlNXaW5kb3dDb250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgUmVm
UHRyPFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7IC8vIChyZXRhaW4p
CisgICAgaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRl
OyAvLyAoYXNzaWduKQorCisgICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRv
dzsgLy8gKHJldGFpbikKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
ICpfaHVkQ29udHJvbGxlcjsgLy8gKHJldGFpbikKKworICAgIFdlYldpbmRvd0ZhZGVBbmltYXRp
b24gKl9mYWRlQW5pbWF0aW9uOyAvLyAocmV0YWluKQorCisgICAgQk9PTCBfaXNFbmRpbmdGdWxs
c2NyZWVuOworICAgIEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQQUw6OlNsZWVwRGlzYWJsZXI+IF9kaXNwbGF5U2xlZXBEaXNhYmxlcjsKK30KKwor
LSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7Cist
ICh2b2lkKXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVn
YXRlPilkZWxlZ2F0ZTsKKworLSAodm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5
ZXI7CistICh2b2lkKXNldFZpZGVvRWxlbWVudDooV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCop
dmlkZW9FbGVtZW50OworLSAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50
OworCistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47CistICh2b2lk
KWV4aXRGdWxsc2NyZWVuOworCitAZW5kCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDggKzI3LDggQEAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPKQogCi0jaW1w
b3J0IDxBcHBLaXQvTlNXaW5kb3dDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNTY3Jl
ZW4uaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1dpbmRvd0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFBBTCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyLm1tCShyZXZpc2lvbiAyMjgyNzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tOjIyODI3OCkKKysrIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbXBvcnQgIldlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2lu
ZG93Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgorI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CisjaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KKyNpbXBvcnQgPHBhbC9zeXN0ZW0vU2xlZXBEaXNhYmxlci5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK3VzaW5nIFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ7CisKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorCitTT0ZUX0xJTktfRlJBTUVXT1JL
KEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5
ZXIpCisKK3VzaW5nIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWE7CitAaW50ZXJmYWNlIFdlYlZpZGVv
RnVsbHNjcmVlbldpbmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+Cit7CisgICAg
U0VMIF9jb250cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmQ7CisgICAgV2ViV2luZG93U2NhbGVB
bmltYXRpb24gKl9mdWxsc2NyZWVuQW5pbWF0aW9uOyAvLyAocmV0YWluKQorfQorLSAodm9pZClh
bmltYXRlRnJvbVJlY3Q6KE5TUmVjdClzdGFydFJlY3QgdG9SZWN0OihOU1JlY3QpZW5kUmVjdCB3
aXRoU3ViQW5pbWF0aW9uOihOU0FuaW1hdGlvbiAqKXN1YkFuaW1hdGlvbiBjb250cm9sbGVyQWN0
aW9uOihTRUwpY29udHJvbGxlckFjdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyKEhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSkgPFdlYlZpZGVv
RnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKy0gKHZvaWQpcmVxdWVzdEV4
aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247CistICh2b2lkKXVwZGF0
ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbjsKKy0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRpb25z
OworQGVuZAorCitAaW50ZXJmYWNlIE5TV2luZG93KElzT25BY3RpdmVTcGFjZUFkZGl0aW9uRm9y
VGlnZXJBbmRMZW9wYXJkKQorLSAoQk9PTClpc09uQWN0aXZlU3BhY2U7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCistIChpZClpbml0Cit7Cisg
ICAgLy8gRG8gbm90IGRlZmVyIHdpbmRvdyBjcmVhdGlvbiwgdG8gbWFrZSBzdXJlIC13aW5kb3dO
dW1iZXIgaXMgY3JlYXRlZCAobmVlZGVkIGJ5IFdlYldpbmRvd1NjYWxlQW5pbWF0aW9uKS4KKyAg
ICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgYWxsb2NdIGlu
aXRXaXRoQ29udGVudFJlY3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93
TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2luZG93IHJlbGVhc2VdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBbc2VsZiB3aW5kb3dEaWRM
b2FkXTsKKyAgICByZXR1cm4gc2VsZjsKKyAgICAKK30KKy0gKHZvaWQpZGVhbGxvYworeworICAg
IEFTU0VSVCghX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KTsKKyAgICBBU1NFUlQoIV9mYWRl
QW5pbWF0aW9uKTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOnNlbGZdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoV2ViVmlk
ZW9GdWxsc2NyZWVuV2luZG93ICopZnVsbHNjcmVlbldpbmRvdworeworICAgIHJldHVybiAoV2Vi
VmlkZW9GdWxsc2NyZWVuV2luZG93ICopW3N1cGVyIHdpbmRvd107Cit9CisKKy0gKHZvaWQpc2V0
dXBWaWRlb092ZXJsYXk6KENBTGF5ZXIgKilsYXllcgoreworICAgIFdlYlZpZGVvRnVsbHNjcmVl
bldpbmRvdyAqd2luZG93ID0gW3NlbGYgZnVsbHNjcmVlbldpbmRvd107CisgICAgWyhOU1ZpZXcq
KVt3aW5kb3cgY29udGVudFZpZXddIHNldExheWVyOmxheWVyXTsKKyAgICBbW3dpbmRvdyBjb250
ZW50Vmlld10gc2V0V2FudHNMYXllcjpZRVNdOworfQorCistICh2b2lkKXdpbmRvd0RpZExvYWQK
K3sKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5XaW5kb3cgKndpbmRvdyA9IFtzZWxmIGZ1bGxzY3Jl
ZW5XaW5kb3ddOworICAgIFt3aW5kb3cgc2V0SGFzU2hhZG93OllFU107IC8vIFRoaXMgaXMgbmlj
ZXIgd2l0aCBhIHNoYWRvdy4KKyAgICBbd2luZG93IHNldExldmVsOk5TUG9wVXBNZW51V2luZG93
TGV2ZWwtMV07CisgICAgWyhOU1ZpZXcqKVt3aW5kb3cgY29udGVudFZpZXddIHNldExheWVyOltD
QUxheWVyIGxheWVyXV07CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHNldFdhbnRzTGF5ZXI6
WUVTXTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6
KSBuYW1lOk5TQXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Ok5T
QXBwXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFy
YW1ldGVyczopIG5hbWU6TlNBcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnNOb3Rp
ZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKK30KKworLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9F
bGVtZW50Cit7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7Cit9CisKKy0gKHZvaWQp
c2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKK3sKKyAgICBf
dmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCisgICAgaWYgKCFfdmlkZW9FbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3NlbGYgaXNXaW5kb3dMb2FkZWRdKSB7CisgICAg
ICAgIGlmIChfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1l
ZGlhOjpBVkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGUpIHsKKyAgICAgICAgICAgIEFWUGxheWVy
ICpwbGF5ZXIgPSBfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEuYXZmTWVkaWFQ
bGF5ZXI7CisgICAgICAgICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJMYXllcj4gbGF5ZXIgPSBhZG9w
dE5TKFthbGxvY0FWUGxheWVyTGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyAgICAgICAgICAgIFtz
ZWxmIHNldHVwVmlkZW9PdmVybGF5OmxheWVyLmdldCgpXTsKKyAgICAgICAgICAgIFtsYXllci5n
ZXQoKSBzZXRQbGF5ZXI6cGxheWVyXTsKKworICAgICAgICAgICAgW3BsYXllciBhZGRPYnNlcnZl
cjpzZWxmIGZvcktleVBhdGg6QCJyYXRlIiBvcHRpb25zOjAgY29udGV4dDpudWxscHRyXTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworLSAoaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJE
ZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQorCistICh2b2lk
KXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilk
ZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChDR0Zsb2F0KWNs
ZWFyRmFkZUFuaW1hdGlvbgoreworICAgIFtfZmFkZUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsK
KyAgICBDR0Zsb2F0IHByZXZpb3VzQWxwaGEgPSBbX2ZhZGVBbmltYXRpb24gY3VycmVudEFscGhh
XTsKKyAgICBbX2ZhZGVBbmltYXRpb24gc2V0V2luZG93Om5pbF07CisgICAgW19mYWRlQW5pbWF0
aW9uIHJlbGVhc2VdOworICAgIF9mYWRlQW5pbWF0aW9uID0gbmlsOworICAgIHJldHVybiBwcmV2
aW91c0FscGhhOworfQorCistICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCit7CisgICAg
Q0FMYXllciAqbGF5ZXIgPSBbKE5TVmlldyopW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGxh
eWVyXTsKKyAgICBpZiAoW2xheWVyIGlzS2luZE9mQ2xhc3M6Z2V0QVZQbGF5ZXJMYXllckNsYXNz
KCldKQorICAgICAgICBbWyhBVlBsYXllckxheWVyKilsYXllciBwbGF5ZXJdIHJlbW92ZU9ic2Vy
dmVyOnNlbGYgZm9yS2V5UGF0aDpAInJhdGUiXTsKKworICAgIFtzZWxmIGNsZWFyRmFkZUFuaW1h
dGlvbl07CisgICAgW1tzZWxmIHdpbmRvd10gY2xvc2VdOworICAgIFtzZWxmIHNldFdpbmRvdzpu
aWxdOworICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07ICAgCisgICAg
W3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6bmlsXTsKKyAgICBbX2h1ZENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgX2h1ZENvbnRy
b2xsZXIgPSBuaWw7CisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBjbG9zZV07Cisg
ICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyByZWxlYXNlXTsKKyAgICBfYmFja2dyb3Vu
ZEZ1bGxzY3JlZW5XaW5kb3cgPSBuaWw7CisgICAgCisgICAgW3NlbGYgYXV0b3JlbGVhc2VdOyAv
LyBBc3NvY2lhdGVkIC1yZXRhaW4gaXMgaW4gLWV4aXRGdWxsc2NyZWVuLgorICAgIF9pc0VuZGlu
Z0Z1bGxzY3JlZW4gPSBOTzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4K
K3sKKyAgICBbc2VsZiBjbGVhckZhZGVBbmltYXRpb25dOworCisgICAgQVNTRVJUKCFfaHVkQ29u
dHJvbGxlcik7CisgICAgX2h1ZENvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOworICAgIFtfaHVkQ29udHJvbGxlciBzZXREZWxl
Z2F0ZTpzZWxmXTsKKworICAgIFtzZWxmIHVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07
CisgICAgW3NlbGYgdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICBbTlNDdXJzb3Igc2V0SGlk
ZGVuVW50aWxNb3VzZU1vdmVzOllFU107CisgICAgCisgICAgLy8gR2l2ZSB0aGUgSFVEIGtleWJv
YXJkIGZvY3VzIGluaXRpYWxseQorICAgIFtfaHVkQ29udHJvbGxlciBmYWRlV2luZG93SW5dOwor
fQorCistIChOU1JlY3QpdmlkZW9FbGVtZW50UmVjdAoreworICAgIHJldHVybiBfdmlkZW9FbGVt
ZW50LT5zY3JlZW5SZWN0KCk7Cit9CisKKy0gKHZvaWQpYXBwbGljYXRpb25EaWRSZXNpZ25BY3Rp
dmU6KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb24KK3sgICAKKyAgICBVTlVTRURfUEFSQU0o
bm90aWZpY2F0aW9uKTsKKyAgICBOU1dpbmRvdyogZnVsbHNjcmVlbldpbmRvdyA9IFtzZWxmIGZ1
bGxzY3JlZW5XaW5kb3ddOworCisgICAgLy8gUmVwbGljYXRlIHRoZSBRdWlja1RpbWUgUGxheWVy
IChYKSBiZWhhdmlvciB3aGVuIGxvc2luZyBhY3RpdmUgYXBwbGljYXRpb24gc3RhdHVzOgorICAg
IC8vIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVlbiB0aGUgbWFpbiBzY3JlZW4/IChOb3RlOiB0aGlz
IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBvbmx5IGEgCisgICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBh
dmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNl
PyBJRkYgc28sIAorICAgIC8vIHRoZW4gZXhpdCBmdWxsc2NyZWVuIG1vZGUuICAgIAorICAgIGlm
IChmdWxsc2NyZWVuV2luZG93LnNjcmVlbiA9PSBbTlNTY3JlZW4gc2NyZWVuc11bMF0gJiYgZnVs
bHNjcmVlbldpbmRvdy5vbkFjdGl2ZVNwYWNlKQorICAgICAgICAgW3NlbGYgcmVxdWVzdEV4aXRG
dWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107Cit9CisgICAgICAgICAKKyAgICAgICAgIAorLy8g
TUFSSzogLQorLy8gTUFSSzogRXhwb3NlZCBJbnRlcmZhY2UKKworc3RhdGljIE5TUmVjdCBmcmFt
ZUV4cGFuZGVkVG9SYXRpb09mRnJhbWUoTlNSZWN0IGZyYW1lVG9FeHBhbmQsIE5TUmVjdCBmcmFt
ZSkKK3sKKyAgICAvLyBLZWVwIGEgY29uc3RyYWluZWQgYXNwZWN0IHJhdGlvIGZvciB0aGUgZGVz
dGluYXRpb24gd2luZG93CisgICAgTlNSZWN0IHJlc3VsdCA9IGZyYW1lVG9FeHBhbmQ7CisgICAg
Q0dGbG9hdCBuZXdSYXRpbyA9IGZyYW1lLnNpemUud2lkdGggLyBmcmFtZS5zaXplLmhlaWdodDsK
KyAgICBDR0Zsb2F0IG9yaWdpbmFsUmF0aW8gPSBmcmFtZVRvRXhwYW5kLnNpemUud2lkdGggLyBm
cmFtZVRvRXhwYW5kLnNpemUuaGVpZ2h0OworICAgIGlmIChuZXdSYXRpbyA+IG9yaWdpbmFsUmF0
aW8pIHsKKyAgICAgICAgQ0dGbG9hdCBuZXdXaWR0aCA9IG5ld1JhdGlvICogZnJhbWVUb0V4cGFu
ZC5zaXplLmhlaWdodDsKKyAgICAgICAgQ0dGbG9hdCBkaWZmID0gbmV3V2lkdGggLSBmcmFtZVRv
RXhwYW5kLnNpemUud2lkdGg7CisgICAgICAgIHJlc3VsdC5zaXplLndpZHRoID0gbmV3V2lkdGg7
CisgICAgICAgIHJlc3VsdC5vcmlnaW4ueCAtPSBkaWZmIC8gMjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBDR0Zsb2F0IG5ld0hlaWdodCA9IGZyYW1lVG9FeHBhbmQuc2l6ZS53aWR0aCAvIG5ld1Jh
dGlvOworICAgICAgICBDR0Zsb2F0IGRpZmYgPSBuZXdIZWlnaHQgLSBmcmFtZVRvRXhwYW5kLnNp
emUuaGVpZ2h0OworICAgICAgICByZXN1bHQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7CisgICAg
ICAgIHJlc3VsdC5vcmlnaW4ueSAtPSBkaWZmIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIE5TV2luZG93ICpjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRv
dyhOU1JlY3QgZnJhbWUsIGludCBsZXZlbCkKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tO
U1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpmcmFtZSBzdHlsZU1hc2s6TlNCb3Jk
ZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9d
OworICAgIFt3aW5kb3cgc2V0T3BhcXVlOllFU107CisgICAgW3dpbmRvdyBzZXRCYWNrZ3JvdW5k
Q29sb3I6W05TQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFt3aW5kb3cgc2V0TGV2ZWw6bGV2ZWxd
OworICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICByZXR1cm4gd2lu
ZG93OworfQorCistICh2b2lkKXNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOihC
T09MKWZhZGVJbgoreworICAgIENHRmxvYXQgaW5pdGlhbEFscGhhID0gZmFkZUluID8gMCA6IDE7
CisgICAgaWYgKF9mYWRlQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdXBw
b3J0IHF1ZXVpbmcgYW5pbWF0aW9uIGlmIHRoZSBwcmV2aW91cyBvbmUgaXNuJ3Qgb3ZlciB5ZXQK
KyAgICAgICAgaW5pdGlhbEFscGhhID0gW3NlbGYgY2xlYXJGYWRlQW5pbWF0aW9uXTsKKyAgICB9
CisgICAgaWYgKCFfZm9yY2VEaXNhYmxlQW5pbWF0aW9uKQorICAgICAgICBfZmFkZUFuaW1hdGlv
biA9IFtbV2ViV2luZG93RmFkZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjowLjIg
d2luZG93Ol9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBpbml0aWFsQWxwaGE6aW5pdGlhbEFs
cGhhIGZpbmFsQWxwaGE6ZmFkZUluID8gMSA6IDBdOworfQorCistICh2b2lkKWVudGVyRnVsbHNj
cmVlbjooTlNTY3JlZW4gKilzY3JlZW4KK3sKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgc2Ny
ZWVuID0gW05TU2NyZWVuIG1haW5TY3JlZW5dOworCisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3Nj
cmVlbiBmcmFtZV07CisgICAgTlNSZWN0IGZyYW1lID0gZnJhbWVFeHBhbmRlZFRvUmF0aW9PZkZy
YW1lKFtzZWxmIHZpZGVvRWxlbWVudFJlY3RdLCBlbmRGcmFtZSk7CisKKyAgICAvLyBDcmVhdGUg
YSBibGFjayB3aW5kb3cgaWYgbmVlZGVkCisgICAgaWYgKCFfYmFja2dyb3VuZEZ1bGxzY3JlZW5X
aW5kb3cpCisgICAgICAgIF9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyA9IGNyZWF0ZUJhY2tn
cm91bmRGdWxsc2NyZWVuV2luZG93KFtzY3JlZW4gZnJhbWVdLCBbW3NlbGYgd2luZG93XSBsZXZl
bF0tMSk7CisgICAgZWxzZQorICAgICAgICBbX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93IHNl
dEZyYW1lOltzY3JlZW4gZnJhbWVdIGRpc3BsYXk6Tk9dOworCisgICAgW3NlbGYgc2V0dXBGYWRl
QW5pbWF0aW9uSWZOZWVkZWRBbmRGYWRlSW46WUVTXTsKKyAgICBpZiAoX2ZvcmNlRGlzYWJsZUFu
aW1hdGlvbikgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmltYXRpb24K
KyAgICAgICAgZnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICBbW3NlbGYgZnVsbHNjcmVl
bldpbmRvd10gYW5pbWF0ZUZyb21SZWN0OmZyYW1lIHRvUmVjdDplbmRGcmFtZSB3aXRoU3ViQW5p
bWF0aW9uOl9mYWRlQW5pbWF0aW9uIGNvbnRyb2xsZXJBY3Rpb246QHNlbGVjdG9yKHdpbmRvd0Rp
ZEVudGVyRnVsbHNjcmVlbildOworCisgICAgW19iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyBv
cmRlcldpbmRvdzpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86W1tzZWxmIGZ1bGxzY3JlZW5XaW5k
b3ddIHdpbmRvd051bWJlcl1dOworfQorCistICh2b2lkKWV4aXRGdWxsc2NyZWVuCit7CisgICAg
aWYgKF9pc0VuZGluZ0Z1bGxzY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBfaXNFbmRpbmdG
dWxsc2NyZWVuID0gWUVTOworICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CisKKyAg
ICBOU1JlY3QgZW5kRnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKKworICAgIFtzZWxm
IHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUluOk5PXTsKKyAgICBpZiAoX2ZvcmNl
RGlzYWJsZUFuaW1hdGlvbikgeworICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBh
bmltYXRpb24KKyAgICAgICAgZW5kRnJhbWUgPSBOU1plcm9SZWN0OworICAgIH0KKyAgICAKKyAg
ICAvLyBXZSBoYXZlIHRvIHJldGFpbiBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFs
aXZlIGZvciB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uCisgICAgLy8gSWYgb3VyIG93bmVyIHJl
bGVhc2VzIHVzIHdlIGNvdWxkIGNyYXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorICAgIC8v
IEJhbGFuY2VkIGluIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCisgICAgW3NlbGYgcmV0YWluXTsg
ICAgCisKKyAgICBOU1JlY3Qgc3RhcnRGcmFtZSA9IFtbc2VsZiB3aW5kb3ddIGZyYW1lXTsKKyAg
ICBlbmRGcmFtZSA9IGZyYW1lRXhwYW5kZWRUb1JhdGlvT2ZGcmFtZShlbmRGcmFtZSwgc3RhcnRG
cmFtZSk7CisKKyAgICBbW3NlbGYgZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0ZUZyb21SZWN0OnN0
YXJ0RnJhbWUgdG9SZWN0OmVuZEZyYW1lIHdpdGhTdWJBbmltYXRpb246X2ZhZGVBbmltYXRpb24g
Y29udHJvbGxlckFjdGlvbjpAc2VsZWN0b3Iod2luZG93RGlkRXhpdEZ1bGxzY3JlZW4pXTsKK30K
KworLSAodm9pZClhcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KE5TTm90aWZp
Y2F0aW9uKilub3RpZmljYXRpb24KK3sKKyAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsK
KyAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBtYWluIHNjcmVlbiBieSBtb3Zp
bmcgdGhlIG1lbnUgYmFyLCBvciB0aGV5IG1heSBoYXZlIGNoYW5nZWQKKyAgICAvLyB0aGUgRG9j
aydzIHNpemUgb3IgbG9jYXRpb24sIG9yIHRoZXkgbWF5IGhhdmUgY2hhbmdlZCB0aGUgZnVsbHNj
cmVlbiBzY3JlZW4ncyBkaW1lbnNpb25zLiAgCisgICAgLy8gVXBkYXRlIG91ciBwcmVzZW50YXRp
b24gcGFyYW1ldGVycywgYW5kIGVuc3VyZSB0aGF0IHRoZSBmdWxsIHNjcmVlbiB3aW5kb3cgb2Nj
dXBpZXMgdGhlIAorICAgIC8vIGVudGlyZSBzY3JlZW46CisgICAgW3NlbGYgdXBkYXRlTWVudUFu
ZERvY2tGb3JGdWxsc2NyZWVuXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTpbW1tzZWxm
IHdpbmRvd10gc2NyZWVuXSBmcmFtZV0gZGlzcGxheTpZRVNdOworfQorCistICh2b2lkKXVwZGF0
ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgoreworICAgIC8vIE5TQXBwbGljYXRpb25QcmVzZW50
YXRpb25PcHRpb25zIGlzIGF2YWlsYWJsZSBvbiA+IDEwLjYgb25seToKKyAgICBOU0FwcGxpY2F0
aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBvcHRpb25zID0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlv
bkRlZmF1bHQ7CisgICAgTlNTY3JlZW4qIGZ1bGxzY3JlZW5TY3JlZW4gPSBbW3NlbGYgd2luZG93
XSBzY3JlZW5dOworCisgICAgaWYgKCFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CisgICAgICAgIC8v
IEF1dG8taGlkZSB0aGUgbWVudSBiYXIgaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMg
dGhlIG1lbnUgYmFyOgorICAgICAgICAvLyBOT1RFOiBpZiB0aGUgZnVsbHNjcmVlblNjcmVlbiBj
b250YWlucyB0aGUgbWVudSBiYXIgYnV0IG5vdCB0aGUgZG9jaywgd2UgbXVzdCBzdGlsbCAKKyAg
ICAgICAgLy8gYXV0by1oaWRlIHRoZSBkb2NrLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJv
d24uCisgICAgICAgIGlmIChbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gPT0g
ZnVsbHNjcmVlblNjcmVlbikKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gKE5TQXBwbGljYXRpb25Q
cmVzZW50YXRpb25BdXRvSGlkZU1lbnVCYXIgfCBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0
b0hpZGVEb2NrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgc2NyZWVuIGNvbnRh
aW5zIHRoZSBkb2NrIGJ5IGNvbXBhcmluZyB0aGUgc2NyZWVuJ3MgZnJhbWUgdG8gaXRzCisgICAg
ICAgIC8vIHZpc2libGVGcmFtZTsgaWYgYSBkb2NrIGlzIHByZXNlbnQsIHRoZSB2aXNpYmxlRnJh
bWUgd2lsbCBkaWZmZXIuICBJZiB0aGUgY3VycmVudCBzY3JlZW4KKyAgICAgICAgLy8gY29udGFp
bnMgdGhlIGRvY2ssIGhpZGUgaXQuCisgICAgICAgIGVsc2UgaWYgKCFOU0VxdWFsUmVjdHMoW2Z1
bGxzY3JlZW5TY3JlZW4gZnJhbWVdLCBbZnVsbHNjcmVlblNjcmVlbiB2aXNpYmxlRnJhbWVdKSkK
KyAgICAgICAgICAgIG9wdGlvbnMgfD0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRl
RG9jazsKKyAgICB9CisKKyAgICBOU0FwcC5wcmVzZW50YXRpb25PcHRpb25zID0gb3B0aW9uczsK
K30KKworLSAodm9pZCl1cGRhdGVQb3dlckFzc2VydGlvbnMKK3sKKyAgICBfZGlzcGxheVNsZWVw
RGlzYWJsZXIgPSBudWxscHRyOworfQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBXaW5kb3cgY2Fs
bGJhY2sKKworLSAodm9pZClfcmVxdWVzdEV4aXQKK3sKKyAgICBpZiAoX3ZpZGVvRWxlbWVudCkK
KyAgICAgICAgX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBfZm9yY2VEaXNh
YmxlQW5pbWF0aW9uID0gTk87Cit9CisKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0
aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb24KK3sKKyAgICBpZiAoX2lzRW5kaW5nRnVsbHNjcmVl
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmlt
YXRpb247CisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4aXQp
IHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CisKK30KKworLSAodm9pZClyZXF1ZXN0RXhp
dEZ1bGxzY3JlZW4KK3sKKyAgICBbc2VsZiByZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0
aW9uOllFU107Cit9CisKKy0gKHZvaWQpZmFkZUhVREluCit7CisgICAgW19odWRDb250cm9sbGVy
IGZhZGVXaW5kb3dJbl07Cit9CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNT
dHJpbmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnkg
KiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAgICBVTlVTRURfUEFSQU0ob2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oY29udGV4
dCk7CisKKyAgICBpZiAoW2tleVBhdGggaXNFcXVhbFRvOkAicmF0ZSJdKQorICAgICAgICBbc2Vs
ZiByYXRlQ2hhbmdlZDpuaWxdOworfQorCistICh2b2lkKXJhdGVDaGFuZ2VkOihOU05vdGlmaWNh
dGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3Rp
ZmljYXRpb24pOworICAgIFtfaHVkQ29udHJvbGxlciB1cGRhdGVSYXRlXTsKKyAgICBbc2VsZiB1
cGRhdGVQb3dlckFzc2VydGlvbnNdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJW
aWRlb0Z1bGxzY3JlZW5XaW5kb3cKKworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0
KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNr
aW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworeworICAgIFVOVVNF
RF9QQVJBTShhU3R5bGUpOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpj
b250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZl
cmluZ1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIFtzZWxmIHNldE9wYXF1ZTpOT107CisgICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9y
OltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKKyAgICBbc2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6
Tk9dOworICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2Z1bGxzY3Jl
ZW5BbmltYXRpb24pOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoQk9PTClyZXNpZ25G
aXJzdFJlc3BvbmRlcgoreworICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTCljYW5CZWNvbWVL
ZXlXaW5kb3cKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2
ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQpOworfQorCistICh2
b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIHJlcXVlc3RFeGl0RnVsbHNjcmVlbl07
Cit9CisKKy0gKHZvaWQpYW5pbWF0ZWRSZXNpemVEaWRFbmQKK3sKKyAgICAvLyBDYWxsIG91ciB3
aW5kb3dDb250cm9sbGVyLgorICAgIGlmIChfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0aW9uRW5k
KQorICAgICAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0gcGVyZm9ybVNlbGVjdG9yOl9jb250
cm9sbGVyQWN0aW9uT25BbmltYXRpb25FbmRdOworICAgIF9jb250cm9sbGVyQWN0aW9uT25Bbmlt
YXRpb25FbmQgPSBOVUxMOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGFuaW1hdGUg
YSBjaGFuZ2Ugb2YgZnJhbWUgcmVjdGFuZ2xlCisvLyBXZSBzdXBwb3J0IHF1ZXVpbmcgYW5pbWF0
aW9uLCB0aGF0IG1lYW5zIHRoYXQgd2UnbGwgY29ycmVjdGx5CisvLyBpbnRlcnJ1cHQgdGhlIHJ1
bm5pbmcgYW5pbWF0aW9uLCBhbmQgcXVldWUgdGhlIG5leHQgb25lLgorLy8KKy0gKHZvaWQpYW5p
bWF0ZUZyb21SZWN0OihOU1JlY3Qpc3RhcnRSZWN0IHRvUmVjdDooTlNSZWN0KWVuZFJlY3Qgd2l0
aFN1YkFuaW1hdGlvbjooTlNBbmltYXRpb24gKilzdWJBbmltYXRpb24gY29udHJvbGxlckFjdGlv
bjooU0VMKWNvbnRyb2xsZXJBY3Rpb24KK3sKKyAgICBfY29udHJvbGxlckFjdGlvbk9uQW5pbWF0
aW9uRW5kID0gY29udHJvbGxlckFjdGlvbjsKKworICAgIEJPT0wgd2FzQW5pbWF0aW5nID0gTk87
CisgICAgaWYgKF9mdWxsc2NyZWVuQW5pbWF0aW9uKSB7CisgICAgICAgIHdhc0FuaW1hdGluZyA9
IFlFUzsKKworICAgICAgICAvLyBJbnRlcnJ1cHQgYW55IHJ1bm5pbmcgYW5pbWF0aW9uLgorICAg
ICAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc3RvcEFuaW1hdGlvbl07CisKKyAgICAgICAgLy8g
U2F2ZSB0aGUgY3VycmVudCByZWN0IHRvIGVuc3VyZSBhIHNtb290aCB0cmFuc2l0aW9uLgorICAg
ICAgICBzdGFydFJlY3QgPSBbX2Z1bGxzY3JlZW5BbmltYXRpb24gY3VycmVudEZyYW1lXTsKKyAg
ICAgICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHJlbGVhc2VdOworICAgICAgICBfZnVsbHNjcmVl
bkFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisgICAgCisgICAgaWYgKE5TSXNFbXB0eVJlY3Qoc3Rh
cnRSZWN0KSB8fCBOU0lzRW1wdHlSZWN0KGVuZFJlY3QpKSB7CisgICAgICAgIC8vIEZha2VseSBl
bmQgdGhlIHN1YmFuaW1hdGlvbi4KKyAgICAgICAgW3N1YkFuaW1hdGlvbiBzZXRDdXJyZW50UHJv
Z3Jlc3M6MV07CisgICAgICAgIC8vIEFuZCByZW1vdmUgdGhlIHdlYWsgbGluayB0byB0aGUgd2lu
ZG93LgorICAgICAgICBbc3ViQW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOworCisgICAgICAgIFtz
ZWxmIHNldEZyYW1lOmVuZFJlY3QgZGlzcGxheTpOT107CisgICAgICAgIFtzZWxmIG1ha2VLZXlB
bmRPcmRlckZyb250OnNlbGZdOworICAgICAgICBbc2VsZiBhbmltYXRlZFJlc2l6ZURpZEVuZF07
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXdhc0FuaW1hdGluZykgeworICAg
ICAgICAvLyBXZSdsbCBkb3duc2NhbGUgdGhlIHdpbmRvdyBkdXJpbmcgdGhlIGFuaW1hdGlvbiBi
YXNlZCBvbiB0aGUgaGlnaGVyIHJlc29sdXRpb24gcmVjdAorICAgICAgICBCT09MIGhpZ2hlclJl
c29sdXRpb25Jc0VuZFJlY3QgPSBzdGFydFJlY3Quc2l6ZS53aWR0aCA8IGVuZFJlY3Quc2l6ZS53
aWR0aCAmJiBzdGFydFJlY3Quc2l6ZS5oZWlnaHQgPCBlbmRSZWN0LnNpemUuaGVpZ2h0OworICAg
ICAgICBbc2VsZiBzZXRGcmFtZTpoaWdoZXJSZXNvbHV0aW9uSXNFbmRSZWN0ID8gZW5kUmVjdCA6
IHN0YXJ0UmVjdCBkaXNwbGF5Ok5PXTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFfZnVsbHNj
cmVlbkFuaW1hdGlvbik7CisgICAgX2Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW1dlYldpbmRvd1Nj
YWxlQW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aEhpbnRlZER1cmF0aW9uOjAuMiB3aW5kb3c6c2Vs
ZiBpbml0YWxGcmFtZTpzdGFydFJlY3QgZmluYWxGcmFtZTplbmRSZWN0XTsKKyAgICBbX2Z1bGxz
Y3JlZW5BbmltYXRpb24gc2V0U3ViQW5pbWF0aW9uOnN1YkFuaW1hdGlvbl07CisgICAgW19mdWxs
c2NyZWVuQW5pbWF0aW9uIHNldERlbGVnYXRlOnNlbGZdOworICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgYW5pbWF0aW9uIGhhcyBzY2FsZWQgdGhlIHdpbmRvdyBiZWZvcmUgc2hvd2luZyBpdC4K
KyAgICBbX2Z1bGxzY3JlZW5BbmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtz
ZWxmIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOworCisgICAgW19mdWxsc2NyZWVuQW5pbWF0
aW9uIHN0YXJ0QW5pbWF0aW9uXTsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5p
bWF0aW9uICopYW5pbWF0aW9uCit7CisgICAgaWYgKCFbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkg
eworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKGFu
aW1hdGlvbkRpZEVuZDopIHdpdGhPYmplY3Q6YW5pbWF0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhbmltYXRpb24gIT0gX2Z1bGxzY3JlZW5B
bmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBhbmltYXRpb24gaXMgbm90
IHJlYWxseSBvdmVyIGFuZCB3YXMgaW50ZXJydXB0ZWQKKyAgICAvLyBEb24ndCBzZW5kIGNvbXBs
ZXRpb24gZXZlbnRzLgorICAgIGlmIChbYW5pbWF0aW9uIGN1cnJlbnRQcm9ncmVzc10gPCAxLjAp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFuaW1hdGlvbiAoYW5kIHN1
YmFuaW1hdGlvbikgZG9uJ3Qga2VlcAorICAgIC8vIHRoZSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUg
d2luZG93IGl2YXIgdGhhdCBtYXkgYmUgZGVzdHJveWVkIGZyb20KKyAgICAvLyBub3cgb24uCisg
ICAgW19mdWxsc2NyZWVuQW5pbWF0aW9uIHNldFdpbmRvdzpuaWxdOworCisgICAgW19mdWxsc2Ny
ZWVuQW5pbWF0aW9uIGF1dG9yZWxlYXNlXTsKKyAgICBfZnVsbHNjcmVlbkFuaW1hdGlvbiA9IG5p
bDsKKworICAgIFtzZWxmIGFuaW1hdGVkUmVzaXplRGlkRW5kXTsKK30KKworLSAodm9pZCltb3Vz
ZU1vdmVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0odGhlRXZlbnQp
OworICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSBmYWRlSFVESW5dOworfQorCitAZW5kCisK
KyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0K
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5tbQkocmV2aXNpb24gMjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw5ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKFZJREVP
KSAmJiBQTEFURk9STShNQUMpCiAKICNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIuaCIKIApAQCAtNTAsOCArNDgsNyBAQCBTT0ZUX0xJTktfRlJBTUVXT1JLKEFWRm91bmRhdGlv
bikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiAKIHVzaW5n
IFdlYkNvcmU6OlBsYXRmb3JtTWVkaWE7Ci1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbldp
bmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+Ci17CitAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbldpbmRvdyA6IE5TV2luZG93PE5TQW5pbWF0aW9uRGVsZWdhdGU+IHsKICAg
ICBTRUwgX2NvbnRyb2xsZXJBY3Rpb25PbkFuaW1hdGlvbkVuZDsKICAgICBXZWJXaW5kb3dTY2Fs
ZUFuaW1hdGlvbiAqX2Z1bGxzY3JlZW5BbmltYXRpb247IC8vIChyZXRhaW4pCiB9CkBAIC0yMTAs
MTAgKzIwNywxMCBAQCAtICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05vCiAg
ICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBhdmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3JlZW4gc2Ny
ZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNlPyBJRkYgc28sIAogICAgIC8vIHRoZW4gZXhpdCBmdWxs
c2NyZWVuIG1vZGUuICAgIAogICAgIGlmIChmdWxsc2NyZWVuV2luZG93LnNjcmVlbiA9PSBbTlNT
Y3JlZW4gc2NyZWVuc11bMF0gJiYgZnVsbHNjcmVlbldpbmRvdy5vbkFjdGl2ZVNwYWNlKQotICAg
ICAgICAgW3NlbGYgcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107CisgICAg
ICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246Tk9dOwogfQotICAg
ICAgICAgCi0gICAgICAgICAKKworCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBFeHBvc2VkIEludGVy
ZmFjZQogCkBAIC0zMzIsNyArMzI5LDcgQEAgLSAodm9pZCl1cGRhdGVNZW51QW5kRG9ja0ZvckZ1
bGxzY3JlZW4KICAgICAgICAgaWYgKFtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDow
XSA9PSBmdWxsc2NyZWVuU2NyZWVuKQogICAgICAgICAgICAgb3B0aW9ucyB8PSAoTlNBcHBsaWNh
dGlvblByZXNlbnRhdGlvbkF1dG9IaWRlTWVudUJhciB8IE5TQXBwbGljYXRpb25QcmVzZW50YXRp
b25BdXRvSGlkZURvY2spOwogICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzY3JlZW4g
Y29udGFpbnMgdGhlIGRvY2sgYnkgY29tcGFyaW5nIHRoZSBzY3JlZW4ncyBmcmFtZSB0byBpdHMK
LSAgICAgICAgLy8gdmlzaWJsZUZyYW1lOyBpZiBhIGRvY2sgaXMgcHJlc2VudCwgdGhlIHZpc2li
bGVGcmFtZSB3aWxsIGRpZmZlci4gIElmIHRoZSBjdXJyZW50IHNjcmVlbgorICAgICAgICAvLyB2
aXNpYmxlRnJhbWU7IGlmIGEgZG9jayBpcyBwcmVzZW50LCB0aGUgdmlzaWJsZUZyYW1lIHdpbGwg
ZGlmZmVyLiBJZiB0aGUgY3VycmVudCBzY3JlZW4KICAgICAgICAgLy8gY29udGFpbnMgdGhlIGRv
Y2ssIGhpZGUgaXQuCiAgICAgICAgIGVsc2UgaWYgKCFOU0VxdWFsUmVjdHMoW2Z1bGxzY3JlZW5T
Y3JlZW4gZnJhbWVdLCBbZnVsbHNjcmVlblNjcmVlbiB2aXNpYmxlRnJhbWVdKSkKICAgICAgICAg
ICAgIG9wdGlvbnMgfD0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jazsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lv
biAyMjgyNzgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxz
Y3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmg6MjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoVklE
RU8pCisKKyNpbXBvcnQgPEFwcEtpdC9OU0J1dHRvbi5oPgorI2ltcG9ydCA8QXBwS2l0L05TQ29u
dHJvbC5oPgorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEZpZWxkLmg+CisjaW1wb3J0IDxBcHBLaXQv
TlNUcmFja2luZ0FyZWEuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1dpbmRvdy5oPgorI2ltcG9ydCA8
QXBwS2l0L05TV2luZG93Q29udHJvbGxlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBIVE1MVmlkZW9FbGVtZW50OworfQorCitAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlckRlbGVnYXRlOworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVl
bkhVRFdpbmRvd0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKK3sKKyAgICBpZCA8V2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7Cisg
ICAgTlNUaW1lciAqX3RpbWVsaW5lVXBkYXRlVGltZXI7CisgICAgTlNUcmFja2luZ0FyZWEgKl9h
cmVhOworICAgIEJPT0wgX21vdXNlSXNJbkhVRDsKKyAgICBCT09MIF9pc0VuZGluZ0Z1bGxzY3Jl
ZW47CisgICAgQk9PTCBfaXNTY3J1YmJpbmc7CisKKyAgICBOU0NvbnRyb2wgKl90aW1lbGluZTsK
KyAgICBOU1RleHRGaWVsZCAqX3JlbWFpbmluZ1RpbWVUZXh0OworICAgIE5TVGV4dEZpZWxkICpf
ZWxhcHNlZFRpbWVUZXh0OworICAgIE5TQ29udHJvbCAqX3ZvbHVtZVNsaWRlcjsKKyAgICBOU0J1
dHRvbiAqX3BsYXlCdXR0b247Cit9CisKKy0gKGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlOworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQg
PFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7
CistICh2b2lkKWZhZGVXaW5kb3dJbjsKKy0gKHZvaWQpZmFkZVdpbmRvd091dDsKKy0gKHZvaWQp
Y2xvc2VXaW5kb3c7CistICh2b2lkKXVwZGF0ZVJhdGU7CisKK0BlbmQKKworQHByb3RvY29sIFdl
YlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Cist
ICh2b2lkKXJlcXVlc3RFeGl0RnVsbHNjcmVlbjsKKy0gKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQqKXZpZGVvRWxlbWVudDsKK0BlbmQKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIwor
bmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMjgyNzgpCisrKyBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNyBAQCBjbGFzcyBIVE1M
VmlkZW9FbGVtZW50OwogCiBAcHJvdG9jb2wgV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29u
dHJvbGxlckRlbGVnYXRlOwogCi1AaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRv
d0NvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIKLXsKK0BpbnRlcmZhY2UgV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlciA6IE5TV2luZG93Q29udHJvbGxlciB7CiAgICAg
aWQgPFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVn
YXRlOwogICAgIE5TVGltZXIgKl90aW1lbGluZVVwZGF0ZVRpbWVyOwogICAgIE5TVHJhY2tpbmdB
cmVhICpfYXJlYTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlk
ZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDIyODI3OCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW06MjI4Mjc4KQorKysg
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5k
b3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSFVE
V2luZG93Q29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW1wb3J0ICJGbG9h
dENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2lt
cG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvbWFj
L1FUS2l0U1BJLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKworU09GVF9MSU5LX0ZS
QU1FV09SSyhRVEtpdCkKKworU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVREJhY2tncm91bmRW
aWV3KQorU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVEhVREJ1dHRvbikKK1NPRlRfTElOS19DTEFT
UyhRVEtpdCwgUVRIVURTbGlkZXIpCitTT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUSFVEVGltZWxp
bmUpCisKKyNkZWZpbmUgUVRIVURCYWNrZ3JvdW5kVmlldyBnZXRRVEhVREJhY2tncm91bmRWaWV3
Q2xhc3MoKQorI2RlZmluZSBRVEhVREJ1dHRvbiBnZXRRVEhVREJ1dHRvbkNsYXNzKCkKKyNkZWZp
bmUgUVRIVURTbGlkZXIgZ2V0UVRIVURTbGlkZXJDbGFzcygpCisjZGVmaW5lIFFUSFVEVGltZWxp
bmUgZ2V0UVRIVURUaW1lbGluZUNsYXNzKCkKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gY2xhc3MgTWVkaWFVSUNvbnRyb2wgeworICAgIFRpbWVsaW5lLAorICAgIFNsaWRlciwKKyAg
ICBQbGF5UGF1c2VCdXR0b24sCisgICAgRXhpdEZ1bGxzY3JlZW5CdXR0b24sCisgICAgUmV3aW5k
QnV0dG9uLAorICAgIEZhc3RGb3J3YXJkQnV0dG9uLAorICAgIFZvbHVtZVVwQnV0dG9uLAorICAg
IFZvbHVtZURvd25CdXR0b24sCit9OworCit9CisKK3VzaW5nIFdlYkNvcmU6Ok1lZGlhVUlDb250
cm9sOwordXNpbmcgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDsKK3VzaW5nIFdlYkNvcmU6Om5h
cnJvd1ByZWNpc2lvblRvRmxvYXQ7CitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIgKFByaXZhdGUpIDxOU1dpbmRvd0RlbGVnYXRlPgorCistICh2b2lkKXVw
ZGF0ZVRpbWU7CistICh2b2lkKXRpbWVsaW5lUG9zaXRpb25DaGFuZ2VkOihpZClzZW5kZXI7Cist
IChmbG9hdCljdXJyZW50VGltZTsKKy0gKHZvaWQpc2V0Q3VycmVudFRpbWU6KGZsb2F0KWN1cnJl
bnRUaW1lOworLSAoZG91YmxlKWR1cmF0aW9uOworCistICh2b2lkKXZvbHVtZUNoYW5nZWQ6KGlk
KXNlbmRlcjsKKy0gKGZsb2F0KW1heFZvbHVtZTsKKy0gKGZsb2F0KXZvbHVtZTsKKy0gKHZvaWQp
c2V0Vm9sdW1lOihmbG9hdCl2b2x1bWU7CistICh2b2lkKWRlY3JlbWVudFZvbHVtZTsKKy0gKHZv
aWQpaW5jcmVtZW50Vm9sdW1lOworCistICh2b2lkKXVwZGF0ZVBsYXlCdXR0b247CistICh2b2lk
KXRvZ2dsZVBsYXlpbmc6KGlkKXNlbmRlcjsKKy0gKEJPT0wpcGxheWluZzsKKy0gKHZvaWQpc2V0
UGxheWluZzooQk9PTClwbGF5aW5nOworCistICh2b2lkKXJld2luZDooaWQpc2VuZGVyOworLSAo
dm9pZClmYXN0Rm9yd2FyZDooaWQpc2VuZGVyOworCistIChOU1N0cmluZyAqKXJlbWFpbmluZ1Rp
bWVUZXh0OworLSAoTlNTdHJpbmcgKillbGFwc2VkVGltZVRleHQ7CisKKy0gKHZvaWQpZXhpdEZ1
bGxzY3JlZW46KGlkKXNlbmRlcjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3cgOiBOU1dpbmRvdworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93CisKKy0gKGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5TUmVjdClj
b250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2lu
Z1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcKK3sKKyAgICBVTlVTRURf
UEFSQU0oYVN0eWxlKTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Y29u
dGVudFJlY3Qgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOmJ1
ZmZlcmluZ1R5cGUgZGVmZXI6ZmxhZ107CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgW3NlbGYgc2V0T3BhcXVlOk5PXTsKKyAgICBbc2VsZiBzZXRCYWNrZ3JvdW5k
Q29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFtzZWxmIHNldExldmVsOk5TUG9wVXBN
ZW51V2luZG93TGV2ZWxdOworICAgIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllF
U107CisgICAgW3NlbGYgc2V0SWdub3Jlc01vdXNlRXZlbnRzOk5PXTsKKyAgICBbc2VsZiBzZXRN
b3ZhYmxlQnlXaW5kb3dCYWNrZ3JvdW5kOllFU107CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistICh2
b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7CisgICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIGV4aXRGdWxsc2NyZWVuOnNlbGZdOwor
fQorCistICh2b2lkKWNlbnRlcgoreworICAgIE5TUmVjdCBodWRGcmFtZSA9IFtzZWxmIGZyYW1l
XTsKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbW05TU2NyZWVuIG1haW5TY3JlZW5dIGZyYW1l
XTsKKyAgICBbc2VsZiBzZXRGcmFtZVRvcExlZnRQb2ludDpOU01ha2VQb2ludChzY3JlZW5GcmFt
ZS5vcmlnaW4ueCArIChzY3JlZW5GcmFtZS5zaXplLndpZHRoIC0gaHVkRnJhbWUuc2l6ZS53aWR0
aCkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVl
bkZyYW1lLm9yaWdpbi55ICsgKHNjcmVlbkZyYW1lLnNpemUuaGVpZ2h0IC0gaHVkRnJhbWUuc2l6
ZS5oZWlnaHQpIC8gNildOworfQorCistICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAor
eworICAgIFtzdXBlciBrZXlEb3duOmV2ZW50XTsKKyAgICBbW3NlbGYgd2luZG93Q29udHJvbGxl
cl0gZmFkZVdpbmRvd0luXTsKK30KKworLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgorewor
ICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTClwZXJmb3JtS2V5RXF1aXZhbGVudDooTlNFdmVu
dCAqKWV2ZW50Cit7CisgICAgLy8gQmxvY2sgYWxsIGNvbW1hbmQga2V5IGV2ZW50cyB3aGlsZSB0
aGUgZnVsbHNjcmVlbiB3aW5kb3cgaXMgdXAuCisgICAgaWYgKFtldmVudCB0eXBlXSAhPSBOU0V2
ZW50VHlwZUtleURvd24pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoIShbZXZl
bnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnQ29tbWFuZCkpCisgICAgICAg
IHJldHVybiBOTzsKKyAgICByZXR1cm4gWUVTOworfQorCitAZW5kCisKK3N0YXRpYyBjb25zdCBD
R0Zsb2F0IHdpbmRvd0hlaWdodCA9IDU5Oworc3RhdGljIGNvbnN0IENHRmxvYXQgd2luZG93V2lk
dGggPSA0Mzg7CisKK3N0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBIVURXaW5kb3dGYWRlT3V0
RGVsYXkgPSAzOworCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlcgorCistIChpZClpbml0Cit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TTWFr
ZVJlY3QoMCwgMCwgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodCkgc3R5bGVNYXNrOk5TV2luZG93
U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6
Tk9dOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKKyAgICBbd2lu
ZG93IHNldERlbGVnYXRlOnNlbGZdOworICAgIFt3aW5kb3cgcmVsZWFzZV07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIFtzZWxmIHdpbmRvd0RpZExvYWRdOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV90aW1l
bGluZVVwZGF0ZVRpbWVyKTsKKyAgICBBU1NFUlQoIV9hcmVhKTsKKyAgICBBU1NFUlQoIV9pc1Nj
cnViYmluZyk7CisgICAgW190aW1lbGluZSByZWxlYXNlXTsKKyAgICBbX3JlbWFpbmluZ1RpbWVU
ZXh0IHJlbGVhc2VdOworICAgIFtfZWxhcHNlZFRpbWVUZXh0IHJlbGVhc2VdOworICAgIFtfdm9s
dW1lU2xpZGVyIHJlbGVhc2VdOworICAgIFtfcGxheUJ1dHRvbiByZWxlYXNlXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0QXJlYTooTlNUcmFja2luZ0FyZWEgKilhcmVh
Cit7CisgICAgaWYgKGFyZWEgPT0gX2FyZWEpCisgICAgICAgIHJldHVybjsKKyAgICBbX2FyZWEg
cmVsZWFzZV07CisgICAgX2FyZWEgPSBbYXJlYSByZXRhaW5dOworfQorCistICh2b2lkKWtleURv
d246KE5TRXZlbnQgKilldmVudAoreworICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnMgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKKyAgICBpZiAo
W2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEpIHsKKyAgICAgICAgc3dp
dGNoIChbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsK
KyAgICAgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBsYXlp
bmc6bmlsXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjYXNlIE5TVXBB
cnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFn
c10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQorICAgICAgICAgICAgICAgICAgICBbc2Vs
ZiBzZXRWb2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBbc2VsZiBpbmNyZW1lbnRWb2x1bWVdOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlvbktleToKKyAgICAg
ICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxh
Z09wdGlvbikKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0Vm9sdW1lOjBdOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGVjcmVtZW50Vm9sdW1l
XTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgW3N1cGVyIGtleURvd246
ZXZlbnRdOworfQorCistIChpZCA8V2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxl
ckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZGVsZWdhdGU7Cit9CisKKy0gKHZv
aWQpc2V0RGVsZWdhdGU6KGlkIDxXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVy
RGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0g
KHZvaWQpc2NoZWR1bGVUaW1lVXBkYXRlCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3Vz
UGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih1bnNjaGVk
dWxlVGltZVVwZGF0ZSkgb2JqZWN0OnNlbGZdOworCisgICAgLy8gRmlyc3QsIHVwZGF0ZSByaWdo
dCBhd2F5LCB0aGVuIHNjaGVkdWxlIGZ1dHVyZSB1cGRhdGUKKyAgICBbc2VsZiB1cGRhdGVUaW1l
XTsKKyAgICBbc2VsZiB1cGRhdGVQbGF5QnV0dG9uXTsKKworICAgIFtfdGltZWxpbmVVcGRhdGVU
aW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3RpbWVsaW5lVXBkYXRlVGltZXIgcmVsZWFzZV07CisK
KyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjcmVhdGVzIGEgcmV0YWluIGN5Y2xlIGJldHdlZW4gdGhl
IHdpbmRvdyBhbmQgdXMuCisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIgPSBbW05TVGltZXIgdGlt
ZXJXaXRoVGltZUludGVydmFsOjAuMjUgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVw
ZGF0ZVRpbWUpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10gcmV0YWluXTsKKyAgICBbW05TUnVu
TG9vcCBjdXJyZW50UnVuTG9vcF0gYWRkVGltZXI6X3RpbWVsaW5lVXBkYXRlVGltZXIgZm9yTW9k
ZTpOU1J1bkxvb3BDb21tb25Nb2Rlc107Cit9CisKKy0gKHZvaWQpdW5zY2hlZHVsZVRpbWVVcGRh
dGUKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSBvYmplY3Q6
bmlsXTsKKworICAgIFtfdGltZWxpbmVVcGRhdGVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBbX3Rp
bWVsaW5lVXBkYXRlVGltZXIgcmVsZWFzZV07CisgICAgX3RpbWVsaW5lVXBkYXRlVGltZXIgPSBu
aWw7Cit9CisKKy0gKHZvaWQpZmFkZVdpbmRvd0luCit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9
IFtzZWxmIHdpbmRvd107CisgICAgaWYgKCFbd2luZG93IGlzVmlzaWJsZV0pCisgICAgICAgIFt3
aW5kb3cgc2V0QWxwaGFWYWx1ZTowXTsKKworICAgIFt3aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJv
bnQ6c2VsZl07CisgICAgW1t3aW5kb3cgYW5pbWF0b3JdIHNldEFscGhhVmFsdWU6MV07CisgICAg
W3NlbGYgc2NoZWR1bGVUaW1lVXBkYXRlXTsKKworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91
c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZmFkZVdp
bmRvd091dCkgb2JqZWN0Om5pbF07CisgICAgaWYgKCFfbW91c2VJc0luSFVEICYmIFtzZWxmIHBs
YXlpbmddKSAgIC8vIERvbid0IGZhZGUgb3V0IHdoZW4gcGF1c2VkLgorICAgICAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhPYmplY3Q6bmlsIGFm
dGVyRGVsYXk6SFVEV2luZG93RmFkZU91dERlbGF5XTsKK30KKworLSAodm9pZClmYWRlV2luZG93
T3V0Cit7CisgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworICAg
IFtbW3NlbGYgd2luZG93XSBhbmltYXRvcl0gc2V0QWxwaGFWYWx1ZTowXTsKKyAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHVuc2NoZWR1bGVUaW1lVXBkYXRlKSB3aXRoT2JqZWN0
Om5pbCBhZnRlckRlbGF5OjFdOworfQorCistICh2b2lkKWNsb3NlV2luZG93Cit7CisgICAgW05T
T2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVj
dG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKKyAgICBbc2VsZiB1bnNj
aGVkdWxlVGltZVVwZGF0ZV07CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107
CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIHJlbW92ZVRyYWNraW5nQXJlYTpfYXJlYV07Cisg
ICAgW3NlbGYgc2V0QXJlYTpuaWxdOworICAgIFt3aW5kb3cgY2xvc2VdOworICAgIFt3aW5kb3cg
c2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbc2VsZiBzZXRXaW5kb3c6bmlsXTsKK30KKworc3RhdGlj
IE5TQ29udHJvbCAqY3JlYXRlTWVkaWFVSUNvbnRyb2woTWVkaWFVSUNvbnRyb2wgY29udHJvbFR5
cGUpCit7CisgICAgc3dpdGNoIChjb250cm9sVHlwZSkgeworICAgIGNhc2UgTWVkaWFVSUNvbnRy
b2w6OlRpbWVsaW5lOiB7CisgICAgICAgIE5TU2xpZGVyICpzbGlkZXIgPSBbW1FUSFVEVGltZWxp
bmUgYWxsb2NdIGluaXRdOworICAgICAgICBbW3NsaWRlciBjZWxsXSBzZXRDb250aW51b3VzOllF
U107CisgICAgICAgIHJldHVybiBzbGlkZXI7CisgICAgfQorICAgIGNhc2UgTWVkaWFVSUNvbnRy
b2w6OlNsaWRlcjogeworICAgICAgICBOU0J1dHRvbiAqc2xpZGVyID0gW1tRVEhVRFNsaWRlciBh
bGxvY10gaW5pdF07CisgICAgICAgIFtbc2xpZGVyIGNlbGxdIHNldENvbnRpbnVvdXM6WUVTXTsK
KyAgICAgICAgcmV0dXJuIHNsaWRlcjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6
UGxheVBhdXNlQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0
dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNQbGF5VGVtcGxhdGUiXV07CisgICAgICAgIFtidXR0b24gc2V0QWx0ZXJuYXRl
SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TUGF1c2VRVFByaXZhdGVUZW1wbGF0ZSJdXTsK
KworICAgICAgICBbW2J1dHRvbiBjZWxsXSBzZXRTaG93c1N0YXRlQnk6TlNDb250ZW50c0NlbGxN
YXNrXTsKKyAgICAgICAgW2J1dHRvbiBzZXRCb3JkZXJlZDpOT107CisgICAgICAgIHJldHVybiBi
dXR0b247CisgICAgfQorICAgIGNhc2UgTWVkaWFVSUNvbnRyb2w6OkV4aXRGdWxsc2NyZWVuQnV0
dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0dG9uIGFsbG9jXSBp
bml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFnZU5hbWVkOkAiTlNF
eGl0RnVsbFNjcmVlblRlbXBsYXRlIl1dOworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5P
XTsKKyAgICAgICAgcmV0dXJuIGJ1dHRvbjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJv
bDo6UmV3aW5kQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBbW1FUSFVEQnV0
dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJbWFnZSBpbWFn
ZU5hbWVkOkAiTlNSZXdpbmRUZW1wbGF0ZSJdXTsKKyAgICAgICAgW2J1dHRvbiBzZXRCb3JkZXJl
ZDpOT107CisgICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAgIGNhc2UgTWVkaWFVSUNv
bnRyb2w6OkZhc3RGb3J3YXJkQnV0dG9uOiB7CisgICAgICAgIE5TQnV0dG9uICpidXR0b24gPSBb
W1FUSFVEQnV0dG9uIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbiBzZXRJbWFnZTpbTlNJ
bWFnZSBpbWFnZU5hbWVkOkAiTlNGYXN0Rm9yd2FyZFRlbXBsYXRlIl1dOworICAgICAgICBbYnV0
dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0dXJuIGJ1dHRvbjsKKyAgICB9CisgICAg
Y2FzZSBNZWRpYVVJQ29udHJvbDo6Vm9sdW1lVXBCdXR0b246IHsKKyAgICAgICAgTlNCdXR0b24g
KmJ1dHRvbiA9IFtbUVRIVURCdXR0b24gYWxsb2NdIGluaXRdOworICAgICAgICBbYnV0dG9uIHNl
dEltYWdlOltOU0ltYWdlIGltYWdlTmFtZWQ6QCJOU0F1ZGlvT3V0cHV0Vm9sdW1lSGlnaFRlbXBs
YXRlIl1dOworICAgICAgICBbYnV0dG9uIHNldEJvcmRlcmVkOk5PXTsKKyAgICAgICAgcmV0dXJu
IGJ1dHRvbjsKKyAgICB9CisgICAgY2FzZSBNZWRpYVVJQ29udHJvbDo6Vm9sdW1lRG93bkJ1dHRv
bjogeworICAgICAgICBOU0J1dHRvbiAqYnV0dG9uID0gW1tRVEhVREJ1dHRvbiBhbGxvY10gaW5p
dF07CisgICAgICAgIFtidXR0b24gc2V0SW1hZ2U6W05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQXVk
aW9PdXRwdXRWb2x1bWVMb3dUZW1wbGF0ZSJdXTsKKyAgICAgICAgW2J1dHRvbiBzZXRCb3JkZXJl
ZDpOT107CisgICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyBOU0NvbnRyb2wg
KmNyZWF0ZUNvbnRyb2xXaXRoTWVkaWFVSUNvbnRyb2xUeXBlKE1lZGlhVUlDb250cm9sIGNvbnRy
b2xUeXBlLCBOU1JlY3QgZnJhbWUpCit7CisgICAgTlNDb250cm9sICpjb250cm9sID0gY3JlYXRl
TWVkaWFVSUNvbnRyb2woY29udHJvbFR5cGUpOworICAgIGNvbnRyb2wuZnJhbWUgPSBmcmFtZTsK
KyAgICByZXR1cm4gY29udHJvbDsKK30KKworc3RhdGljIE5TVGV4dEZpZWxkICpjcmVhdGVUaW1l
VGV4dEZpZWxkKE5TUmVjdCBmcmFtZSkKK3sKKyAgICBOU1RleHRGaWVsZCAqdGV4dEZpZWxkID0g
W1tOU1RleHRGaWVsZCBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV07CisgICAgW3RleHRGaWVs
ZCBzZXRUZXh0Q29sb3I6W05TQ29sb3Igd2hpdGVDb2xvcl1dOworICAgIFt0ZXh0RmllbGQgc2V0
Qm9yZGVyZWQ6Tk9dOworICAgIFt0ZXh0RmllbGQgc2V0Rm9udDpbTlNGb250IGJvbGRTeXN0ZW1G
b250T2ZTaXplOjEwXV07CisgICAgW3RleHRGaWVsZCBzZXREcmF3c0JhY2tncm91bmQ6Tk9dOwor
ICAgIFt0ZXh0RmllbGQgc2V0QmV6ZWxlZDpOT107CisgICAgW3RleHRGaWVsZCBzZXRFZGl0YWJs
ZTpOT107CisgICAgW3RleHRGaWVsZCBzZXRTZWxlY3RhYmxlOk5PXTsKKyAgICByZXR1cm4gdGV4
dEZpZWxkOworfQorCitzdGF0aWMgTlNWaWV3ICpjcmVhdGVNZWRpYVVJQmFja2dyb3VuZFZpZXco
KQoreworICAgIGlkIHZpZXcgPSBbW1FUSFVEQmFja2dyb3VuZFZpZXcgYWxsb2NdIGluaXRdOwor
CisgICAgY29uc3QgQ0dGbG9hdCBxdWlja1RpbWVQbGF5ZXJIVURIZWlnaHQgPSA1OTsKKyAgICBj
b25zdCBDR0Zsb2F0IHF1aWNrVGltZVBsYXllckhVRENvbnRlbnRCb3JkZXJQb3NpdGlvbiA9IDM4
OworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgW3ZpZXcgc2V0Q29u
dGVudEJvcmRlclBvc2l0aW9uOnF1aWNrVGltZVBsYXllckhVRENvbnRlbnRCb3JkZXJQb3NpdGlv
biAvIHF1aWNrVGltZVBsYXllckhVREhlaWdodF07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCisKKyAgICByZXR1cm4gdmlldzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRMb2FkCit7Cisg
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgaG9yaXpvbnRhbE1hcmdpbiA9IDEwOworICAgIHN0YXRp
YyBjb25zdCBDR0Zsb2F0IHBsYXlCdXR0b25XaWR0aCA9IDQxOworICAgIHN0YXRpYyBjb25zdCBD
R0Zsb2F0IHBsYXlCdXR0b25IZWlnaHQgPSAzNTsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBw
bGF5QnV0dG9uVG9wTWFyZ2luID0gNDsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVT
bGlkZXJXaWR0aCA9IDUwOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZVNsaWRlckhl
aWdodCA9IDEzOworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IHZvbHVtZUJ1dHRvbldpZHRoID0g
MTg7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lQnV0dG9uSGVpZ2h0ID0gMTY7Cisg
ICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdm9sdW1lVXBCdXR0b25MZWZ0TWFyZ2luID0gNDsKKyAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB2b2x1bWVDb250cm9sc1RvcE1hcmdpbiA9IDEzOworICAg
IHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9uV2lkdGggPSAyNTsKKyAg
ICBzdGF0aWMgY29uc3QgQ0dGbG9hdCBleGl0RnVsbHNjcmVlbkJ1dHRvbkhlaWdodCA9IDIxOwor
ICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0IGV4aXRGdWxsc2NyZWVuQnV0dG9uVG9wTWFyZ2luID0g
MTE7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZWxpbmVXaWR0aCA9IDMxNTsKKyAgICBz
dGF0aWMgY29uc3QgQ0dGbG9hdCB0aW1lbGluZUhlaWdodCA9IDE0OworICAgIHN0YXRpYyBjb25z
dCBDR0Zsb2F0IHRpbWVsaW5lQm90dG9tTWFyZ2luID0gNzsKKyAgICBzdGF0aWMgY29uc3QgQ0dG
bG9hdCB0aW1lVGV4dEZpZWxkV2lkdGggPSA1NDsKKyAgICBzdGF0aWMgY29uc3QgQ0dGbG9hdCB0
aW1lVGV4dEZpZWxkSGVpZ2h0ID0gMTM7CisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgdGltZVRl
eHRGaWVsZEhvcml6b250YWxNYXJnaW4gPSA3OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107CisgICAgQVNTRVJUKHdpbmRvdyk7CisKKyAgICBOU1ZpZXcgKmJhY2tncm91
bmQgPSBjcmVhdGVNZWRpYVVJQmFja2dyb3VuZFZpZXcoKTsKKworICAgIFt3aW5kb3cgc2V0Q29u
dGVudFZpZXc6YmFja2dyb3VuZF07CisgICAgX2FyZWEgPSBbW05TVHJhY2tpbmdBcmVhIGFsbG9j
XSBpbml0V2l0aFJlY3Q6W2JhY2tncm91bmQgYm91bmRzXSBvcHRpb25zOk5TVHJhY2tpbmdNb3Vz
ZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nQWN0aXZlQWx3YXlzIG93bmVyOnNlbGYgdXNl
ckluZm86bmlsXTsKKyAgICBbYmFja2dyb3VuZCBhZGRUcmFja2luZ0FyZWE6X2FyZWFdOworICAg
IFtiYWNrZ3JvdW5kIHJlbGVhc2VdOyAgICAKKworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBb
d2luZG93IGNvbnRlbnRWaWV3XTsKKworICAgIENHRmxvYXQgY2VudGVyID0gQ0dGbG9vcigod2lu
ZG93V2lkdGggLSBwbGF5QnV0dG9uV2lkdGgpIC8gMik7CisgICAgX3BsYXlCdXR0b24gPSAoTlNC
dXR0b24gKiljcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlwZShNZWRpYVVJQ29udHJv
bDo6UGxheVBhdXNlQnV0dG9uLCBOU01ha2VSZWN0KGNlbnRlciwgd2luZG93SGVpZ2h0IC0gcGxh
eUJ1dHRvblRvcE1hcmdpbiAtIHBsYXlCdXR0b25IZWlnaHQsIHBsYXlCdXR0b25XaWR0aCwgcGxh
eUJ1dHRvbkhlaWdodCkpOworICAgIEFTU0VSVChbX3BsYXlCdXR0b24gaXNLaW5kT2ZDbGFzczpb
TlNCdXR0b24gY2xhc3NdXSk7CisgICAgW19wbGF5QnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAg
ICBbX3BsYXlCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3Rvcih0b2dnbGVQbGF5aW5nOildOworICAg
IFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9wbGF5QnV0dG9uXTsKKworICAgIENHRmxvYXQgY2xv
c2VUb1JpZ2h0ID0gd2luZG93V2lkdGggLSBob3Jpem9udGFsTWFyZ2luIC0gZXhpdEZ1bGxzY3Jl
ZW5CdXR0b25XaWR0aDsKKyAgICBOU0NvbnRyb2wgKmV4aXRGdWxsc2NyZWVuQnV0dG9uID0gY3Jl
YXRlQ29udHJvbFdpdGhNZWRpYVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OkV4aXRGdWxs
c2NyZWVuQnV0dG9uLCBOU01ha2VSZWN0KGNsb3NlVG9SaWdodCwgd2luZG93SGVpZ2h0IC0gZXhp
dEZ1bGxzY3JlZW5CdXR0b25Ub3BNYXJnaW4gLSBleGl0RnVsbHNjcmVlbkJ1dHRvbkhlaWdodCwg
ZXhpdEZ1bGxzY3JlZW5CdXR0b25XaWR0aCwgZXhpdEZ1bGxzY3JlZW5CdXR0b25IZWlnaHQpKTsK
KyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihleGl0RnVsbHNj
cmVlbjopXTsKKyAgICBbZXhpdEZ1bGxzY3JlZW5CdXR0b24gc2V0VGFyZ2V0OnNlbGZdOworICAg
IFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OmV4aXRGdWxsc2NyZWVuQnV0dG9uXTsKKyAgICBbZXhp
dEZ1bGxzY3JlZW5CdXR0b24gcmVsZWFzZV07CisgICAgCisgICAgQ0dGbG9hdCB2b2x1bWVDb250
cm9sc0JvdHRvbSA9IHdpbmRvd0hlaWdodCAtIHZvbHVtZUNvbnRyb2xzVG9wTWFyZ2luIC0gdm9s
dW1lQnV0dG9uSGVpZ2h0OworICAgIENHRmxvYXQgbGVmdCA9IGhvcml6b250YWxNYXJnaW47Cisg
ICAgTlNDb250cm9sICp2b2x1bWVEb3duQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRpYVVJ
Q29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OlZvbHVtZURvd25CdXR0b24sIE5TTWFrZVJlY3Qo
bGVmdCwgdm9sdW1lQ29udHJvbHNCb3R0b20sIHZvbHVtZUJ1dHRvbldpZHRoLCB2b2x1bWVCdXR0
b25IZWlnaHQpKTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp2b2x1bWVEb3duQnV0dG9u
XTsKKyAgICBbdm9sdW1lRG93bkJ1dHRvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW3ZvbHVtZURv
d25CdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihzZXRWb2x1bWVUb1plcm86KV07CisgICAgW3Zv
bHVtZURvd25CdXR0b24gcmVsZWFzZV07CisKKyAgICBsZWZ0ICs9IHZvbHVtZUJ1dHRvbldpZHRo
OworICAgIF92b2x1bWVTbGlkZXIgPSBjcmVhdGVDb250cm9sV2l0aE1lZGlhVUlDb250cm9sVHlw
ZShNZWRpYVVJQ29udHJvbDo6U2xpZGVyLCBOU01ha2VSZWN0KGxlZnQsIHZvbHVtZUNvbnRyb2xz
Qm90dG9tICsgQ0dGbG9vcigodm9sdW1lQnV0dG9uSGVpZ2h0IC0gdm9sdW1lU2xpZGVySGVpZ2h0
KSAvIDIpLCB2b2x1bWVTbGlkZXJXaWR0aCwgdm9sdW1lU2xpZGVySGVpZ2h0KSk7CisgICAgW192
b2x1bWVTbGlkZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6W3NlbGYgbWF4
Vm9sdW1lXV0gZm9yS2V5OkAibWF4VmFsdWUiXTsKKyAgICBbX3ZvbHVtZVNsaWRlciBzZXRUYXJn
ZXQ6c2VsZl07CisgICAgW192b2x1bWVTbGlkZXIgc2V0QWN0aW9uOkBzZWxlY3Rvcih2b2x1bWVD
aGFuZ2VkOildOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol92b2x1bWVTbGlkZXJdOwor
CisgICAgbGVmdCArPSB2b2x1bWVTbGlkZXJXaWR0aCArIHZvbHVtZVVwQnV0dG9uTGVmdE1hcmdp
bjsKKyAgICBOU0NvbnRyb2wgKnZvbHVtZVVwQnV0dG9uID0gY3JlYXRlQ29udHJvbFdpdGhNZWRp
YVVJQ29udHJvbFR5cGUoTWVkaWFVSUNvbnRyb2w6OlZvbHVtZVVwQnV0dG9uLCBOU01ha2VSZWN0
KGxlZnQsIHZvbHVtZUNvbnRyb2xzQm90dG9tLCB2b2x1bWVCdXR0b25XaWR0aCwgdm9sdW1lQnV0
dG9uSGVpZ2h0KSk7CisgICAgW3ZvbHVtZVVwQnV0dG9uIHNldFRhcmdldDpzZWxmXTsKKyAgICBb
dm9sdW1lVXBCdXR0b24gc2V0QWN0aW9uOkBzZWxlY3RvcihzZXRWb2x1bWVUb01heGltdW06KV07
CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6dm9sdW1lVXBCdXR0b25dOworICAgIFt2b2x1
bWVVcEJ1dHRvbiByZWxlYXNlXTsKKworICAgIF90aW1lbGluZSA9IGNyZWF0ZU1lZGlhVUlDb250
cm9sKE1lZGlhVUlDb250cm9sOjpUaW1lbGluZSk7CisKKyAgICBbX3RpbWVsaW5lIHNldFRhcmdl
dDpzZWxmXTsKKyAgICBbX3RpbWVsaW5lIHNldEFjdGlvbjpAc2VsZWN0b3IodGltZWxpbmVQb3Np
dGlvbkNoYW5nZWQ6KV07CisgICAgW190aW1lbGluZSBzZXRGcmFtZTpOU01ha2VSZWN0KENHRmxv
b3IoKHdpbmRvd1dpZHRoIC0gdGltZWxpbmVXaWR0aCkgLyAyKSwgdGltZWxpbmVCb3R0b21NYXJn
aW4sIHRpbWVsaW5lV2lkdGgsIHRpbWVsaW5lSGVpZ2h0KV07CisgICAgW2NvbnRlbnRWaWV3IGFk
ZFN1YnZpZXc6X3RpbWVsaW5lXTsKKworICAgIF9lbGFwc2VkVGltZVRleHQgPSBjcmVhdGVUaW1l
VGV4dEZpZWxkKE5TTWFrZVJlY3QodGltZVRleHRGaWVsZEhvcml6b250YWxNYXJnaW4sIHRpbWVs
aW5lQm90dG9tTWFyZ2luLCB0aW1lVGV4dEZpZWxkV2lkdGgsIHRpbWVUZXh0RmllbGRIZWlnaHQp
KTsKKyAgICBbX2VsYXBzZWRUaW1lVGV4dCBzZXRBbGlnbm1lbnQ6TlNUZXh0QWxpZ25tZW50TGVm
dF07CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6X2VsYXBzZWRUaW1lVGV4dF07CisKKyAg
ICBfcmVtYWluaW5nVGltZVRleHQgPSBjcmVhdGVUaW1lVGV4dEZpZWxkKE5TTWFrZVJlY3Qod2lu
ZG93V2lkdGggLSB0aW1lVGV4dEZpZWxkSG9yaXpvbnRhbE1hcmdpbiAtIHRpbWVUZXh0RmllbGRX
aWR0aCwgdGltZWxpbmVCb3R0b21NYXJnaW4sIHRpbWVUZXh0RmllbGRXaWR0aCwgdGltZVRleHRG
aWVsZEhlaWdodCkpOworICAgIFtfcmVtYWluaW5nVGltZVRleHQgc2V0QWxpZ25tZW50Ok5TVGV4
dEFsaWdubWVudFJpZ2h0XTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzpfcmVtYWluaW5n
VGltZVRleHRdOworCisgICAgW3dpbmRvdyByZWNhbGN1bGF0ZUtleVZpZXdMb29wXTsKKyAgICBb
d2luZG93IHNldEluaXRpYWxGaXJzdFJlc3BvbmRlcjpfcGxheUJ1dHRvbl07CisgICAgW3dpbmRv
dyBjZW50ZXJdOworfQorCistICh2b2lkKXVwZGF0ZVZvbHVtZQoreworICAgIFtfdm9sdW1lU2xp
ZGVyIHNldEZsb2F0VmFsdWU6W3NlbGYgdm9sdW1lXV07Cit9CisKKy0gKHZvaWQpdXBkYXRlVGlt
ZQoreworICAgIFtzZWxmIHVwZGF0ZVZvbHVtZV07CisKKyAgICBbX3RpbWVsaW5lIHNldEZsb2F0
VmFsdWU6W3NlbGYgY3VycmVudFRpbWVdXTsKKyAgICBbX3RpbWVsaW5lIHNldFZhbHVlOltOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOltzZWxmIGR1cmF0aW9uXV0gZm9yS2V5OkAibWF4VmFsdWUi
XTsKKworICAgIFtfcmVtYWluaW5nVGltZVRleHQgc2V0U3RyaW5nVmFsdWU6W3NlbGYgcmVtYWlu
aW5nVGltZVRleHRdXTsKKyAgICBbX2VsYXBzZWRUaW1lVGV4dCBzZXRTdHJpbmdWYWx1ZTpbc2Vs
ZiBlbGFwc2VkVGltZVRleHRdXTsKK30KKworLSAodm9pZCllbmRTY3J1YmJpbmcKK3sKKyAgICBB
U1NFUlQoX2lzU2NydWJiaW5nKTsKKyAgICBfaXNTY3J1YmJpbmcgPSBOTzsKKyAgICBpZiAoSFRN
TFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQor
ICAgICAgICB2aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOworfQorCistICh2b2lkKXRpbWVs
aW5lUG9zaXRpb25DaGFuZ2VkOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVy
KTsKKyAgICBbc2VsZiBzZXRDdXJyZW50VGltZTpbX3RpbWVsaW5lIGZsb2F0VmFsdWVdXTsKKyAg
ICBpZiAoIV9pc1NjcnViYmluZykgeworICAgICAgICBfaXNTY3J1YmJpbmcgPSBZRVM7CisgICAg
ICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBbX2RlbGVnYXRlIHZpZGVv
RWxlbWVudF0pCisgICAgICAgICAgICB2aWRlb0VsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Cisg
ICAgICAgIHN0YXRpYyBOU0FycmF5ICplbmRTY3J1YmJpbmdNb2RlcyA9IFtbTlNBcnJheSBhbGxv
Y10gaW5pdFdpdGhPYmplY3RzOk5TRGVmYXVsdFJ1bkxvb3BNb2RlLCBOU01vZGFsUGFuZWxSdW5M
b29wTW9kZSwgbmlsXTsKKyAgICAgICAgLy8gU2NoZWR1bGUgLWVuZFNjcnViYmluZyBmb3Igd2hl
biBsZWF2aW5nIG1vdXNlIHRyYWNraW5nIG1vZGUuCisgICAgICAgIFtbTlNSdW5Mb29wIGN1cnJl
bnRSdW5Mb29wXSBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGVuZFNjcnViYmluZykgdGFyZ2V0
OnNlbGYgYXJndW1lbnQ6bmlsIG9yZGVyOjAgbW9kZXM6ZW5kU2NydWJiaW5nTW9kZXNdOworICAg
IH0KK30KKworLSAoZmxvYXQpY3VycmVudFRpbWUKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB2
aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5jdXJyZW50VGltZSgpIDog
MDsKK30KKworLSAodm9pZClzZXRDdXJyZW50VGltZTooZmxvYXQpY3VycmVudFRpbWUKK3sKKyAg
ICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFtf
ZGVsZWdhdGUgdmlkZW9FbGVtZW50XS0+c2V0Q3VycmVudFRpbWUoY3VycmVudFRpbWUpOworICAg
IFtzZWxmIHVwZGF0ZVRpbWVdOworfQorCistIChkb3VibGUpZHVyYXRpb24KK3sKKyAgICByZXR1
cm4gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5k
dXJhdGlvbigpIDogMDsKK30KKworLSAoZmxvYXQpbWF4Vm9sdW1lCit7CisgICAgLy8gU2V0IHRo
ZSB2b2x1bWUgc2xpZGVyIHJlc29sdXRpb24KKyAgICByZXR1cm4gMTAwOworfQorCistICh2b2lk
KXZvbHVtZUNoYW5nZWQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwor
ICAgIFtzZWxmIHNldFZvbHVtZTpbX3ZvbHVtZVNsaWRlciBmbG9hdFZhbHVlXV07Cit9CisKKy0g
KHZvaWQpc2V0Vm9sdW1lVG9aZXJvOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Vu
ZGVyKTsKKyAgICBbc2VsZiBzZXRWb2x1bWU6MF07Cit9CisKKy0gKHZvaWQpc2V0Vm9sdW1lVG9N
YXhpbXVtOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKKyAgICBbc2Vs
ZiBzZXRWb2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07Cit9CisKKy0gKHZvaWQpZGVjcmVtZW50Vm9s
dW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHJldHVy
bjsKKworICAgIGZsb2F0IHZvbHVtZSA9IFtzZWxmIHZvbHVtZV0gLSAxMDsKKyAgICBbc2VsZiBz
ZXRWb2x1bWU6TUFYKHZvbHVtZSwgMCldOworfQorCistICh2b2lkKWluY3JlbWVudFZvbHVtZQor
eworICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCB2b2x1bWUgPSBbc2VsZiB2b2x1bWVdICsgMTA7CisgICAgW3NlbGYgc2V0Vm9s
dW1lOnN0ZDo6bWluKHZvbHVtZSwgW3NlbGYgbWF4Vm9sdW1lXSldOworfQorCistIChmbG9hdCl2
b2x1bWUKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdID8gW19kZWxlZ2F0
ZSB2aWRlb0VsZW1lbnRdLT52b2x1bWUoKSAqIFtzZWxmIG1heFZvbHVtZV0gOiAwOworfQorCist
ICh2b2lkKXNldFZvbHVtZTooZmxvYXQpdm9sdW1lCit7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZp
ZGVvRWxlbWVudF0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW19kZWxlZ2F0ZSB2aWRlb0Vs
ZW1lbnRdLT5tdXRlZCgpKQorICAgICAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnNldE11
dGVkKGZhbHNlKTsKKyAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnNldFZvbHVtZSh2b2x1
bWUgLyBbc2VsZiBtYXhWb2x1bWVdKTsKKyAgICBbc2VsZiB1cGRhdGVWb2x1bWVdOworfQorCist
ICh2b2lkKXVwZGF0ZVBsYXlCdXR0b24KK3sKKyAgICBbX3BsYXlCdXR0b24gc2V0SW50VmFsdWU6
W3NlbGYgcGxheWluZ11dOworfQorCistICh2b2lkKXVwZGF0ZVJhdGUKK3sKKyAgICBCT09MIHBs
YXlpbmcgPSBbc2VsZiBwbGF5aW5nXTsKKworICAgIC8vIEtlZXAgdGhlIEhVRCB2aXNpYmxlIHdo
ZW4gcGF1c2VkLgorICAgIGlmICghcGxheWluZykKKyAgICAgICAgW3NlbGYgZmFkZVdpbmRvd0lu
XTsKKyAgICBlbHNlIGlmICghX21vdXNlSXNJbkhVRCkgeworICAgICAgICBbTlNPYmplY3QgY2Fu
Y2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKGZhZGVXaW5kb3dPdXQpIG9iamVjdDpuaWxdOworICAgICAgICBbc2VsZiBwZXJmb3JtU2Vs
ZWN0b3I6QHNlbGVjdG9yKGZhZGVXaW5kb3dPdXQpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6
SFVEV2luZG93RmFkZU91dERlbGF5XTsKKyAgICB9CisgICAgW3NlbGYgdXBkYXRlUGxheUJ1dHRv
bl07Cit9CisKKy0gKHZvaWQpdG9nZ2xlUGxheWluZzooaWQpc2VuZGVyCit7CisgICAgVU5VU0VE
X1BBUkFNKHNlbmRlcik7CisgICAgW3NlbGYgc2V0UGxheWluZzohW3NlbGYgcGxheWluZ11dOwor
fQorCistIChCT09MKXBsYXlpbmcKK3sKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1l
bnQgPSBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF07CisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCisg
ICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiAhdmlkZW9FbGVtZW50LT5jYW5QbGF5KCk7
Cit9CisKKy0gKHZvaWQpc2V0UGxheWluZzooQk9PTClwbGF5aW5nCit7CisgICAgSFRNTFZpZGVv
RWxlbWVudCogdmlkZW9FbGVtZW50ID0gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdOworCisgICAg
aWYgKCF2aWRlb0VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwbGF5aW5nKQor
ICAgICAgICB2aWRlb0VsZW1lbnQtPnBsYXkoKTsKKyAgICBlbHNlCisgICAgICAgIHZpZGVvRWxl
bWVudC0+cGF1c2UoKTsKK30KKworc3RhdGljIE5TU3RyaW5nICp0aW1lVG9TdHJpbmcoZG91Ymxl
IHRpbWUpCit7CisgICAgQVNTRVJUX0FSRyh0aW1lLCB0aW1lID49IDApOworCisgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKHRpbWUpKQorICAgICAgICB0aW1lID0gMDsKKworICAgIGludCBzZWNvbmRz
ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGQ6OmFicyh0aW1lKSk7CisgICAgaW50IGhvdXJz
ID0gc2Vjb25kcyAvICg2MCAqIDYwKTsKKyAgICBpbnQgbWludXRlcyA9IChzZWNvbmRzIC8gNjAp
ICUgNjA7CisgICAgc2Vjb25kcyAlPSA2MDsKKworICAgIGlmIChob3VycykKKyAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQ6JTAyZDolMDJkIiwgaG91cnMsIG1p
bnV0ZXMsIHNlY29uZHNdOworCisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJTAyZDolMDJkIiwgbWludXRlcywgc2Vjb25kc107ICAgIAorfQorCistIChOU1N0cmluZyAq
KXJlbWFpbmluZ1RpbWVUZXh0Cit7CisgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50
ID0gW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdOworICAgIGlmICghdmlkZW9FbGVtZW50KQorICAg
ICAgICByZXR1cm4gQCIiOworCisgICAgZG91YmxlIHJlbWFpbmluZ1RpbWUgPSAwOworCisgICAg
aWYgKHN0ZDo6aXNmaW5pdGUodmlkZW9FbGVtZW50LT5kdXJhdGlvbigpKSAmJiBzdGQ6OmlzZmlu
aXRlKHZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSkpCisgICAgICAgIHJlbWFpbmluZ1RpbWUg
PSB2aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkgLSB2aWRlb0VsZW1lbnQtPmN1cnJlbnRUaW1lKCk7
CisKKyAgICByZXR1cm4gW0AiLSIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6dGltZVRvU3RyaW5n
KHJlbWFpbmluZ1RpbWUpXTsKK30KKworLSAoTlNTdHJpbmcgKillbGFwc2VkVGltZVRleHQKK3sK
KyAgICBpZiAoIVtfZGVsZWdhdGUgdmlkZW9FbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIEAiIjsK
KworICAgIHJldHVybiB0aW1lVG9TdHJpbmcoW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdLT5jdXJy
ZW50VGltZSgpKTsKK30KKworLy8gTUFSSzogTlNSZXNwb25kZXIKKworLSAodm9pZCltb3VzZUVu
dGVyZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFVOVVNFRF9QQVJBTSh0aGVFdmVudCk7
CisgICAgLy8gTWFrZSBzdXJlIHRoZSBIVUQgd29uJ3QgYmUgaGlkZGVuIGZyb20gbm93CisgICAg
X21vdXNlSXNJbkhVRCA9IFlFUzsKKyAgICBbc2VsZiBmYWRlV2luZG93SW5dOworfQorCistICh2
b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGhlRXZlbnQpOworICAgIF9tb3VzZUlzSW5IVUQgPSBOTzsKKyAgICBbc2VsZiBmYWRlV2luZG93
SW5dOworfQorCistICh2b2lkKXJld2luZDooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFN
KHNlbmRlcik7CisgICAgaWYgKCFbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0pCisgICAgICAgIHJl
dHVybjsKKyAgICBbX2RlbGVnYXRlIHZpZGVvRWxlbWVudF0tPnJld2luZCgzMCk7Cit9CisKKy0g
KHZvaWQpZmFzdEZvcndhcmQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIp
OworICAgIGlmICghW19kZWxlZ2F0ZSB2aWRlb0VsZW1lbnRdKQorICAgICAgICByZXR1cm47Cit9
CisKKy0gKHZvaWQpZXhpdEZ1bGxzY3JlZW46KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJB
TShzZW5kZXIpOworICAgIGlmIChfaXNFbmRpbmdGdWxsc2NyZWVuKQorICAgICAgICByZXR1cm47
CisgICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKKyAgICBbX2RlbGVnYXRlIHJlcXVlc3RF
eGl0RnVsbHNjcmVlbl07IAorfQorCisvLyBNQVJLOiBOU1dpbmRvd0RlbGVnYXRlCisKKy0gKHZv
aWQpd2luZG93RGlkRXhwb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IFVOVVNFRF9QQVJBTShub3RpZmljYXRpb24pOworICAgIFtzZWxmIHNjaGVkdWxlVGltZVVwZGF0
ZV07Cit9CisKKy0gKHZvaWQpd2luZG93RGlkQ2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7CisgICAgW3NlbGYgdW5z
Y2hlZHVsZVRpbWVVcGRhdGVdOworfQorCitAZW5kCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdp
bmRvd0NvbnRyb2xsZXIubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNpb24gMjI4
Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5IVURXaW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMiArMjIsMTEg
QEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVmlkZW9G
dWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgorI2lmIEVOQUJMRShWSURFTykgJiYgUExB
VEZPUk0oTUFDKQogCi0jaWYgRU5BQkxFKFZJREVPKQorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuSFVEV2luZG93Q29udHJvbGxlci5oIgogCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
KyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRDb252ZXJzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxWaWRlb0VsZW1lbnQuaD4KICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9RVEtpdFNQSS5oPgpAQCAtMTMwLDggKzEyOSw3IEBAIC0g
KHZvaWQpY2VudGVyCiB7CiAgICAgTlNSZWN0IGh1ZEZyYW1lID0gW3NlbGYgZnJhbWVdOwogICAg
IE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtbTlNTY3JlZW4gbWFpblNjcmVlbl0gZnJhbWVdOwotICAg
IFtzZWxmIHNldEZyYW1lVG9wTGVmdFBvaW50Ok5TTWFrZVBvaW50KHNjcmVlbkZyYW1lLm9yaWdp
bi54ICsgKHNjcmVlbkZyYW1lLnNpemUud2lkdGggLSBodWRGcmFtZS5zaXplLndpZHRoKSAvIDIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuRnJhbWUu
b3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQgLSBodWRGcmFtZS5zaXplLmhlaWdo
dCkgLyA2KV07CisgICAgW3NlbGYgc2V0RnJhbWVUb3BMZWZ0UG9pbnQ6TlNNYWtlUG9pbnQoc2Ny
ZWVuRnJhbWUub3JpZ2luLnggKyAoc2NyZWVuRnJhbWUuc2l6ZS53aWR0aCAtIGh1ZEZyYW1lLnNp
emUud2lkdGgpIC8gMiwgc2NyZWVuRnJhbWUub3JpZ2luLnkgKyAoc2NyZWVuRnJhbWUuc2l6ZS5o
ZWlnaHQgLSBodWRGcmFtZS5zaXplLmhlaWdodCkgLyA2KV07CiB9CiAKIC0gKHZvaWQpa2V5RG93
bjooTlNFdmVudCAqKWV2ZW50CkBAIC0yMDMsMjMgKzIwMSwyMyBAQCAtICh2b2lkKWtleURvd246
KE5TRXZlbnQgKilldmVudAogICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnMgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKICAgICBpZiAoW2NoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVycyBsZW5ndGhdID09IDEpIHsKICAgICAgICAgc3dpdGNoIChb
Y2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKLSAgICAg
ICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBsYXlpbmc6bmls
XTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIE5TVXBBcnJvd0Z1
bmN0aW9uS2V5OgotICAgICAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBzZXRW
b2x1bWU6W3NlbGYgbWF4Vm9sdW1lXV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBpbmNyZW1lbnRWb2x1bWVdOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAg
ICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0Vm9sdW1lOjBdOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGVjcmVtZW50Vm9sdW1lXTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICcgJzoKKyAgICAgICAgICAgIFtzZWxmIHRvZ2dsZVBs
YXlpbmc6bmlsXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBOU1VwQXJyb3dG
dW5jdGlvbktleToKKyAgICAgICAgICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0V2
ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQorICAgICAgICAgICAgICAgIFtzZWxmIHNldFZvbHVtZTpb
c2VsZiBtYXhWb2x1bWVdXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbc2Vs
ZiBpbmNyZW1lbnRWb2x1bWVdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE5T
RG93bkFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxh
Z3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlvbikKKyAgICAgICAgICAgICAgICBbc2VsZiBz
ZXRWb2x1bWU6MF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3NlbGYgZGVj
cmVtZW50Vm9sdW1lXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNzIsNyArMjcwLDcgQEAg
LSAodm9pZClmYWRlV2luZG93SW4KICAgICBbc2VsZiBzY2hlZHVsZVRpbWVVcGRhdGVdOwogCiAg
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSBvYmplY3Q6bmlsXTsKLSAgICBpZiAo
IV9tb3VzZUlzSW5IVUQgJiYgW3NlbGYgcGxheWluZ10pICAgLy8gRG9uJ3QgZmFkZSBvdXQgd2hl
biBwYXVzZWQuCisgICAgaWYgKCFfbW91c2VJc0luSFVEICYmIFtzZWxmIHBsYXlpbmddKSAvLyBE
b24ndCBmYWRlIG91dCB3aGVuIHBhdXNlZC4KICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3RvcihmYWRlV2luZG93T3V0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OkhVRFdp
bmRvd0ZhZGVPdXREZWxheV07CiB9CiAKQEAgLTU2NCw3ICs1NjIsNyBAQCAtICh2b2lkKWRlY3Jl
bWVudFZvbHVtZQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCB2b2x1bWUgPSBbc2VsZiB2
b2x1bWVdIC0gMTA7Ci0gICAgW3NlbGYgc2V0Vm9sdW1lOk1BWCh2b2x1bWUsIDApXTsKKyAgICBb
c2VsZiBzZXRWb2x1bWU6c3RkOjptYXgodm9sdW1lLCAwLjBmKV07CiB9CiAKIC0gKHZvaWQpaW5j
cmVtZW50Vm9sdW1lCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0NCw5ICsyNDQsOSBAQAogI2ltcG9y
dCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOU1ByaW50T3BlcmF0aW9u
RXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJQREZWaWV3LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgotI2ltcG9ydCA8V2ViQ29yZS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0FW
S2l0U1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9Mb29rdXBTUEkuaD4KICNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXJTUEkuaD4KSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmlt
YXRpb24uaAkocmV2aXNpb24gMjI4Mjc4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViV2luZG93QW5pbWF0aW9uLmg6MjI4Mjc4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bXBvcnQgPENvY29hL0NvY29hLmg+CisKK1dFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViV2lu
ZG93U2NhbGVBbmltYXRpb24gOiBOU0FuaW1hdGlvbiB7CitAcHJpdmF0ZQorICAgIE5TUmVjdCBf
aW5pdGlhbEZyYW1lLCBfZmluYWxGcmFtZSwgX3JlYWxGcmFtZTsKKyAgICBOU1dpbmRvdyAqX3dp
bmRvdzsgLy8gKGFzc2lnbikKKyAgICBOU0FuaW1hdGlvbiAqX3N1YkFuaW1hdGlvbjsgLy8gKHJl
dGFpbikKKyAgICBOU1RpbWVJbnRlcnZhbCBfaGludGVkRHVyYXRpb247Cit9CistIChpZClpbml0
V2l0aEhpbnRlZER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbiB3aW5kb3c6KE5TV2lu
ZG93ICopd2luZG93IGluaXRhbEZyYW1lOihOU1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6
KE5TUmVjdClmaW5hbEZyYW1lOworCistICh2b2lkKXNldFN1YkFuaW1hdGlvbjooTlNBbmltYXRp
b24gKilhbmltYXRpb247CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWU7CisKKy8vIEJlIHN1cmUg
dG8gY2FsbCBzZXRXaW5kb3c6bmlsIHRvIGNsZWFyIHRoZSB3ZWFrIGxpbmsgX3dpbmRvdyB3aGVu
IGFwcHJvcHJpYXRlCistICh2b2lkKXNldFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7CitAZW5k
CisKKworV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIDog
TlNBbmltYXRpb24geworQHByaXZhdGUKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGEsIF9maW5h
bEFscGhhOworICAgIE5TV2luZG93ICpfd2luZG93OyAvLyAoYXNzaWduKQorICAgIEJPT0wgX2lz
U3RvcHBlZDsKKyAgICAKK30KKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGltZUludGVydmFs
KWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0
KWluaXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGE7CisKKy0gKENHRmxv
YXQpY3VycmVudEFscGhhOworCisvLyBCZSBzdXJlIHRvIGNhbGwgc2V0V2luZG93Om5pbCB0byBj
bGVhciB0aGUgd2VhayBsaW5rIF93aW5kb3cgd2hlbiBhcHByb3ByaWF0ZQorLSAodm9pZClzZXRX
aW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYldpbmRvd0FuaW1hdGlvbi5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViV2luZG93QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCShyZXZpc2lvbiAyMjgyNzgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJXaW5kb3dBbmltYXRpb24ubW06MjI4Mjc4
KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJXaW5kb3dBbmltYXRpb24u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lt
cG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCisKKyNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5o
IgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNsb3dNb3Rpb25GYWN0b3IgPSAxMDsKKwor
c3RhdGljIE5TVGltZUludGVydmFsIFdlYldpbmRvd0FuaW1hdGlvbkR1cmF0aW9uRnJvbUR1cmF0
aW9uKE5TVGltZUludGVydmFsIGR1cmF0aW9uKQoreworICAgIHJldHVybiAoW1tOU0FwcCBjdXJy
ZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNFdmVudE1vZGlmaWVyRmxhZ1NoaWZ0KSA/IGR1
cmF0aW9uICogc2xvd01vdGlvbkZhY3RvciA6IGR1cmF0aW9uOworfQorCitzdGF0aWMgTlNSZWN0
IHNjYWxlZFJlY3QoTlNSZWN0IF9pbml0aWFsRnJhbWUsIE5TUmVjdCBfZmluYWxGcmFtZSwgQ0dG
bG9hdCBmYWN0b3IpCit7CisgICAgTlNSZWN0IGN1cnJlbnRSZWN0ID0gX2luaXRpYWxGcmFtZTsK
KyAgICBjdXJyZW50UmVjdC5vcmlnaW4ueCArPSAoTlNNaW5YKF9maW5hbEZyYW1lKSAtIE5TTWlu
WChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgY3VycmVudFJlY3Qub3JpZ2luLnkgKz0g
KE5TTWluWShfZmluYWxGcmFtZSkgLSBOU01pblkoX2luaXRpYWxGcmFtZSkpICogZmFjdG9yOwor
ICAgIGN1cnJlbnRSZWN0LnNpemUud2lkdGggKz0gKE5TV2lkdGgoX2ZpbmFsRnJhbWUpIC0gTlNX
aWR0aChfaW5pdGlhbEZyYW1lKSkgKiBmYWN0b3I7CisgICAgY3VycmVudFJlY3Quc2l6ZS5oZWln
aHQgKz0gKE5TSGVpZ2h0KF9maW5hbEZyYW1lKSAtIE5TSGVpZ2h0KF9pbml0aWFsRnJhbWUpKSAq
IGZhY3RvcjsKKyAgICByZXR1cm4gY3VycmVudFJlY3Q7Cit9CisKK3N0YXRpYyBDR0Zsb2F0IHNx
dWFyZWREaXN0YW5jZShOU1BvaW50IHBvaW50MSwgTlNQb2ludCBwb2ludDIpCit7CisgICAgQ0dG
bG9hdCBkZWx0YVggPSBwb2ludDEueCAtIHBvaW50Mi54OworICAgIENHRmxvYXQgZGVsdGFZID0g
cG9pbnQxLnkgLSBwb2ludDIueTsKKyAgICByZXR1cm4gZGVsdGFYICogZGVsdGFYICsgZGVsdGFZ
ICogZGVsdGFZOworfQorCit9CisKK3VzaW5nIFdlYkNvcmU6OldlYldpbmRvd0FuaW1hdGlvbkR1
cmF0aW9uRnJvbUR1cmF0aW9uOwordXNpbmcgV2ViQ29yZTo6bmFycm93UHJlY2lzaW9uVG9GbG9h
dDsKK3VzaW5nIFdlYkNvcmU6OnNjYWxlZFJlY3Q7Cit1c2luZyBXZWJDb3JlOjpzcXVhcmVkRGlz
dGFuY2U7CitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93U2NhbGVBbmltYXRpb24KKworLSAoaWQp
aW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1h
dGlvbk5vbmJsb2NraW5nVGhyZWFkZWRdOworICAgIFtzZWxmIHNldEZyYW1lUmF0ZTo2MF07Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoSGludGVkRHVyYXRpb246KE5TVGlt
ZUludGVydmFsKWR1cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGFsRnJhbWU6
KE5TUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooTlNSZWN0KWZpbmFsRnJhbWUKK3sKKyAg
ICBzZWxmID0gW3NlbGYgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIF9oaW50ZWREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIF93aW5kb3cgPSB3aW5kb3c7
CisgICAgX2luaXRpYWxGcmFtZSA9IGluaXRpYWxGcmFtZTsKKyAgICBfZmluYWxGcmFtZSA9IGZp
bmFsRnJhbWU7CisgICAgX3JlYWxGcmFtZSA9IFt3aW5kb3cgZnJhbWVdOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKSBkZWFsbG9jCit7CisgICAgW19zdWJBbmltYXRpb24gcmVsZWFz
ZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldER1cmF0aW9uOihOU1Rp
bWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIFtzdXBlciBzZXREdXJhdGlvbjpXZWJXaW5kb3dB
bmltYXRpb25EdXJhdGlvbkZyb21EdXJhdGlvbihkdXJhdGlvbildOworfQorCistICh2b2lkKXNl
dFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2luZG93OworfQor
CistIChmbG9hdCljdXJyZW50VmFsdWUKK3sKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjUgLSAwLjUgKiBjb3MocGlEb3VibGUgKiAoMSAtIFtzZWxmIGN1cnJlbnRQcm9ncmVz
c10pKSk7Cit9CisKKy0gKE5TUmVjdCljdXJyZW50RnJhbWUKK3sKKyAgICByZXR1cm4gc2NhbGVk
UmVjdChfZmluYWxGcmFtZSwgX2luaXRpYWxGcmFtZSwgW3NlbGYgY3VycmVudFZhbHVlXSk7Cit9
CisKK3N0YXRpYyB2b2lkIGZsaXBSZWN0KE5TUmVjdCogcmVjdCkKK3sKKyAgICByZWN0LT5vcmln
aW4ueSA9IE5TTWF4WShbKE5TU2NyZWVuICopW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdElu
ZGV4OjBdIGZyYW1lXSkgLSBOU01heFkoKnJlY3QpOworfQorCitzdGF0aWMgQ0dTQ29ubmVjdGlv
bklEIG1haW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKQoreworICAgIHN0YXRpYyBDR1NDb25u
ZWN0aW9uSUQgY2dzSWQ7CisgICAgaWYgKCFjZ3NJZCkKKyAgICAgICAgY2dzSWQgPSBDR1NNYWlu
Q29ubmVjdGlvbklEKCk7CisgICAgcmV0dXJuIGNnc0lkOworfQorCitzdGF0aWMgdm9pZCBzZXRT
Y2FsZWRGcmFtZUZvcldpbmRvdyhOU1dpbmRvdyAqd2luZG93LCBOU1JlY3Qgc2NhbGVGcmFtZSwg
TlNSZWN0IG5vblNjYWxlZEZyYW1lKQoreworICAgIGlmIChOU0VxdWFsUmVjdHMoc2NhbGVGcmFt
ZSwgbm9uU2NhbGVkRnJhbWUpKSB7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xbm9ubnVsbCIKKyAgICAgICAgQ0dTU2V0
V2luZG93V2FycChtYWluV2luZG93U2VydmVyQ29ubmVjdGlvbklEKCksIHdpbmRvdy53aW5kb3dO
dW1iZXIsIDAsIDAsIG51bGxwdHIpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZsb2F0IG1lc2hbMTZdOworICAgIAorICAg
IGZsaXBSZWN0KCZzY2FsZUZyYW1lKTsKKyAgICBmbGlwUmVjdCgmbm9uU2NhbGVkRnJhbWUpOwor
ICAgIAorICAgIC8vIHRvcC1sZWZ0IHBvaW50ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzBdID0g
MDsKKyAgICBtZXNoWzFdID0gMDsKKyAgICBtZXNoWzJdID0gTlNNaW5YKHNjYWxlRnJhbWUpOwor
ICAgIG1lc2hbM10gPSBOU01pblkoc2NhbGVGcmFtZSk7CisgICAgCisgICAgLy8gdG9wLXJpZ2h0
IHBvaW50ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzRdID0gTlNXaWR0aChub25TY2FsZWRGcmFt
ZSk7CisgICAgbWVzaFs1XSA9IDA7CisgICAgbWVzaFs2XSA9IE5TTWF4WChzY2FsZUZyYW1lKTsK
KyAgICBtZXNoWzddID0gTlNNaW5ZKHNjYWxlRnJhbWUpOworICAgIAorICAgIC8vIGJvdHRvbS1s
ZWZ0ICh0byBhbmQgZnJvbSkKKyAgICBtZXNoWzhdID0gMDsKKyAgICBtZXNoWzldID0gTlNIZWln
aHQobm9uU2NhbGVkRnJhbWUpOworICAgIG1lc2hbMTBdID0gTlNNaW5YKHNjYWxlRnJhbWUpOwor
ICAgIG1lc2hbMTFdID0gTlNNYXhZKHNjYWxlRnJhbWUpOworICAgIAorICAgIC8vIGJvdHRvbS1y
aWdodCAodG8gYW5kIGZyb20pCisgICAgbWVzaFsxMl0gPSBOU1dpZHRoKG5vblNjYWxlZEZyYW1l
KTsKKyAgICBtZXNoWzEzXSA9IE5TSGVpZ2h0KG5vblNjYWxlZEZyYW1lKTsKKyAgICBtZXNoWzE0
XSA9IE5TTWF4WChzY2FsZUZyYW1lKTsKKyAgICBtZXNoWzE1XSA9IE5TTWF4WShzY2FsZUZyYW1l
KTsKKyAgICAKKyAgICAvLyBBcHBseSB0aGUgd2FycC4KKyAgICBDR1NTZXRXaW5kb3dXYXJwKG1h
aW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKSwgd2luZG93LndpbmRvd051bWJlciwgMiwgMiwg
bWVzaCk7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dy
ZXNzKXByb2dyZXNzCit7CisgICAgaWYgKCFfd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAg
ICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAgIE5TUmVjdCBjdXJy
ZW50UmVjdCA9IFtzZWxmIGN1cnJlbnRGcmFtZV07CisgICAgc2V0U2NhbGVkRnJhbWVGb3JXaW5k
b3coX3dpbmRvdywgY3VycmVudFJlY3QsIF9yZWFsRnJhbWUpOworICAgIFtfc3ViQW5pbWF0aW9u
IHNldEN1cnJlbnRQcm9ncmVzczpwcm9ncmVzc107Cit9CisKKy0gKHZvaWQpc2V0U3ViQW5pbWF0
aW9uOihOU0FuaW1hdGlvbiAqKWFuaW1hdGlvbgoreworICAgIGlkIG9sZEFuaW1hdGlvbiA9IF9z
dWJBbmltYXRpb247CisgICAgX3N1YkFuaW1hdGlvbiA9IFthbmltYXRpb24gcmV0YWluXTsKKyAg
ICBbb2xkQW5pbWF0aW9uIHJlbGVhc2VdOworfQorCistIChOU1RpbWVJbnRlcnZhbClhZGRpdGlv
bmFsRHVyYXRpb25OZWVkZWRUb1JlYWNoRmluYWxGcmFtZQoreworICAgIHN0YXRpYyBjb25zdCBD
R0Zsb2F0IG1heEFkZGl0aW9uYWxEdXJhdGlvbiA9IDE7CisgICAgc3RhdGljIGNvbnN0IENHRmxv
YXQgc3BlZWRGYWN0b3IgPSAwLjAwMDFmOworICAgIAorICAgIENHRmxvYXQgbWF4RGlzdCA9IHNx
dWFyZWREaXN0YW5jZShfaW5pdGlhbEZyYW1lLm9yaWdpbiwgX2ZpbmFsRnJhbWUub3JpZ2luKTsK
KyAgICBDR0Zsb2F0IGRpc3Q7CisgICAgCisgICAgZGlzdCA9IHNxdWFyZWREaXN0YW5jZShOU01h
a2VQb2ludChOU01heFgoX2luaXRpYWxGcmFtZSksIE5TTWluWShfaW5pdGlhbEZyYW1lKSksIE5T
TWFrZVBvaW50KE5TTWF4WChfZmluYWxGcmFtZSksIE5TTWluWShfZmluYWxGcmFtZSkpKTsKKyAg
ICBpZiAoZGlzdCA+IG1heERpc3QpCisgICAgICAgIG1heERpc3QgPSBkaXN0OworICAgIAorICAg
IGRpc3QgPSBzcXVhcmVkRGlzdGFuY2UoTlNNYWtlUG9pbnQoTlNNYXhYKF9pbml0aWFsRnJhbWUp
LCBOU01heFkoX2luaXRpYWxGcmFtZSkpLCBOU01ha2VQb2ludChOU01heFgoX2ZpbmFsRnJhbWUp
LCBOU01heFkoX2ZpbmFsRnJhbWUpKSk7CisgICAgaWYgKGRpc3QgPiBtYXhEaXN0KQorICAgICAg
ICBtYXhEaXN0ID0gZGlzdDsKKyAgICAKKyAgICBkaXN0ID0gc3F1YXJlZERpc3RhbmNlKE5TTWFr
ZVBvaW50KE5TTWluWChfaW5pdGlhbEZyYW1lKSwgTlNNaW5ZKF9pbml0aWFsRnJhbWUpKSwgTlNN
YWtlUG9pbnQoTlNNaW5YKF9maW5hbEZyYW1lKSwgTlNNaW5ZKF9maW5hbEZyYW1lKSkpOworICAg
IGlmIChkaXN0ID4gbWF4RGlzdCkKKyAgICAgICAgbWF4RGlzdCA9IGRpc3Q7CisgICAgCisgICAg
cmV0dXJuIE1JTihzcXJ0KG1heERpc3QpICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJh
dGlvbik7ICAgIAorfQorCistICh2b2lkKXN0YXJ0QW5pbWF0aW9uCit7CisgICAgLy8gQ29tcHV0
ZSBleHRyYSB0aW1lCisgICAgaWYgKF9oaW50ZWREdXJhdGlvbikKKyAgICAgICAgW3NlbGYgc2V0
RHVyYXRpb246X2hpbnRlZER1cmF0aW9uICsgW3NlbGYgYWRkaXRpb25hbER1cmF0aW9uTmVlZGVk
VG9SZWFjaEZpbmFsRnJhbWVdXTsKKyAgICBbc3VwZXIgc3RhcnRBbmltYXRpb25dOworfQorCist
ICh2b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICBfd2luZG93ID0gbmlsOworICAgIFtzdXBlciBz
dG9wQW5pbWF0aW9uXTsKKyAgICBbX3N1YkFuaW1hdGlvbiBzdG9wQW5pbWF0aW9uXTsKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViV2luZG93RmFkZUFuaW1hdGlvbgorCistIChpZClp
bml0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxvY2tpbmdNb2RlOk5TQW5pbWF0
aW9uTm9uYmxvY2tpbmdUaHJlYWRlZF07CisgICAgW3NlbGYgc2V0RnJhbWVSYXRlOjYwXTsKKyAg
ICBbc2VsZiBzZXRBbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1
cmF0aW9uIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgaW5pdGlhbEFscGhhOihDR0Zsb2F0KWlu
aXRpYWxBbHBoYSBmaW5hbEFscGhhOihDR0Zsb2F0KWZpbmFsQWxwaGEKK3sKKyAgICBzZWxmID0g
W3NlbGYgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOyAgICAKKyAg
ICBfd2luZG93ID0gd2luZG93OworICAgIF9pbml0aWFsQWxwaGEgPSBpbml0aWFsQWxwaGE7Cisg
ICAgX2ZpbmFsQWxwaGEgPSBmaW5hbEFscGhhOworICAgIFtzZWxmIHNldER1cmF0aW9uOmR1cmF0
aW9uXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXREdXJhdGlvbjooTlNUaW1l
SW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBbc3VwZXIgc2V0RHVyYXRpb246V2ViV2luZG93QW5p
bWF0aW9uRHVyYXRpb25Gcm9tRHVyYXRpb24oZHVyYXRpb24pXTsKK30KKworLSAoQ0dGbG9hdClj
dXJyZW50QWxwaGEKK3sKKyAgICByZXR1cm4gTUFYKDAsIE1JTigxLCBfaW5pdGlhbEFscGhhICsg
W3NlbGYgY3VycmVudFZhbHVlXSAqIChfZmluYWxBbHBoYSAtIF9pbml0aWFsQWxwaGEpKSk7Cit9
CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dy
ZXNzCit7CisgICAgaWYgKF9pc1N0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChfd2luZG93KTsKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKwor
ICAgIENHU1NldFdpbmRvd0FscGhhKG1haW5XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uSUQoKSwgX3dp
bmRvdy53aW5kb3dOdW1iZXIsIHNlbGYuY3VycmVudEFscGhhKTsKK30KKworLSAodm9pZClzZXRX
aW5kb3c6KE5TV2luZG93Kil3aW5kb3cKK3sKKyAgICBfd2luZG93ID0gd2luZG93OworfQorCist
ICh2b2lkKXN0b3BBbmltYXRpb24KK3sKKyAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHdoZW4gd2Ug
YXJlIGEgc3ViIGFuaW1hdGlvbiBvZiBhIHNjYWxlIGFuaW1hdGlvbi4KKyAgICAvLyBJbiB0aGlz
IGNhc2Ugd2UgYXJlIGhvc3RlZCBpbiB0aGUgYW5pbWF0ZWQgdGhyZWFkIG9mIHRoZSBwYXJlbnQK
KyAgICAvLyBhbmQgZXZlbiBhZnRlciBbc3VwZXIgc3RvcEFuaW1hdGlvbl0sIHRoZSBwYXJlbnQg
bWlnaHQgY2FsbAorICAgIC8vIHNldEN1cnJyZW50UHJvZ3Jlc3MuCisgICAgX2lzU3RvcHBlZCA9
IFlFUzsKKworICAgIFtzdXBlciBzdG9wQW5pbWF0aW9uXTsKK30KKworQGVuZAorCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViV2luZG93QW5pbWF0
aW9uLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViV2luZG93QW5pbWF0aW9uLm1tCShyZXZp
c2lvbiAyMjgyNzgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYldpbmRv
d0FuaW1hdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDExIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaW1wb3J0ICJjb25maWcuaCIKKyNpZiBQTEFURk9STShNQUMpCiAK
ICNpbXBvcnQgIldlYldpbmRvd0FuaW1hdGlvbi5oIgogCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNp
b24uaCIKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRDb252ZXJzaW9uLmg+CiAjaW1wb3J0IDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0yMTAsNyArMjEwLDcgQEAgLSAoTlNUaW1lSW50
ZXJ2YWwpYWRkaXRpb25hbER1cmF0aW9uTmVlZAogICAgIGlmIChkaXN0ID4gbWF4RGlzdCkKICAg
ICAgICAgbWF4RGlzdCA9IGRpc3Q7CiAgICAgCi0gICAgcmV0dXJuIE1JTihzcXJ0KG1heERpc3Qp
ICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlvbik7ICAgIAorICAgIHJldHVybiBz
dGQ6Om1pbihzcXJ0KG1heERpc3QpICogc3BlZWRGYWN0b3IsIG1heEFkZGl0aW9uYWxEdXJhdGlv
bik7CiB9CiAKIC0gKHZvaWQpc3RhcnRBbmltYXRpb24KQEAgLTI2Miw3ICsyNjIsNyBAQCAtICh2
b2lkKXNldER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhCiAKIC0gKENHRmxvYXQpY3VycmVu
dEFscGhhCiB7Ci0gICAgcmV0dXJuIE1BWCgwLCBNSU4oMSwgX2luaXRpYWxBbHBoYSArIFtzZWxm
IGN1cnJlbnRWYWx1ZV0gKiAoX2ZpbmFsQWxwaGEgLSBfaW5pdGlhbEFscGhhKSkpOworICAgIHJl
dHVybiBzdGQ6Om1heChzdGF0aWNfY2FzdDxDR0Zsb2F0PigwKSwgc3RkOjptaW4oc3RhdGljX2Nh
c3Q8Q0dGbG9hdD4oMSksIF9pbml0aWFsQWxwaGEgKyBbc2VsZiBjdXJyZW50VmFsdWVdICogKF9m
aW5hbEFscGhhIC0gX2luaXRpYWxBbHBoYSkpKTsKIH0KIAogLSAodm9pZClzZXRDdXJyZW50UHJv
Z3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKQEAgLTI5NCwzICsyOTQsNCBAQCAt
ICh2b2lkKXN0b3BBbmltYXRpb24KIAogQGVuZAogCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>